やりたい動作のイメージです
クリックされるたびに塗りつぶされる図形が移動する
なるほどそういう感じですか。
for文で描いているのでちょっとややこしいですかね。
いろいろやり方はあるでしょうが、色の配列を用意しておくのはどうでしょうか。
Python
1colors = []
2
3def setup():
4 global colors
5
6 size(600, 600)
7 colors = [color(255)] * 9
8 colors[0] = color(0)
9
10def draw():
11 background(128)
12 x, y = 100, 100
13 for i in range(0, 3):
14 fill(colors[0 + i * 3])
15 ellipse(x, y + 150 * i, 50, 50)
16
17 fill(colors[1 + i * 3])
18 rect(x + 150, y - 25 + 150 * i, 50, 50)
19
20 fill(colors[2 + i * 3])
21 triangle(x + 350, y - 25 + 150 * i, x + 325, y + 25 + 150 * i, x + 375, y + 25 + 150 * i)
22
23def mouseClicked():
24 global colors
25
26 #一番後ろ(-1:)と一番後ろ以外の全部(:-1)をつなげて入れなおす(=右に1っこずれる)
27 colors = colors[-1:] + colors[:-1]
配列のシフトがPythonicな感じです^^
Python リストのインデックスをずらす!! - Qiita
色の配列にしたのは、色を増やしたりが楽だろうと思ってのことです。
要件を満たすだけなら、グローバル変数はintひとつで十分です。
Python
1current = 0
2
3def setup():
4 size(600, 600)
5
6def draw():
7 background(128)
8 x, y = 100, 100
9 for i in range(0, 3):
10 fill(0 if 0 + i * 3 == current else 255)
11 ellipse(x, y + 150 * i, 50, 50)
12
13 fill(0 if 1 + i * 3 == current else 255)
14 rect(x + 150, y - 25 + 150 * i, 50, 50)
15
16 fill(0 if 2 + i * 3 == current else 255)
17 triangle(x + 350, y - 25 + 150 * i, x + 325, y + 25 + 150 * i, x + 375, y + 25 + 150 * i)
18
19def mouseClicked():
20 global current
21 current = (current + 1) % 9
ループを9回まわすほうが、fill
に関してはわかりやすいかもしれません。
Python
1current = 0
2
3def setup():
4 size(600, 600)
5
6def draw():
7 background(128)
8 translate(100, 100)
9# for i, (col, row) in enumerate([(i % 3, i / 3) for i in range(9)]):
10 for i in range(9):
11 fill(0 if i == current else 255)
12 col = i % 3
13 row = i / 3
14 y = 150 * row
15 if col == 0:
16 ellipse(0, y, 50, 50)
17 elif col == 1:
18 rect(150, y - 25, 50, 50)
19 else:
20 triangle(350, y - 25, 325, y + 25, 375, y + 25)
21
22def mouseClicked():
23 global current
24 current = (current + 1) % 9