ページ 11

シューティングプログラムのdebugのお願い

Posted: 2010年8月22日(日) 04:05
by nori
下記はキー操作により動きながら弾をうつ画像と時間により周期的に動きながら弾をうつ画像の
プログラムなのですが、makeすることができません。申し訳ないのですが、訂正すべき点をご教示下さい。

#include "DxLib.h"

#define SHOT 5


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )

{
int X,Y,planegraph,shotgraph,background;
int ShotX[SHOT],ShotY[SHOT],ShotFlag[SHOT];
int ShotBFlag;
int i;
int tekiX,tekiY,tekimuki,tekigraph;
int tekitamaX,tekitamaY,tekitamaFlag,tekitamacounter,tekitamagraph;

// 画面モードの設定
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更

// DXライブラリ初期化処理
if( DxLib_Init() == -1 ) return -1;

// グラフィックの描画先を裏画面にセット
SetDrawScreen( DX_SCREEN_BACK );

// 飛行機および弾のグラフィックをメモリにロード&表示座標をセット
planegraph = LoadGraph( "plane.png" );
shotgraph = LoadGraph( "shot.png" );
background = LoadGraph( "back.bmp" );
tekigraph = LoadGraph( "plane.png" );
tekitamagraph = LoadGraph( "shot.png" );

X = 320 ; Y = 240 ;
tekiX = 320 ; tekiY = 40 ; tekimuki = 1; tekitamaFlag = 0; tekitamacounter = 0;

for( i = 0 ; i < SHOT ; i ++ )
{
ShotFlag = 0 ;
}
// ショットボタンが前のフレームで押されたかどうかを保存する変数に0(押されいない)を代入
ShotBFlag = 0 ;

while(1)
{
// 画面を初期化(真っ黒にする)
ClearDrawScreen() ;

if( CheckHitKey ( KEY_INPUT_UP ) == 1 ) Y -= 3; //上ボタンが押されたら
if( CheckHitKey ( KEY_INPUT_LEFT ) == 1 ) X -= 3; //左ボタンが押されたら
if( CheckHitKey ( KEY_INPUT_DOWN ) == 1 ) Y += 3; //下ボタンが押されたら
if( CheckHitKey ( KEY_INPUT_RIGHT ) == 1) X += 3; //右ボタンが押されたら
if( CheckHitKey ( KEY_INPUT_SPACE) == 1 ) //spaceが押されたら)
{
if(ShotBFlag ==0 )
{
for( i = 0 ; i < SHOT ; i ++ )
{
// 弾iが画面上にでていない場合はその弾を画面に出す
if( ShotFlag == 0 )
{
ShotX = X;
ShotY = Y;
ShotFlag = 1;
break ;
}
}
}
// 前フレームでショットボタンを押されていたかを保存する変数に1(おされていた)を代入
ShotBFlag = 1 ;
}
else
{
// ショットボタンが押されていなかった場合は
// 前フレームでショットボタンが押されていたかを保存する変数に0(おされていない)を代入
ShotBFlag = 0 ;
}

// 飛行機を描画
DrawGraph( 0 , 0 , background , TRUE ) ;
DrawGraph( X , Y , planegraph , TRUE ) ;

for( i = 0 ; i < SHOT ; i ++ )
{
if( ShotFlag == 1 )
{
// 弾を8ピクセル上に移動させる
ShotY -= 8 ;

// 画面外に出てしまった場合は存在状態を保持している変数に0(存在しない)を代入する
if( ShotY < -80 )
{
ShotFlag = 0 ;
}
// 画面に弾iを描画する
DrawGraph( ShotX , ShotY[i] , shotgraph , TRUE ) ;

}
}

// 敵の座標を移動している方向に移動する
if( tekimuki == 1 ) tekiX += 3 ;
if( tekimuki == 0 ) tekiX -= 3 ;

// 四角君が画面右端からでそうになっていたら画面内の座標に戻してあげ、移動する方向も反転する
if( tekiX > 576 )
{
tekiX = 576 ;
tekimuki = 0 ;
}

// 四角君が画面左端からでそうになっていたら画面内の座標に戻してあげ、移動する方向も反転する
if( tekiX < 0 )
{
tekiX = 0 ;
tekimuki = 1 ;
}

// 四角君を描画
DrawGraph( tekiX , tekiY , tekigraph , TRUE ) ;


tekitamacounter ++ ;

if(tekitamacounter == 60)
{
if(tekitamaFlag == 0)
{
tekitamaX = tekiX; tekitamaY = tekiY;
tekitamaFlag = 1;
}
tekitamacounter = 0
}

if(tekitamaFlag == 1)
{
/ 少し下にずらす
tekitamaY += 8 ;

// もし弾が画面下端からはみ出てしまった場合は弾の状態を『飛んでいない』
// を表す0にする
if( tekitamaY > 480 ) tekitamaFlag = 0 ;

// 画面に描画する
DrawGraph( tekitamaX , tekitamaY , tekitamagraph , TRUE ) ;
}

// 裏画面の内容を表画面にコピーする
ScreenFlip() ;

// Windows 特有の面倒な処理をDXライブラリにやらせる
// -1 が返ってきたらループを抜ける
if( ProcessMessage() < 0 ) break ;

// もしESCキーが押されていたらループから抜ける
if( CheckHitKey( KEY_INPUT_ESCAPE ) ) break ;
}

DxLib_End() ; // DXライブラリ使用の終了処理

return 0 ; // ソフトの終了
}

Re:シューティングプログラムのdebugのお願い

Posted: 2010年8月22日(日) 04:17
by nori
すみません、コメントで/が一本足りませんでした。
それ以外のご指摘をお願い致します。

Re:シューティングプログラムのdebugのお願い

Posted: 2010年8月22日(日) 04:19
by fatens
if(tekitamacounter == 60)
{
if(tekitamaFlag == 0)
{
tekitamaX = tekiX; tekitamaY = tekiY;
tekitamaFlag = 1;
}
tekitamacounter = 0; ←セミコロンがない
}

if(tekitamaFlag == 1)
{
// 少し下にずらす ←スラッシュが1つたりない
tekitamaY += 8 ;


ざっと見た感じ、この2点だと思います。

Re:シューティングプログラムのdebugのお願い

Posted: 2010年8月22日(日) 04:19
by nori
自己解決しました。

Re:シューティングプログラムのdebugのお願い

Posted: 2010年8月22日(日) 04:20
by nori
本当にありがとうございます。そのとおりでした。