ラケットでボールを跳ね返す

ラケットがプレーヤーの指示通りに左右に動かせるようになったならば、「壁の中をボールが跳ね回る」プログラムと、「ラケットを左右に動かす」プログラムを合体させよう。

そして次に、ラケットにボールが当たったときに跳ね返すようにしよう。その時に大事になるのは、やはり、ラケットとボールの位置だろう。

#ref(): File not found: "hitball.png" at page "ラケットにボールが当たると跳ね返るようにする"

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	'--- ラケットの座標 BX,BY 移動方向 BM
230	BX=38:BY=22:BM=0:BALL=3
240	'--- 最初のラケットの表示
250	LOCATE BX,BY:PRINT "==="
260	'--- メインループ 持ち球がある間はゲームが続く
270	WHILE BALL>0
280		'--- ボールを表示
290		LOCATE X,Y:PRINT "o"
300		'--- ボールとラケットの速度の調整
310		FOR I=0 TO 100
320			'--- 押されているキーを読み取る
330			K$=INKEY$
340			'--- 左右(,.)のキーが押されていたら移動方向をセットして *MOVE へ
350			IF K$="," AND BX>20 THEN BM=-1:GOSUB *MOVE
360			IF K$="." AND BX<56 THEN BM= 1:GOSUB *MOVE
370		NEXT I
380		'--- ラケットに当たったらボールの移動方向を反転
390		IF Y=BY-1 AND X=>BX-1 AND X<=BX+3 THEN YM=-YM
400		IF Y=BY-1 AND (X=BX-1 OR X=BK+3) THEN XM=-XM
410		'--- 上下左右の壁に当たったら移動方向を反転
420		IF Y= 2 OR Y=22 THEN YM=-YM
430		IF X=20 OR X=58 THEN XM=-XM
440		'--- ボールを消して、次のボール座標を計算
450		LOCATE X,Y:PRINT " "
460		X=X+XM:Y=Y+YM
470	WEND
480	END
490	'--- ラケットを表示するサブルーチン
500	*MOVE
510		'--- ラケットを消す
520		LOCATE BX,BY:PRINT "   "
530		'--- ラケットの座標を計算して表示
540		BX=BX+BM:BM=0
550		LOCATE BX,BY:PRINT "==="
560	RETURN

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS