基本設定
ゲームスピード
game_speed
弾MAX
ball_max
*/
/*
弾設定
弾の種類
ball_type
1 自分の弾
2 敵の弾
3 味方の弾
弾の角度(radian)
ball_angle_radian
弾の位置
ball_posx
ball_posy
弾の存在・弾の種類など保存
ball_life
*/
/*
自機設定
自機の角度
mainbody_angle
自機の角度(radian)
mainbody_angle_radian
自機の位置
mainbody_posx
mainbody_posy
*/
;自機のスピード
mainbody_acc_speed =4
;自機の回転スピード
mainbody_acc_anglespeed =int(2.2 * mainbody_acc_speed)
/**/
;初期設定
game_speed=50 ;ゲームスピード
ball_max=50 ;計算できるすべての弾の合計
ball_type=3 ;弾の種類数
;すべて小数点を扱えるようにする(弾丸)
dimtype ball_angle_radian,vartype("double"),ball_max;弾の角度(ラジアン)
dimtype ball_posx,vartype("double"),ball_max ;弾の位置
dimtype ball_posy,vartype("double"),ball_max
dimtype ball_life,vartype("int"),ball_max,2 ;弾が飛ぶ時間
dimtype ball_type_vol,vartype("int"),ball_type ;弾の種類別の量
;すべて小数点を扱えるようにする(自機)
dimtype mainbody_angle_radian,vartype("double"),1 ;自機の角度(ラジアン)
dimtype mainbody_posx,vartype("double"),1 ;自機の位置
dimtype mainbody_posy,vartype("double"),1
screen 0,400,400,0:gsel 0,2
mainbody_posx=ginfo(12)/2
mainbody_posy=ginfo(13)/2
gosub *gos_loadsound ;音を読み込む
*mainrepeat ;メインリピート始まり
redraw 1:await game_speed:redraw 0
gosub *gos_keyget ;ボタン感知
gosub *gos_mainbody ;自機関係
gosub *gos_ball ;弾関係
goto *mainrepeat ;リピート戻る
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
;弾丸関係
*gos_ball
gosub *gos_ball_acc ;弾の計算
gosub *gos_ball_draw ;弾の表示
return
*gos_ball_acc ;/////////弾の計算/////////
repeat ball_max
if ball_life(cnt,1)=0{continue}
switch ball_life(cnt,0) ;タイプ別に スピードと飛距離を設定
case 1 :ball_acc_speed=8 :ball_acc_life=15 :swbreak
swend
ball_life(cnt,1)+=1 ;弾がどのくらいで消えるか(飛距離)
if ball_life(cnt,1) > ball_acc_life { ;弾消去
ball_life(cnt,1) = 0
ball_type_vol(ball_life(cnt,0)) -=1 ;タイプ別の弾の合計数を減らす
;弾爆発音
}
ball_posx(cnt)=ball_posx(cnt)+(sin(ball_angle_radian(cnt))*ball_acc_speed) ;弾の場所を計算
ball_posy(cnt)=ball_posy(cnt)+(cos(ball_angle_radian(cnt))*ball_acc_speed)
loop
return
*gos_ball_add ;/////////弾発行/////////
;弾発行 例
;ball_pub_type=1
;ball_pub_angle=rnd(360)
;ball_pub_posx=100 ;rnd(ginfo(12))
;ball_pub_posy=100 ;rnd(ginfo(13))
;弾の合計数を調節(例 自分の弾は合計4発までしか発行できないなど)
ball_type_max_ch=0:switch ball_pub_type
case 1
if ball_type_vol(ball_pub_type)=4:ball_type_max_ch=1
swbreak
swend
if ball_type_max_ch=1:return
;弾発行
repeat ball_max
if ball_life(cnt,1)!0{continue}
ball_life(cnt,0)=ball_pub_type ;タイプ発行
ball_type_vol(ball_life(cnt,0)) +=1 ;タイプ別の弾の合計数を増やす
ball_life(cnt,1)=1 ;消えるまでのタイム用
ball_angle_radian(cnt)=3.14159265 * ball_pub_angle / (180.0) ;ラジアンをここで計算
ball_posx(cnt)=double(ball_pub_posx) ;弾の初期位置を実数にして代入
ball_posy(cnt)=double(ball_pub_posy)
;弾発射音
break
loop
return
*gos_ball_draw ;/////////弾の摸写/////////
repeat ball_max
if ball_life(cnt,1)=0{continue}
pset int(ball_posx(cnt)),int(ball_posy(cnt))
loop
return
;弾丸関係
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
;自機関係
*gos_mainbody
gosub *gos_mainbody_acc ;自機の計算
gosub *gos_mainbody_draw ;自機の表示
gosub *gos_mainbody_keyget ;自機から発射される弾のキー調査
return
*gos_mainbody_acc
mainbody_angle_radian = 3.14159265 * double(mainbody_angle) / (180.0)
mainbody_posx=mainbody_posx + ((sin(mainbody_angle_radian(cnt))*mainbody_acc_speed) ) * mainbody_move
mainbody_posy=mainbody_posy + ((cos(mainbody_angle_radian(cnt))*mainbody_acc_speed) ) * mainbody_move
return
*gos_mainbody_draw
pset int(mainbody_posx),int(mainbody_posy)
return
*gos_mainbody_keyget ;弾発射ボタン
getkey mainbody_ball,90:if mainbody_ball=1{mainbody_ball_ch=1} ;Z
getkey mainbody_ball,88:if mainbody_ball=1{mainbody_ball_ch=1} ;X
if mainbody_ball_ch=1{
;弾発行手続き
ball_pub_type=1
ball_pub_angle=mainbody_angle
ball_pub_posx=mainbody_posx
ball_pub_posy=mainbody_posy
;弾発射
gosub *gos_ball_add
mainbody_ball_ch=0
}
return
;自機関係
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
;基本的なキー操作取得
*gos_keyget
stick key,1+2+4+8
mainbody_move=0
if key&1:mainbody_angle+=mainbody_acc_anglespeed ;回転
if key&2:mainbody_move+=1 ;前進
if key&4:mainbody_angle-=mainbody_acc_anglespeed ;回転
if key&8:mainbody_move-=1 ;後進
return
;音声ファイルの読み込み
*gos_loadsound
;発射
;爆発
return
戦車ゲームです。
画像は適当に。
0 件のコメント:
コメントを投稿