#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


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS