Dim map[Xmax,Ymax]'マップ情報 Dim k'のこりブロック数 Dim I$, x , y ,a'汎用 Dim c, wait'速度制御 Dim sx, sy'盤の位置 Dim bx, by 'ボールの位置 Dim bv, bh 'ボールの向き Dim dflag'デバッグモード dflag=0
'初期化 *INIT '変数の初期化 c=0 wait=8 bx=10:by=18 sx=10:sy=19 bh=-1:bv=1 'マップの初期化 For y=1 To Ymax map[1 ,y]=KABE map[Xmax,y]=KABE Next For x=1 To Xmax map[x ,1]=KABE map[x,Ymax]=KABE Next For y=4 To 9 For x=2 To Xmax-1 map[x ,y]=y-3 Next Next For x=1 To Xmax map[x ,1]=KABE Next map[bx,by]=BALL map[sx-1,sy]=BAN map[sx,sy]=BAN map[sx+1,sy]=BAN Return
'描写 *DRAW k=0 For y=1 To Ymax For x=1 To Xmax Locate x,y Select Case map[x,y] Case KABE Print "X" Case BALL Print "o" Case BAN Print "=" Case 0 Print " " Case Else Color map[x,y],0 Print "X" k=k+1 Color 7,0 End Select Next Next If dflag=1 Then Locate 25, 5,:Print bx,by Locate 25, 6:Print bv, bh Locate 25, 7:Print sx,sy Locate 25, 8:Print k
End If Return
'盤の移動 *MOV If map[sx+2*a, sy] = 0 Then map[sx-1*a,sy] =0 map[sx+2*a, sy]=BAN sx=sx+a End If Return
'ボールの移動 *BALLMOV If by > sy+1 Then *GAMEOVER If map[bx+bh, by+bv]<>0 Then'壁に当たったら '反転 If map[bx+bh,by]<>0 Then bh=bh*-1 If map[bx,by+bv]<>0 Then bv=bv*-1 If map[bx+bh, by+bv]<>0 Then bv=bv*-1: bh=bh*Sgn(Rnd()-.5) End If If map[bx-bh, by-bv]>0 And map[bx-bh, by-bv]<7 Then map[bx-bh, by-bv]=0 If map[bx, by-bv]>0 And map[bx, by-bv]<7 Then map[bx, by-bv]=0 map[bx,by]=0 bx=bx+bh by=by+bv map[bx,by]=BALL Return '---------------------------- ' サブルーチンここまで '----------------------------
Do GoSub *DRAW I$="" I$=Inkey$() Select Case Asc(I$) Case VK_LEFT a=-1 GoSub *MOV Case VK_RIGHT a=+1 GoSub *MOV End Select c=c+1 If c=wait Then GoSub *BALLMOV c=0 End If Loop While k
*GAMEOVER Cls 3 Print "G A M E O V E R" INPUT I$ End '---------------------------- ' メインルーチンここまで '----------------------------