#author("2018-01-18T12:15:01+09:00","","") **下の壁をとる [#bcbb2964] ここまで来たらゲームの大部分はできたも同然。とりあえず下の壁を表示していた箇所を取って、そして、下の壁で反射させていた部分を取ってしまって、ゲームの仕上げにかかろう。 #ref(dewall.png,center) - ボールをラケットで跳ね返したら点数を加算! - 持ち玉3個で、失敗(ラケットで受け損ねて、ボールが画面下の座標まで行ってしまう)したら、持ち玉を1個減らして、ゲーム再スタート! - 持ち玉がなくなったらゲーム終了! - 適当な場所に持ち玉の数、得点を表示するようにしよう。 #author("2023-01-31T10:33:36+09:00","default:maa","maa") 100 CLS 110 '--- 壁を描く 120 LOCATE 19,1 130 PRINT "#########################################" 140 FOR I=2 to 22 150 LOCATE 19,I 160 PRINT "# #" 170 NEXT I 180 '--- ボール座標 X,Y 移動方向 XM,YML 190 X=40:Y=10:XM=1:YM=1 200 '--- ラケットの座標 BX,BY 移動方向 BM 210 BX=38:BY=22:BM=0 220 '--- ボールの個数とスコアの表示 230 BALL=3:SCORE=0 240 LOCATE 20,0:PRINT "Score: ";SCORE 250 LOCATE 51,0:PRINT "Ball: ";BALL 260 '--- 最初のラケットの表示 270 LOCATE BX,BY:PRINT "===" 280 '--- メインループ 持ち球がある間はゲームが続く 290 WHILE BALL>0 300 '--- ボールを表示 310 LOCATE X,Y:PRINT "o" 320 '--- ボールとラケットの速度の調整 330 FOR I=0 TO 100 340 '--- 押されているキーを読み取る 350 K$=INKEY$ 360 '--- 左右(,.)のキーが押されていたら移動方向をセットして *MOVE へ 370 IF K$="," AND BX>20 THEN BM=-1:GOSUB *MOVE 380 IF K$="." AND BX<56 THEN BM= 1:GOSUB *MOVE 390 NEXT I 400 '--- ラケットに当たったらボールの移動方向を反転 410 IF Y=BY-1 AND X=>BX-1 AND X<=BX+3 THEN YM=-YM:GOSUB *SCORE 420 ' 430 '--- 上と左右の壁に当たったら移動方向を反転 440 IF Y= 2 THEN YM=-YM 450 IF X=20 OR X=58 THEN XM=-XM 460 '--- ボールを消す 470 LOCATE X,Y:PRINT " " 480 '--- ミスした 490 IF Y=BY+1 THEN GOSUB *MISS 500 '---次のボール座標を計算 510 X=X+XM:Y=Y+YM 520 WEND 530 LOCATE 34,12:PRINT "Game Over..." 540 END 550 '--- ラケットを表示するサブルーチン 560 *MOVE 570 '--- ラケットを消す 580 LOCATE BX,BY:PRINT " " 590 '--- ラケットの座標を計算して表示 600 BX=BX+BM:BM=0 610 LOCATE BX,BY:PRINT "===" 620 RETURN 630 '--- ミスしたときのサブルーチン 640 *MISS 650 LOCATE 36,12:PRINT "Booo!!" 660 FOR I=0 to 10000:NEXT I 670 BALL=BALL-1 680 LOCATE 51,0:PRINT "Ball: ";BALL 690 Y=10:YM=-1 700 LOCATE 36,12:PRINT " " 710 RETURN 720 '--- スコア表示 730 *SCORE 740 SCORE=SCORE+100 750 LOCATE 20,0:PRINT "Score: ";SCORE 760 RETURN