processing pytonモードで、数当てゲームを作りたい
ウィンドウを出している(size(600, 600)
)以上そこに表示をしたいんですよね?
まあコンソール出力はできても、コンソール入力ができないわけですが^^;
実行すると灰色の画面しか表示されません。どうすればいいでしょうか。
draw()
は毎フレーム(デフォルトでは1秒に60回)呼ばれます。
その中で無限ループのようなことをしてはいけません(無限ではないですが^^;
あるいはエラーになって止まっているのかもしれません(Processing4だとエラーがなんも見えないですね^^;
Processingではユーザーから文字列を入力させる手軽な方法がありません(1文字の入力なら簡単に扱えます)
回答ではkeyTyped()
で改行が入力されるまで、文字をため込むようにしてみました(バックスペースや矢印キーは未対応)
Processing
1count = 1
2answer = int(random(100)) + 1
3input = ""
4
5def setup():
6 size(600, 600)
7 textSize(20)
8 textAlign(CENTER, CENTER)
9 background(0)
10 text("Enter 1~100", 0, 0, width, height)
11
12def draw():
13 pass
14
15def keyTyped():
16 global count, input
17 background(0)
18
19 if key != '\n':
20 input += key
21 text(input, 0, 0, width, height)
22 return
23
24 if not input.isdecimal():
25 text("Wrong Enter. Please enter the numbers again", 0, 0, width, height)
26 input = ""
27 return
28
29 number = int(input)
30 input = ""
31
32 if answer == number:
33 s = "correct. correct is " + str(answer) \
34 + "\nCorrectly answered in the " + str(count) + " challenge+"
35 text(s, 0, 0, width, height)
36 return
37 elif answer < number:
38 text(str(number) + " is a larger number", 0, 0, width, height)
39 else:
40 text(str(number) + " is a smaller number", 0, 0, width, height)
41
42 count += 1
random() \ Language (API)
textAlign() \ Language (API)
text() \ Language (API)
keyTyped() \ Language (API)
コンソールプログラムとGUIプログラムでは、考え方(作り方)をガラッと変える必要があります。
コンソールプログラムに適した入力法と、GUIプログラムに適した入力法も当然変わってきます。
一例としてマウスホイールで、入力を決めるようにしてみました(使いやすいかどうかはまた別の話^^;
Processing
1count = 1
2answer = int(random(100)) + 1
3number = 50
4s = " "
5
6def setup():
7 size(600, 600)
8 textFont(createFont(u"メイリオ", 30)) # 適当な日本語フォント
9 textAlign(CENTER, CENTER)
10 rectMode(CORNERS)
11
12def draw():
13 background(0)
14
15 textSize(30)
16 text(u"1~100の数字を当ててね", 0, 0, width, height/2)
17
18 textSize(20)
19 text(u"ホイールで変更 クリックで確定", 0, 80, width, height/2)
20
21 textSize(100)
22 text(str(number), 0, 0, width, height)
23
24 textSize(30)
25 text(s, 0, height/2, width, height)
26
27def mouseClicked():
28 global count, answer, number, s
29
30 if s[-1] == u"!":
31 count = 1
32 answer = int(random(100)) + 1
33 number = 50
34 s = " "
35 return
36
37 if answer == number:
38 s = str(count) + u"回で正解!!"
39 elif answer < number:
40 s = u"大きすぎます"
41 else:
42 s = u"小さすぎます"
43
44 count += 1
45
46def mouseWheel(event):
47 global number
48
49 if event.getCount() < 0:
50 number += 1
51 else:
52 number -= 1
53
54 number = constrain(number, 1, 100)
textFont() \ Language (API)
createFont() \ Language (API)
rectMode() \ Language (API)
mouseClicked() \ Language (API)
mouseWheel() \ Language (API)
constrain() \ Language (API)