#author("2017-11-30T14:25:19+09:00","","") ** 壁を作る [#uaa54598] #author("2023-01-31T10:32:50+09:00","default:maa","maa") まずLOCATE文とPRINT文、FOR〜NEXT文をうまく使って、"#"を並べた壁を作る。FOR〜NEXT文は、決まった回数処理を繰り返すときに便利。回数を数えるためにひとつの変数が使われているはず。その変数をうまく"#"を表示する個数、表示する座標の処理に使おう。 #ref(wall.png,center) 100 CLS 110 '--- 壁を描く 120 LOCATE 19,1 130 PRINT "#########################################" 140 LOCATE 19,23 150 PRINT "#########################################" 160 FOR I=2 to 22 170 LOCATE 19,I 180 PRINT "# #" 190 NEXT I ** ボールが壁で跳ね返るようにする [#w83d5bb1] "[[ボールを表示して画面上を移動させる>LOCATE文でボールを動かす#xb72ef20]]"で分かったように、例えばボールを右下に移動させるには、ボールの表示座標をX,Y座標共に次々と"1"ずつ増加させることであった。 - まずは、ボールが動き続けるようにするために、WHILE〜WEND でプログラムを無限ループにしてみよう。 - ボールが下の壁に当たるという状態は、ボールの表示座標がどのような状態になったことを意味するのだろうか? - 右下へ移動中、下の壁に跳ね返るということは、今度は右上に移動していくことになるが、そのときのボールの表示座標はどのように変化していくのだろうか? 100 CLS 110 '--- 壁を描く 120 LOCATE 19,1 130 PRINT "#########################################" 140 LOCATE 19,23 150 PRINT "#########################################" 160 FOR I=2 to 22 170 LOCATE 19,I 180 PRINT "# #" 190 NEXT I 200 '--- ボール座標 X,Y 移動方向 XM,YM 持ち玉数 BALL 210 X=40:Y=10:XM=1:YM=1:BALL=3 220 '--- メインループ 持ち球がある間はゲームが続く 230 WHILE BALL>0 240 '--- ボールを表示 250 LOCATE X,Y:PRINT "o" 260 '--- ボールの速度の調整(空ループ) 270 FOR I=0 TO 500:NEXT I 280 '--- 上下左右の壁に当たったら移動方向を反転 290 IF Y= 2 OR Y=22 THEN YM=-YM 300 IF X=20 OR X=58 THEN XM=-XM 310 '--- ボールを消して、次のボール座標を計算 320 LOCATE X,Y:PRINT " " 330 X=X+XM:Y=Y+YM 340 WEND