リンク
復習
- 相互評価の観点check
- Mikatype試験の予行演習(どこ?ハンカチ)
学ぶ項目
今日は「跳ね回るたまたま」を作っていきます.何か大きなものを作るのも,小さなステップの積み重ねです.小さな動く枠組みから初めて,徐々に細かい動作を付け足していく,ゲームやアニメを作るのとよく似た作業です.アーティストになったつもりで,一歩先の動作を思い描きながら,コードを少しずつ改良していってください.
- 動作がおかしい時は,その前の段階からいじったコードに間違いがあります.
- その該当するテキスト(教科書)をじっくり読み込むようにしてください.
- 作業を一つ飛ばしたり,1行飛ばしたり,一文字違ったり.
- 出力されたエラーを読んでください.
- まずはエラー行と単語をチェックしてください.
これだけでもコーディング効率は格段に上がります.
課題
提出物
完成版(bouncing_balls.py)をLUNAに提出しなさい.
python code
- Lesson7-2を参照して,tkinterで日の丸を作りなさい.
- Lesson7-3を参照して,クリックに反応させなさい.
- Lesson7-4を参照して,うごく球を作りなさい.
- Lesson7-5, 7-6を参照して,跳ねる球を作りなさい.
- Lesson7-7を参照して,たくさんの跳ねる球を作りなさい.
Lesson7-7の注意
p.209-10(example07-07-01.py)までできれば一度完成です.修正は一度に頭からするのではなく,細かくステップを切って修正してください.私は,次の項目を一行ずつ変更して行きます.
- line:4のballsの一つ目だけを追加.
- line:10 globalにballsを追加
- line:11 for b in balls:にする
- line:12-31インデントを追加
- dx,dyをb["dx"], b["dy"]に変更
- x, y をb["x"], b["y"]に変更
- line:21のfill = 'red'をfill=b["color"]に変更
上手くいったら,ballsを付け足して全ての動作を確認
オプション課題
balls:クラスで作るたま
Lesson7-8, 9は任意ですが,プログラミングの最新のコツです.class化できるとコードが読みやすくなります.要はチャンキングですが,じっくり読んでみてください.
./d11_bouncing_balls/bouncing_ball_v5_class.py
1 import tkinter as tk
2 from tkinter.constants import MOVETO
3
4
5 class Ball:
6 def __init__(self, x, y, dx, dy, color):
7 self.x = x
8 self.y = y
9 self.dx = dx
10 self.dy = dy
11 self.color = color
12 self.mae = None
13
14 def move(self, canvas):
15 # global x, y, dx, dy
16 if self.mae is not None:
17 canvas.delete(self.mae)
18
19 self.x = self.x+self.dx
20 self.y = self.y+self.dy
21 self.mae = canvas.create_oval(self.x-20, self.y-20, self.x +
22 20, self.y+20, fill=self.color, width=0)
23 if self.x >= canvas.winfo_width():
24 self.dx = -1
25 if self.x <= 0:
26 self.dx = 1
27 if self.y >= canvas.winfo_height():
28 self.dy = -1
29 if self.y <= 0:
30 self.dy = 1
31
32 b = Ball(400, 300, 1, 1, "red")
33
34 def loop():
35 b.move(canvas)
36 root.after(10, loop)
37
38
39 root = tk.Tk()
40 root.geometry("600x400")
41
42 canvas = tk.Canvas(root, width=600, height=400, bg="white")
43 canvas.place(x=0, y=0)
44
45 # canvas.bind("<Button-1>", click)
46 root.after(10, loop)
47 root.mainloop()
さらに発展 たまたま^8
さらなる発展です.ここまで来ると芸術だ!?
- source ~/Desktop/lecture_24s/comp_a24/d7_11_python/d11_bouncing_balls.org