まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
自機の攻撃方法をCキーもしくはボタン3を押す事によって切り替え出来るようにしました。
それと、自機自身の弾も撃てるようにした。
Cキーを押す度にオプションの攻撃方法が、リバース→前方ばら撒き→リバースというように切り替わります。
攻撃方法はもっと増やせるんですが、使えない攻撃方法はいらないと思うので、シンプルに2種類にしようと思っています。
スプリクトはコレ↓
**************************************
*start
#include "hspdxfix.as"
#include "CK_JOYFORCE.AS"
;■ DirectX 初期化&チェック
dialog "fullscreenで起動しますか?「はい」を選択した場合、画面解像度を640×480に変更します。",2,"Config"
if stat=6:screenmode=0
if stat=7:screenmode=1
es_ini 2048,1024,360;スプライト最大数2048,キャラクタ最大数1024,角度360度
es_screen 640,480,16,0,screenmode,1;directX使用時の解像度640*480
if stat=1 : goto *dxerr1
if stat=2 : goto *dxerr2
goto *setup
*dxerr1
dialog "DirectXの初期化に失敗しました。",1 : end
*dxerr2
dialog "スクリーンの初期化に失敗しました。",1 : end
*dxerr3
es_bye : wait 100
dialog "VRAMの容量が不足しています。",1 : end
*setup
;■ バッファへ画像の読みこみ
buffer 2,640,480,0 ;バッファ作成
pos 0,0 : picload "jiki13.gif",1 ;バッファへ読み込み
es_buffer 0,0 ;オフスクリーンバッファへの転送
if stat=1 : goto *dxerr3
;自機0-9
es_size 32,32,10,0
repeat 9 : es_pat cnt,32*cnt,0 : loop
;自機ビット1↑,10
es_size 16,16,0,0
es_pat 10,0,32,0
;自機ビット1→,11
es_size 16,16,0,0
es_pat 11,16,32,0
;自機ビット1↓,12
es_size 16,16,0,0
es_pat 12,0,48,0
;自機ビット1←,13
es_size 16,16,0,0
es_pat 13,16,48,0
;自機ビット1右上,14
es_size 16,16,0,0
es_pat 14,32,32,0
;自機ビット1右下,15
es_size 16,16,0,0
es_pat 15,48,32,0
;自機ビット1左上,16
es_size 16,16,0,0
es_pat 16,48,48,0
;自機ビット1左下,17
es_size 16,16,0,0
es_pat 17,32,48,0
;自機ビット弾,18
es_size 16,16,80,0
es_pat 18,64,32,0
;自機弾,19
es_size 32,32,80,0
es_pat 19,96,32,0
;■スプライト登録
es_window 0,0,640,480 ;スプライト描写範囲設定
es_area -64,-64,640,480 ;スプライト有効範囲設定
es_set 2000,px,py,4 ;自機スプライト登録(1)
es_type 2000,4 ;自機Type値設定(1)
gsel 0
es_cls
es_sync
wait 100
*gamesetup
bitk=30.;自機からビットまでの距離
r=0.;角度
r=6.283/360;角度(3.1415の2倍÷360)
bitr1=0;ビット1の開始角度
bitr2=180;ビット2の開始角度
ship=4;自機傾きの為の変数
px=192:py=448 ;自機の初期位置
move=4 ;自機速度
gtime=0 ;フレーム数
bit=10;ビット1初期画像
bit2=10;ビット2初期画像
;■ メインルーチン
*main
es_cls;画面クリア
gosub *jikimove
gosub *jikitama1
gosub *bitmove
gosub *bittamamove
es_draw;スプライト描画
gosub *kabehyouji
gosub *fpshyouji
await 0
es_sync 16
getkey syuryo,27:if syuryo=1:end;ESCを押すと強制終了
gtime=gtime+1 ;タイムテーブルの為の変数
goto *main
*jikimove;自機移動処理
ck_joystick ky,15;キーボードのチェック,非トリガータイプ設定
xv=(ky>>2&1)-(ky&1);x軸移動処理
yv=(ky>>3&1)-(ky>>1&1);y軸移動処理
px=xv*move+px : py=yv*move+py;自機移動処理
;画面からはみ出さない為の処理
if px<0 :px=0
if px>384 :px=384
if py<0 :py=0
if py>448 :py=448
;傾きの為の処理
if gtime¥4=0:if (ky=0)&(ship<4) :ship++;キーを押していない時で傾いている時は戻す
if gtime¥4=0:if (ky=0)&(ship>4) :ship--;キーを押していない時で傾いている時は戻す
if gtime¥4=0:if (ky=2048)&(ship<4) :ship++;キーを押していない時で傾いている時は戻す
if gtime¥4=0:if (ky=2048)&(ship>4) :ship--;キーを押していない時で傾いている時は戻す
if gtime¥4=0:if (ky=2)&(ship<4) :ship++;↑キーのみを押している時で傾いている時は戻す
if gtime¥4=0:if (ky=2)&(ship>4) :ship--
if gtime¥4=0:if (ky=8)&(ship<4) :ship++;↓キーのみを押している時で傾いている時は戻す
if gtime¥4=0:if (ky=8)&(ship>4) :ship--
if gtime¥4=0:if xv=1 :if ship!8 :ship++;キーを押した時で傾向ききってない時は傾ける
if gtime¥4=0:if xv=-1 :if ship!0:ship--;キーを押した時で傾向ききってない時は傾ける
es_chr 2000,ship;キャラクタNO変更
es_pos 2000,px,py;スプライト表示(バッファ画面)
if ky&8192 { joyc+ ;cキーのチェック
if joyc=2 : joyc=0
}
return
*jikitama1;自機弾移動処理
shottime--;連射時間をマイナス
if ky&2048 : if shottime<0 : shot=1;Zキーのチェック
if shot=1 {
es_new jikitama,2038
if jikitama<2048 {
es_set jikitama,px,py-12,19 ;自機弾スプライト設置(キャラクタ番号19)
es_type jikitama,4 ;自機弾type値(4)
es_adir jikitama,180,1000 ;移動方向指示
shottime=5 ;連射制御
shot=0
}
}
return
*bitmove;ビット移動処理
;ビット1移動処理
if joyc=0{
if ky=8 : bit=10
if ky=1 : bit=11
if ky=2 : bit=12
if ky=4 : bit=13
if ky=9 : bit=14
if ky=3 : bit=15
if ky=12: bit=16
if ky=6 : bit=17
if ky=2056 : bit=10
if ky=2049 : bit=11
if ky=2050 : bit=12
if ky=2052 : bit=13
if ky=2057 : bit=14
if ky=2051 : bit=15
if ky=2060 : bit=16
if ky=2054 : bit=17
}
if joyc=1 : bit=10
bitr1=bitr1+5;ビットの移動速度
a=r*bitr1;ビットの移動距離
bitx=bitk*cos(a)+px+8
bity=bitk*sin(a)+py+8
es_set 2001,bitx,bity,bit;ビット移動
if bitr1=360 : bitr1=0;ビットの角度を戻す
;ビット2移動処理
if joyc=0{
if ky=8 : bit2=10
if ky=1 : bit2=11
if ky=2 : bit2=12
if ky=4 : bit2=13
if ky=9 : bit2=14
if ky=3 : bit2=15
if ky=12: bit2=16
if ky=6 : bit2=17
if ky=2056 : bit2=10
if ky=2049 : bit2=11
if ky=2050 : bit2=12
if ky=2052 : bit2=13
if ky=2057 : bit2=14
if ky=2051 : bit2=15
if ky=2060 : bit2=16
if ky=2054 : bit2=17
}
if joyc=1 : bit2=10
bitr2=bitr2+5;ビットの移動速度
a=r*bitr2;ビットの移動距離
bitx2=bitk*cos(a)+px+8
bity2=bitk*sin(a)+py+8
es_set 2002,bitx2,bity2,bit2;ビット移動
if bitr2=360 : bitr2=0;ビットの角度を戻す
return
*bittamamove
ck_joystick ky,2060
es_new bittama,2003;スプライトNo2003〜2020までをビット弾に割り当て
if bitshot=1 : if bittama<2020 : if ky&2048{
if joyc=0 {
if ky=2056 : bithoukou=180
if ky=2049 : bithoukou=90
if ky=2050 : bithoukou=0
if ky=2052 : bithoukou=270
if ky=2057 : bithoukou=135
if ky=2051 : bithoukou=45
if ky=2060 : bithoukou=225
if ky=2054 : bithoukou=315
}
if joyc=1 {
bittamakakudo+
if bittamakakudo=1 : bithoukou=170
if bittamakakudo=2 : bithoukou=160
if bittamakakudo=3 : bithoukou=150
if bittamakakudo=4 : bithoukou=210
if bittamakakudo=5 : bithoukou=200
if bittamakakudo=6 : bithoukou=190 : bittamakakudo=0
}
es_set bittama,bitx,bity,18,1 ;敵弾スプライト設置
es_type bittama,4 ;ビット弾type値(4)
es_adir bittama,bithoukou,800 ;移動方向
es_effect bittama,16,16,0,0,bithoukou;ビット弾の画像回転処理
es_new bittama,2020
if bittama<2037 {
es_set bittama,bitx2,bity2,18,1 ;敵弾スプライト設置
es_type bittama,4 ;ビット弾type値(4)
es_adir bittama,bithoukou,800 ;移動方向
es_effect bittama,16,16,0,0,bithoukou
}
bitshot=0:bitshottime=3
}
bitshottime--
if bitshottime<0 : bitshot=1
return
*kabehyouji
color 0,0,50
es_boxf 416,0,640,480;画面右をを塗り潰す
return
*fpshyouji
;fps表示
font "msgothic",18,0
es_getfps fps
color 255,255,255
pos 416,460
es_fmes "Fps "+fps
pos 416,0
es_fmes"It cancels with Esc"
return
*************************************
HSP3.0使用 hspdxfix.DLL使用 CK_JOYFORCE.DLL使用 画像は↓を使用
通常はばら撒き攻撃を使用して、横からや後ろからの敵が出て来たらリバース攻撃に変更して狙い撃ち。みたいな感じをイメージしてます。
実行するとこんな感じ↓
後は自機スピードを遅くする措置が欲しいんですが、現時点で弾と切り替えで2ボタン使ってしまっていますので
今後ボムを入れる事を考えると、4ボタンになってしまうんですよね・・・
出来れば3ボタンに抑えたいので、どうしようか考え中です^^;
それと、自機自身の弾も撃てるようにした。
Cキーを押す度にオプションの攻撃方法が、リバース→前方ばら撒き→リバースというように切り替わります。
攻撃方法はもっと増やせるんですが、使えない攻撃方法はいらないと思うので、シンプルに2種類にしようと思っています。
スプリクトはコレ↓
**************************************
*start
#include "hspdxfix.as"
#include "CK_JOYFORCE.AS"
;■ DirectX 初期化&チェック
dialog "fullscreenで起動しますか?「はい」を選択した場合、画面解像度を640×480に変更します。",2,"Config"
if stat=6:screenmode=0
if stat=7:screenmode=1
es_ini 2048,1024,360;スプライト最大数2048,キャラクタ最大数1024,角度360度
es_screen 640,480,16,0,screenmode,1;directX使用時の解像度640*480
if stat=1 : goto *dxerr1
if stat=2 : goto *dxerr2
goto *setup
*dxerr1
dialog "DirectXの初期化に失敗しました。",1 : end
*dxerr2
dialog "スクリーンの初期化に失敗しました。",1 : end
*dxerr3
es_bye : wait 100
dialog "VRAMの容量が不足しています。",1 : end
*setup
;■ バッファへ画像の読みこみ
buffer 2,640,480,0 ;バッファ作成
pos 0,0 : picload "jiki13.gif",1 ;バッファへ読み込み
es_buffer 0,0 ;オフスクリーンバッファへの転送
if stat=1 : goto *dxerr3
;自機0-9
es_size 32,32,10,0
repeat 9 : es_pat cnt,32*cnt,0 : loop
;自機ビット1↑,10
es_size 16,16,0,0
es_pat 10,0,32,0
;自機ビット1→,11
es_size 16,16,0,0
es_pat 11,16,32,0
;自機ビット1↓,12
es_size 16,16,0,0
es_pat 12,0,48,0
;自機ビット1←,13
es_size 16,16,0,0
es_pat 13,16,48,0
;自機ビット1右上,14
es_size 16,16,0,0
es_pat 14,32,32,0
;自機ビット1右下,15
es_size 16,16,0,0
es_pat 15,48,32,0
;自機ビット1左上,16
es_size 16,16,0,0
es_pat 16,48,48,0
;自機ビット1左下,17
es_size 16,16,0,0
es_pat 17,32,48,0
;自機ビット弾,18
es_size 16,16,80,0
es_pat 18,64,32,0
;自機弾,19
es_size 32,32,80,0
es_pat 19,96,32,0
;■スプライト登録
es_window 0,0,640,480 ;スプライト描写範囲設定
es_area -64,-64,640,480 ;スプライト有効範囲設定
es_set 2000,px,py,4 ;自機スプライト登録(1)
es_type 2000,4 ;自機Type値設定(1)
gsel 0
es_cls
es_sync
wait 100
*gamesetup
bitk=30.;自機からビットまでの距離
r=0.;角度
r=6.283/360;角度(3.1415の2倍÷360)
bitr1=0;ビット1の開始角度
bitr2=180;ビット2の開始角度
ship=4;自機傾きの為の変数
px=192:py=448 ;自機の初期位置
move=4 ;自機速度
gtime=0 ;フレーム数
bit=10;ビット1初期画像
bit2=10;ビット2初期画像
;■ メインルーチン
*main
es_cls;画面クリア
gosub *jikimove
gosub *jikitama1
gosub *bitmove
gosub *bittamamove
es_draw;スプライト描画
gosub *kabehyouji
gosub *fpshyouji
await 0
es_sync 16
getkey syuryo,27:if syuryo=1:end;ESCを押すと強制終了
gtime=gtime+1 ;タイムテーブルの為の変数
goto *main
*jikimove;自機移動処理
ck_joystick ky,15;キーボードのチェック,非トリガータイプ設定
xv=(ky>>2&1)-(ky&1);x軸移動処理
yv=(ky>>3&1)-(ky>>1&1);y軸移動処理
px=xv*move+px : py=yv*move+py;自機移動処理
;画面からはみ出さない為の処理
if px<0 :px=0
if px>384 :px=384
if py<0 :py=0
if py>448 :py=448
;傾きの為の処理
if gtime¥4=0:if (ky=0)&(ship<4) :ship++;キーを押していない時で傾いている時は戻す
if gtime¥4=0:if (ky=0)&(ship>4) :ship--;キーを押していない時で傾いている時は戻す
if gtime¥4=0:if (ky=2048)&(ship<4) :ship++;キーを押していない時で傾いている時は戻す
if gtime¥4=0:if (ky=2048)&(ship>4) :ship--;キーを押していない時で傾いている時は戻す
if gtime¥4=0:if (ky=2)&(ship<4) :ship++;↑キーのみを押している時で傾いている時は戻す
if gtime¥4=0:if (ky=2)&(ship>4) :ship--
if gtime¥4=0:if (ky=8)&(ship<4) :ship++;↓キーのみを押している時で傾いている時は戻す
if gtime¥4=0:if (ky=8)&(ship>4) :ship--
if gtime¥4=0:if xv=1 :if ship!8 :ship++;キーを押した時で傾向ききってない時は傾ける
if gtime¥4=0:if xv=-1 :if ship!0:ship--;キーを押した時で傾向ききってない時は傾ける
es_chr 2000,ship;キャラクタNO変更
es_pos 2000,px,py;スプライト表示(バッファ画面)
if ky&8192 { joyc+ ;cキーのチェック
if joyc=2 : joyc=0
}
return
*jikitama1;自機弾移動処理
shottime--;連射時間をマイナス
if ky&2048 : if shottime<0 : shot=1;Zキーのチェック
if shot=1 {
es_new jikitama,2038
if jikitama<2048 {
es_set jikitama,px,py-12,19 ;自機弾スプライト設置(キャラクタ番号19)
es_type jikitama,4 ;自機弾type値(4)
es_adir jikitama,180,1000 ;移動方向指示
shottime=5 ;連射制御
shot=0
}
}
return
*bitmove;ビット移動処理
;ビット1移動処理
if joyc=0{
if ky=8 : bit=10
if ky=1 : bit=11
if ky=2 : bit=12
if ky=4 : bit=13
if ky=9 : bit=14
if ky=3 : bit=15
if ky=12: bit=16
if ky=6 : bit=17
if ky=2056 : bit=10
if ky=2049 : bit=11
if ky=2050 : bit=12
if ky=2052 : bit=13
if ky=2057 : bit=14
if ky=2051 : bit=15
if ky=2060 : bit=16
if ky=2054 : bit=17
}
if joyc=1 : bit=10
bitr1=bitr1+5;ビットの移動速度
a=r*bitr1;ビットの移動距離
bitx=bitk*cos(a)+px+8
bity=bitk*sin(a)+py+8
es_set 2001,bitx,bity,bit;ビット移動
if bitr1=360 : bitr1=0;ビットの角度を戻す
;ビット2移動処理
if joyc=0{
if ky=8 : bit2=10
if ky=1 : bit2=11
if ky=2 : bit2=12
if ky=4 : bit2=13
if ky=9 : bit2=14
if ky=3 : bit2=15
if ky=12: bit2=16
if ky=6 : bit2=17
if ky=2056 : bit2=10
if ky=2049 : bit2=11
if ky=2050 : bit2=12
if ky=2052 : bit2=13
if ky=2057 : bit2=14
if ky=2051 : bit2=15
if ky=2060 : bit2=16
if ky=2054 : bit2=17
}
if joyc=1 : bit2=10
bitr2=bitr2+5;ビットの移動速度
a=r*bitr2;ビットの移動距離
bitx2=bitk*cos(a)+px+8
bity2=bitk*sin(a)+py+8
es_set 2002,bitx2,bity2,bit2;ビット移動
if bitr2=360 : bitr2=0;ビットの角度を戻す
return
*bittamamove
ck_joystick ky,2060
es_new bittama,2003;スプライトNo2003〜2020までをビット弾に割り当て
if bitshot=1 : if bittama<2020 : if ky&2048{
if joyc=0 {
if ky=2056 : bithoukou=180
if ky=2049 : bithoukou=90
if ky=2050 : bithoukou=0
if ky=2052 : bithoukou=270
if ky=2057 : bithoukou=135
if ky=2051 : bithoukou=45
if ky=2060 : bithoukou=225
if ky=2054 : bithoukou=315
}
if joyc=1 {
bittamakakudo+
if bittamakakudo=1 : bithoukou=170
if bittamakakudo=2 : bithoukou=160
if bittamakakudo=3 : bithoukou=150
if bittamakakudo=4 : bithoukou=210
if bittamakakudo=5 : bithoukou=200
if bittamakakudo=6 : bithoukou=190 : bittamakakudo=0
}
es_set bittama,bitx,bity,18,1 ;敵弾スプライト設置
es_type bittama,4 ;ビット弾type値(4)
es_adir bittama,bithoukou,800 ;移動方向
es_effect bittama,16,16,0,0,bithoukou;ビット弾の画像回転処理
es_new bittama,2020
if bittama<2037 {
es_set bittama,bitx2,bity2,18,1 ;敵弾スプライト設置
es_type bittama,4 ;ビット弾type値(4)
es_adir bittama,bithoukou,800 ;移動方向
es_effect bittama,16,16,0,0,bithoukou
}
bitshot=0:bitshottime=3
}
bitshottime--
if bitshottime<0 : bitshot=1
return
*kabehyouji
color 0,0,50
es_boxf 416,0,640,480;画面右をを塗り潰す
return
*fpshyouji
;fps表示
font "msgothic",18,0
es_getfps fps
color 255,255,255
pos 416,460
es_fmes "Fps "+fps
pos 416,0
es_fmes"It cancels with Esc"
return
*************************************
HSP3.0使用 hspdxfix.DLL使用 CK_JOYFORCE.DLL使用 画像は↓を使用
通常はばら撒き攻撃を使用して、横からや後ろからの敵が出て来たらリバース攻撃に変更して狙い撃ち。みたいな感じをイメージしてます。
実行するとこんな感じ↓
後は自機スピードを遅くする措置が欲しいんですが、現時点で弾と切り替えで2ボタン使ってしまっていますので
今後ボムを入れる事を考えると、4ボタンになってしまうんですよね・・・
出来れば3ボタンに抑えたいので、どうしようか考え中です^^;
PR
カレンダー
10 | 2024/11 | 12 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
リンク
カテゴリー
最新記事
(04/04)
(12/26)
(12/25)
(11/17)
(10/11)
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
最古記事