teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

座標の計算が一部おかしかったので修正

2021/09/06 14:28

投稿

Daregada
Daregada

スコア11990

answer CHANGED
@@ -39,7 +39,7 @@
39
39
 
40
40
  Turtleオブジェクトの生成は、他の回答者の回答にもあるように、`t.Turtle`ではなく`t.Turtle()`です。
41
41
 
42
- ボールの初期位置は`ball.goto(5, 5)`のように、x座標とy座標をカンマ区切りで指定します。元のコードでは(5, 5)に設定しようとして失敗していますが、パドルで受け止め損ねて再開するときは(0, 0)に設定しているので、ここでは(0, 0)に揃えてみました。
42
+ ボールの初期位置は`ball.goto(5, 5)`のように、x座標とy座標をカンマ区切りで指定します。元のコードでは(5, 5)に設定しようとして(カンマではなくドットを書いて)失敗していますが、パドルで受け止め損ねて再開するときは(0, 0)に設定しているので、ここでは(0, 0)に揃えてみました。
43
43
 
44
44
  なお、`ball.get_shapepoly()`で得られるリストを見ると分かりますが、ボールの半径は10ピクセル、実際には円ではなく20角形です。
45
45
 
@@ -66,28 +66,12 @@
66
66
  + ball.sety(ball.ycor() + ballydirection)
67
67
  ```
68
68
 
69
- ボールのx座標を得る`ball.xcor()`や、y 座標を得る`ball.ycor()`には引数を指定しません。それらの返り値に対して、`ballxdirection`や`ballydirection`を加算してください。
69
+ ボールのx座標を得る`ball.xcor()`や、y座標を得る`ball.ycor()`には引数を指定しません。それらの返り値に対して、`ballxdirection`や`ballydirection`を加算してください。
70
70
 
71
- ### 画面の上下端でボールが跳ねる処理
72
- ```diff
73
- - if ball.ycor() > 290:
74
- - ball.sety(290)
75
- + if ball.ycor() > 280:
76
- + ball.sety(280)
77
- ballydirection = ballydirection * -1
78
- - if ball.ycor() < -290:
79
- - ball.sety(-290)
80
- + if ball.ycor() < -280:
81
- + ball.sety(-280)
82
- ballydirection = ballydirection * -1
83
- ```
84
-
85
- ボールの半径が10ピクセル(直径は20ピクセル)、画面の高さが600ピクセルなので、概算で(-300, 300)の範囲と見なし、ボールの一部が画面からはみ出さないように、±280を比較対象としています。
86
-
87
71
  ### 画面の左右端でボールを消して中央に戻し、得点を加算する処理
88
72
  ```diff
89
73
  - if (ball.xcor()) < -390:
90
- + if ball.xcor() < -380:
74
+ + if ball.xcor() < -390:
91
75
  ball.goto(0, 0)
92
76
  ballxdirection = ballxdirection * -1
93
77
  - playerAscore = playerBscore + 1
@@ -96,7 +80,7 @@
96
80
  - pen.write("player A:{} player B:{}".format(playerAscore, playerBscore), align='center', font=('Arial', 24, 'normal'))
97
81
  + pen.write(f"player A:{playerAscore} player B:{playerBscore}", align='center', font=('Arial', 24, 'normal'))
98
82
 
99
- + if ball.xcor() > 380:
83
+ + if ball.xcor() > 390:
100
84
  + ball.goto(0, 0)
101
85
  + ballxdirection = ballxdirection * -1
102
86
  + playerBscore += 1
@@ -105,7 +89,7 @@
105
89
  +
106
90
  ```
107
91
 
108
- ボールの半径が10ピクセル(直径は20ピクセル)、画面の幅が800ピクセルなので、概算で(-400, 400)の範囲と見なし、ボールの一部が画面からはみ出さないように、±380を比較対象としています。
92
+ ボールの半径が10ピクセル(直径は20ピクセル)、画面の幅が800ピクセルなので、概算で(-400, 400)の範囲と見なし、ボールの一部が画面からはみ出さないように、±390を比較対象としています。
109
93
 
110
94
  元のソースでは、左端での処理しか書いていなかったので、右端での処理を追加します。`playerAscore = playerBscore + 1`なんて書いてありました。`+=`を使えば、右辺に同じ変数名を書かずに、値の更新を明示できます。
111
95