2つお願いします。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
相棒

2つお願いします。

#1

投稿記事 by 相棒 » 12年前

今、C++でシューティングゲームを作っているのですが、背景(縦スクロール)と、敵の出撃パターンがうまくいきません。
何度も挑戦しましたが、エラーばかりです。出撃パターンに関しては、画面横からいきなり出てくるようにしたいです。

ソースコード
コード[C++]
#include "DxLib.h"
#include <math.h>


#define SHOT 10

// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int zikiX , zikiY , zikiGraph ;
int HP = 6, HPGraph;
int Bw, Bh, Sw, Sh ;
int teki1X , teki1Y , teki1Muki , teki1Graph ;
int teki1HP = 15;
int zakotekiX , zakotekiY , zakotekiMuki , zakotekiGraph ;
int zakoteki2X , zakoteki2Y , zakoteki2Muki , zakoteki2Graph ;
int zakoteki3X , zakoteki3Y , zakoteki3Muki , zakoteki3Graph ;
int SikakuDamageFlag , SikakuDamageCounter , SikakuDamageGraph ;
int zikiDamageFlag , zikiDamageCounter , zikiDamageGraph ;
int ShotX[SHOT] , ShotY[SHOT] , ShotFlag[SHOT] , ShotGraph ,Shot2Graph,Shot3Graph;
int zikiW=57 , zikiH=65 , teki1W , teki1H , zakotekiW , zakotekiH , zakoteki2W , zakoteki2H , zakoteki3W , zakoteki3H , ShotW , ShotH ;
int ShotBFlag , ShotB2Flag , ShotB3Flag ;
int i ;
double ETamaX , ETamaY ;
int ETamaFlag ;
double ETamaSx, ETamaSy ;
int ETamaW , ETamaH , ETamaGraph ;
int ETamaCounter ;
int CNT = SHOT;
int TAME = 0;
int SF = 0;

// 画面モードの設定
SetGraphMode( 640 , 480 , 16 ) ;

ChangeWindowMode( TRUE ) ;

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

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

// 自機のグラフィックをメモリにロード&表示座標をセット
zikiGraph = LoadGraph( "ziki.png" ) ;
zikiX = 200 ; zikiY = 370 ;

//ライフゲージのグラフィックをメモリにロード&表示座標をセット
HPGraph =LoadGraph("Life.png");

//敵のグラフィックをメモリにロード&表示座標をセット
teki1Graph = LoadGraph( "teki1.png" ) ;
teki1X = 0 ; teki1Y = 50 ;

zakotekiGraph = LoadGraph( "zakoteki.png" ) ;
zakotekiX = 0 ; zakotekiY = 30 ;

zakoteki2Graph = LoadGraph("zakoteki2.png");
zakoteki2X = 0; zakoteki2Y =150 ;

zakoteki3Graph = LoadGraph( "zakoteki3.png" ) ;
zakoteki3X = 0 ; zakoteki3Y = 30 ;

// 敵のダメージ時のグラフィックをメモリにロード
SikakuDamageGraph = LoadGraph( "Bakuhatu.png" ) ;

// 敵が顔を歪めているかどうかの変数に『歪めていない』を表す0を代入
SikakuDamageFlag = 0 ;

// 自機のダメージ時のグラフィックをメモリにロード
zikiDamageGraph = LoadGraph( "Bakuhatu.png" ) ;

// 自機が顔を歪めているかどうかの変数に『歪めていない』を表す0を代入
zikiDamageFlag = 0 ;

// 敵の弾のグラフィックをロード
ETamaGraph = LoadGraph( "EShot.png" ) ;


// 敵の弾のグラフィックのサイズを得る
GetGraphSize( ETamaGraph ,&ETamaW , &ETamaH ) ;


// 敵の弾が飛んでいるかどうかを保持する変数に『飛んでいない』を表す0を代入
ETamaFlag = 0 ;


// 敵が弾を撃つタイミングを取るための計測用変数に0を代入
ETamaCounter = 0 ;


// 弾のグラフィックをメモリにロード
ShotGraph = LoadGraph( "Shot.png" ) ;
Shot2Graph = LoadGraph( "Shot1.png" ) ;
Shot3Graph = LoadGraph( "Shot2.png" ) ;

// 弾が画面上に存在しているか保持する変数に『存在していない』を意味する0を代入しておく
for( i = 0 ; i < SHOT ; i ++ )
{
ShotFlag = 0 ;
}

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

// 敵の移動方向をセット
teki1Muki = 1 ;

// 弾のグラフィックのサイズをえる
GetGraphSize( ShotGraph , &ShotW , &ShotH ) ;

// 敵のグラフィックのサイズを得る
GetGraphSize( teki1Graph , &teki1W , &teki1H ) ;
GetGraphSize( zakotekiGraph , &zakotekiW , &zakotekiH ) ;
GetGraphSize( zakoteki2Graph , &zakoteki2W , &zakoteki2H ) ;
GetGraphSize( zakoteki3Graph , &zakoteki3W , &zakoteki3H ) ;

// 自機と弾の画像のサイズを得る
GetGraphSize( zikiGraph , &Bw , &Bh ) ;
GetGraphSize( ShotGraph , &Sw , &Sh ) ;

//初期値
zakotekiMuki = 0 ;
zakoteki2Muki = 0 ;
zakoteki3Muki = 0 ;
//--------------------------------------------------------------

// 移動ルーチン
while( 1 )
{
// 画面を初期化(真っ黒にする)
ClearDrawScreen() ;

DrawFormatString( 0, 0, GetColor( 255 , 255 , 255 ), "%d", HP ) ;


// 顔を歪めているかどうかで処理を分岐
if( zikiDamageFlag == 1 )
{
// 顔を歪めている場合はダメージ時のグラフィックを描画する
DrawGraph( zikiX , zikiY , zikiDamageGraph , FALSE ) ;
zikiGraph = zikiDamageGraph;

// 顔を歪めている時間を測るカウンターに1を加算する
zikiDamageCounter ++ ;

// もし顔を歪め初めて 30 フレーム経過していたら顔の歪んだ状態から
// 元に戻してあげる
if( zikiDamageCounter == 30 )
{
// 『歪んでいない』を表す0を代入
zikiDamageFlag = 0 ;
}
}
// 自機の操作ルーチン
{
// ↑キーを押していたらボール君を上に移動させる
if( CheckHitKey( KEY_INPUT_UP ) == 1 ) zikiY -= 7 ;

// ↓キーを押していたらボール君を下に移動させる
if( CheckHitKey( KEY_INPUT_DOWN ) == 1 ) zikiY += 7 ;

// ←キーを押していたらボール君を左に移動させる
if( CheckHitKey( KEY_INPUT_LEFT ) == 1 ) zikiX -= 7 ;

// →キーを押していたらボール君を右に移動させる
if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 ) zikiX += 7 ;

// スペースキーを押した場合は処理を分岐
if( CheckHitKey( KEY_INPUT_SPACE ) )
{
SF = 1;
// 前フレームでショットボタンを押したかが保存されている変数が0だったら弾を発射
if( ShotBFlag == 0 )
{
// 画面上にでていない弾があるか、弾の数だけ繰り返して調べる
for( i = 0 ; i < SHOT ; i ++ )
{
// 弾iが画面上にでていない場合はその弾を画面に出す
if( ShotFlag == 0 )
{
int Bw, Bh, Sw, Sh ;

// 自機と弾の画像のサイズを得る
GetGraphSize( zikiGraph , &Bw , &Bh ) ;
GetGraphSize( ShotGraph , &Sw , &Sh ) ;

// 弾iの位置をセット、位置はボール君の中心にする
ShotX = ( Bw - Sw ) / 2 + zikiX ;
ShotY = ( Bh - Sh ) / 2 + zikiY ;

// 弾iは現時点を持って存在するので、存在状態を保持する変数に1を代入する
ShotFlag = 1 ;

// 一つ弾を出したので弾を出すループから抜けます
break ;
}
}
}

// 前フレームでショットボタンを押されていたかを保存する変数に1(おされていた)を代入
ShotBFlag = 1 ;
}
else
{
// ショットボタンが押されていなかった場合は
// 前フレームでショットボタンが押されていたかを保存する変数に0(おされていない)を代入
ShotBFlag = 0 ;
}

// スペースキーを押した場合は処理を分岐
if( CheckHitKey( KEY_INPUT_Z ) )
{
SF = 2;
// 前フレームでショットボタンを押したかが保存されている変数が0だったら弾を発射
if( ShotB2Flag == 0 && CNT > 0)
{
// 画面上にでていない弾があるか、弾の数だけ繰り返して調べる
for( i = 0 ; i < SHOT ; i ++ )
{
// 弾iが画面上にでていない場合はその弾を画面に出す
if( ShotFlag == 0 )
{
int Bw, Bh, Sw, Sh ;

// 自機と弾の画像のサイズを得る
GetGraphSize( zikiGraph , &Bw , &Bh ) ;
GetGraphSize( Shot2Graph , &Sw , &Sh ) ;

// 弾iの位置をセット、位置はボール君の中心にする
ShotX = ( Bw - Sw ) / 2 + zikiX ;
ShotY = ( Bh - Sh ) / 2 + zikiY ;

// 弾iは現時点を持って存在するので、存在状態を保持する変数に1を代入する
ShotFlag = 1 ;
CNT --;
// 一つ弾を出したので弾を出すループから抜けます
break ;
}
}
}

// 前フレームでショットボタンを押されていたかを保存する変数に1(おされていた)を代入
ShotB2Flag = 1 ;
}
else
{
// ショットボタンが押されていなかった場合は
// 前フレームでショットボタンが押されていたかを保存する変数に0(おされていない)を代入
ShotB2Flag = 0 ;
}

// スペースキーを押した場合は処理を分岐
if( CheckHitKey( KEY_INPUT_X ) )
{
SF = 3;
// 前フレームでショットボタンを押したかが保存されている変数が0だったら弾を発射
if( ShotB3Flag == 0 && CNT > 0)
{
// 画面上にでていない弾があるか、弾の数だけ繰り返して調べる
for( i = 0 ; i < SHOT ; i ++ )
{
// 弾iが画面上にでていない場合はその弾を画面に出す
if( ShotFlag == 0 )
{
int Bw, Bh, Sw, Sh ;

// 自機と弾の画像のサイズを得る
GetGraphSize( zikiGraph , &Bw , &Bh ) ;
GetGraphSize( Shot3Graph , &Sw , &Sh ) ;

// 弾iの位置をセット、位置はボール君の中心にする
ShotX[i] = ( Bw - Sw ) / 2 + zikiX ;
ShotY[i] = ( Bh - Sh ) / 2 + zikiY ;

// 弾iは現時点を持って存在するので、存在状態を保持する変数に1を代入する
ShotFlag[i] = 1 ;
CNT --;
// 一つ弾を出したので弾を出すループから抜けます
break ;
}
}
}

// 前フレームでショットボタンを押されていたかを保存する変数に1(おされていた)を代入
ShotB3Flag = 1 ;
}
else
{
// ショットボタンが押されていなかった場合は
// 前フレームでショットボタンが押されていたかを保存する変数に0(おされていない)を代入
ShotB3Flag = 0 ;
}

// 自機が画面左端からはみ出そうになっていたら画面内の座標に戻してあげる
if( zikiX < 0 ) zikiX = 0 ;

// 自機が画面右端からはみ出そうになっていたら画面内の座標に戻してあげる
if( zikiX > 640 - 64 ) zikiX = 640 - 64 ;

// 自機が画面上端からはみ出そうになっていたら画面内の座標に戻してあげる
if( zikiY < 0 ) zikiY = 0 ;

// 自機が画面下端からはみ出そうになっていたら画面内の座標に戻してあげる
if( zikiY > 430 - 64 ) zikiY = 430 - 64 ;

// 自機を描画
DrawGraph( zikiX , zikiY , zikiGraph , FALSE ) ;
}

if(SF==1){
// 弾の数だけ弾を動かす処理を繰り返す
for( i = 0 ; i < SHOT ; i ++ )
{
// 自機の弾iの移動ルーチン( 存在状態を保持している変数の内容が1(存在する)の場合のみ行う )
if( ShotFlag[ i ] == 1 )
{
// 弾iを16ドット上に移動させる
ShotY[ i ] -= 16 ;

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

// 画面に弾iを描画する
DrawGraph( ShotX[ i ] , ShotY[ i ] , ShotGraph , FALSE ) ;
}
}
}
if(SF == 2){
// 弾の数だけ弾を動かす処理を繰り返す
for( i = 0 ; i < SHOT ; i ++ )
{
// 自機の弾iの移動ルーチン( 存在状態を保持している変数の内容が1(存在する)の場合のみ行う )
if( ShotFlag[ i ] == 1 )
{
// 弾iを16ドット上に移動させる
ShotY[ i ] -= 16 ;

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

// 画面に弾iを描画する
DrawGraph( ShotX[ i ] , ShotY[ i ] , Shot2Graph , FALSE ) ;
}
}
}

if(SF == 3){
// 弾の数だけ弾を動かす処理を繰り返す
for( i = 0 ; i < SHOT ; i ++ )
{
// 自機の弾iの移動ルーチン( 存在状態を保持している変数の内容が1(存在する)の場合のみ行う )
if( ShotFlag[ i ] == 1 )
{
// 弾iを16ドット上に移動させる
ShotY[ i ] -= 16 ;

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

// 画面に弾iを描画する
DrawGraph( ShotX[ i ] , ShotY[ i ] , Shot3Graph , FALSE ) ;
}
}
}

//----------------------------------------------------------------------------
// 敵1の移動ルーチン
{
// 顔を歪めているかどうかで処理を分岐
if( SikakuDamageFlag == 1 )
{
// 顔を歪めている場合はダメージ時のグラフィックを描画する
DrawGraph( teki1X , teki1Y , SikakuDamageGraph , FALSE ) ;
DrawGraph( zakotekiX ,zakotekiY , SikakuDamageGraph , FALSE ) ;
DrawGraph( zakoteki2X , zakoteki2Y , SikakuDamageGraph , FALSE ) ;
DrawGraph( zakoteki3X , zakoteki3Y , SikakuDamageGraph , FALSE ) ;

// 顔を歪めている時間を測るカウンターに1を加算する
SikakuDamageCounter ++ ;

// もし顔を歪め初めて 30 フレーム経過していたら顔の歪んだ状態から
// 元に戻してあげる
if( SikakuDamageCounter == 30 )
{
// 『歪んでいない』を表す0を代入
SikakuDamageFlag = 0 ;
}
}
else
{
// 歪んでいない場合は今まで通りの処理
//敵1--------
// 敵1の座標を移動している方向に移動する
if( teki1Muki == 1 ) teki1X += 5 ;
if( teki1Muki == 0 ) teki1X -= 5 ;


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

// 敵1が画面左端からでそうになっていたら画面内の座標に戻してあげ、移動する方向も反転する
if( teki1X < 0 )
{
teki1X = 0 ;
teki1Muki = 1 ;
}
if(TAME >= 300)teki1Y++;

// 敵1を描画
DrawGraph( teki1X , teki1Y , teki1Graph , FALSE ) ;

//雑魚敵---------------------

if( zakotekiMuki == 1 ) zakotekiX += 3 ;
if( zakotekiMuki == 0 ) zakotekiX -= 3 ;

if( zakotekiX > 576 )
{
zakotekiX = 576 ;
zakotekiMuki = 0;
}
if( zakotekiX < 0 )
{
zakotekiX = 0 ;
zakotekiMuki = 1 ;
}

if(TAME >300)zakotekiY--;
DrawGraph( zakotekiX , zakotekiY , zakotekiGraph , FALSE ) ;

//雑魚敵2---------------------
if( zakoteki2Muki == 1 ) zakoteki2X += 4 ;
if( zakoteki2Muki == 0 ) zakoteki2X -= 4 ;

if( zakoteki2X > 576 )
{
zakoteki2X = 576 ;
zakoteki2Muki = 0;
}
if( zakoteki2X < 0 )
{
zakoteki2X = 0 ;
zakoteki2Muki = 1 ;
}

if(TAME >300)zakoteki2Y++;
DrawGraph( zakoteki2X , zakoteki2Y , zakoteki2Graph , FALSE ) ;

//雑魚敵3---------
if( zakoteki3Muki == 1 ) zakoteki3X += 8 ;
if( zakoteki3Muki == 0 ) zakoteki3X -= 8 ;

if( zakoteki3X > 576 )
{
zakoteki3X = 576 ;
zakoteki3Muki = 0;
}
if( zakoteki3X < 0 )
{
zakoteki3X = 0 ;
zakoteki3Muki = 1 ;
}

if(TAME >300)zakoteki3Y--;
DrawGraph( zakoteki3X , zakoteki3Y , zakoteki3Graph , FALSE ) ;

// 弾を撃つタイミングを計測するためのカウンターに1を足す
ETamaCounter ++ ;
/*EzakoTamaCounter ++;*/


// もしカウンター変数が60だった場合は弾を撃つ処理を行う
if( ETamaCounter == 60 )
{
// もし既に弾が『飛んでいない』状態だった場合のみ発射処理を行う
if( ETamaFlag == 0 )
{
// 弾の発射位置を設定する
ETamaX = teki1X + teki1W / 2 - ETamaW / 2 ;
ETamaY = teki1Y + teki1H / 2 - ETamaH / 2 ;

// 弾の移動速度を設定する
{
double sb, sbx, sby, bx, by, sx, sy ;

sx = ETamaX + ETamaW / 2 ;
sy = ETamaY + ETamaH / 2 ;

bx = zikiX + Bw / 2 ;
by = zikiY + Bh / 2 ;

sbx = bx - sx ;
sby = by - sy ;

// 平方根を求めるのに標準関数の sqrt を使う、
// これを使うには math.h をインクルードする必要がある
sb = sqrt( sbx * sbx + sby * sby ) ;

// 1フレーム当たり8ドット移動するようにする
ETamaSx = sbx / sb * 8 ;
ETamaSy = sby / sb * 8 ;
}

// 弾の状態を保持する変数に『飛んでいる』を示す1を代入する
ETamaFlag = 1 ;
}

// 弾を打つタイミングを計測するための変数に0を代入
ETamaCounter = 0 ;
}
}
}

// 敵1の弾の状態が『飛んでいる』場合のみ弾の移動処理を行う
if( ETamaFlag == 1 )
{
// 弾を移動させる
ETamaX += ETamaSx ;
ETamaY += ETamaSy ;

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

// 画面に描画する( ETamaGraph : 敵1の弾のグラフィックのハンドル )
DrawGraph( ( int )ETamaX , ( int )ETamaY , ETamaGraph , FALSE ) ;

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

// 画面に描画する( ETamaGraph : 敵1の弾のグラフィックのハンドル )
DrawGraph( (int)ETamaX , (int)ETamaY , ETamaGraph , FALSE ) ;
}

// 弾と敵1の当たり判定、弾の数だけ繰り返す
for( i = 0 ; i < SHOT ; i ++ )
{
// 弾iが存在している場合のみ次の処理に映る
if( ShotFlag[ i ] == 1 )
{
// 敵1との当たり判定
if( ( ( ShotX[i] > teki1X && ShotX[i] < teki1X + teki1W ) ||
( teki1X > ShotX[i] && teki1X < ShotX[i] + ShotW ) ) &&
( ( ShotY[i] > teki1Y && ShotY[i] < teki1Y + teki1H ) ||
( teki1Y > ShotY[i] && teki1Y < ShotY[i] + ShotH ) ) )
{
// 接触している場合は当たった弾の存在を消す
ShotFlag[ i ] = 0 ;

teki1HP--;

// 敵1の顔を歪めているかどうかを保持する変数に『歪めている』を表す1を代入
if(teki1HP<=0)SikakuDamageFlag = 1 ;

// 敵1の顔を歪めている時間を測るカウンタ変数に0を代入
SikakuDamageCounter = 0 ;
}
}
}

// 弾と雑魚敵の当たり判定、弾の数だけ繰り返す
for( i = 0 ; i < SHOT ; i ++ )
{
// 弾iが存在している場合のみ次の処理に映る
if( ShotFlag[ i ] == 1 )
{
// 雑魚敵との当たり判定
if( ( ( ShotX[i] > zakotekiX && ShotX[i] < zakotekiX + zakotekiW ) ||
( zakotekiX > ShotX[i] && zakotekiX < ShotX[i] + ShotW ) ) &&
( ( ShotY[i] > zakotekiY && ShotY[i] < zakotekiY + zakotekiH ) ||
( zakotekiY > ShotY[i] && zakotekiY < ShotY[i] + ShotH ) ) )


{
// 接触している場合は当たった弾の存在を消す
ShotFlag[ i ] = 0 ;

// 雑魚敵の顔を歪めているかどうかを保持する変数に『歪めている』を表す1を代入
SikakuDamageFlag = 1 ;

// 雑魚敵の顔を歪めている時間を測るカウンタ変数に0を代入
SikakuDamageCounter = 0 ;
}
}
}

// 弾と雑魚敵2の当たり判定、弾の数だけ繰り返す
for( i = 0 ; i < SHOT ; i ++ )
{
// 弾iが存在している場合のみ次の処理に映る
if( ShotFlag[ i ] == 1 )
{
// 雑魚敵2との当たり判定
if( ( ( ShotX[i] > zakoteki2X && ShotX[i] < zakoteki2X + zakoteki2W ) ||
( zakoteki2X > ShotX[i] && zakoteki2X < ShotX[i] + ShotW ) ) &&
( ( ShotY[i] > zakoteki2Y && ShotY[i] < zakoteki2Y + zakoteki2H ) ||
( zakoteki2Y > ShotY[i] && zakoteki2Y < ShotY[i] + ShotH ) ) )
{
// 接触している場合は当たった弾の存在を消す
ShotFlag[ i ] = 0 ;

// 雑魚敵2の顔を歪めているかどうかを保持する変数に『歪めている』を表す1を代入
SikakuDamageFlag = 1 ;

// 雑魚敵2の顔を歪めている時間を測るカウンタ変数に0を代入
SikakuDamageCounter = 0 ;
}
}
}

// 弾と雑魚敵3の当たり判定、弾の数だけ繰り返す
for( i = 0 ; i < SHOT ; i ++ )
{
// 弾iが存在している場合のみ次の処理に映る
if( ShotFlag[ i ] == 1 )
{
// 雑魚敵3との当たり判定
if( ( ( ShotX[i] > zakoteki3X && ShotX[i] < zakoteki3X + zakoteki3W ) ||
( zakoteki3X > ShotX[i] && zakoteki3X < ShotX[i] + ShotW ) ) &&
( ( ShotY[i] > zakoteki3Y && ShotY[i] < zakoteki3Y + zakoteki3H ) ||
( zakoteki3Y > ShotY[i] && zakoteki3Y < ShotY[i] + ShotH ) ) )

{
// 接触している場合は当たった弾の存在を消す
ShotFlag[ i ] = 0 ;

// 雑魚敵3の顔を歪めているかどうかを保持する変数に『歪めている』を表す1を代入
SikakuDamageFlag = 1 ;

// 雑魚敵3の顔を歪めている時間を測るカウンタ変数に0を代入
SikakuDamageCounter = 0 ;
}
}
}
TAME++;


{
// 弾iが存在している場合のみ次の処理に映る
if( ETamaFlag == 1 )
{
// 自機との当たり判定
if( ( ( ETamaX > zikiX && ETamaX < zikiX + zikiW ) ||
( zikiX > ETamaX && zikiX < ETamaX + ETamaW ) ) &&
( ( ETamaY > zikiY && ETamaY < zikiY + zikiH ) ||
( teki1Y > ETamaY && teki1Y < ETamaY + ETamaH ) ) )
{
// 接触している場合は当たった弾の存在を消す
ETamaFlag = 0 ;

HP--;

// 自機の顔を歪めているかどうかを保持する変数に『歪めている』を表す1を代入
if(HP<=0) zikiDamageFlag = 1 ;

// 自機の顔を歪めている時間を測るカウンタ変数に0を代入
zikiDamageCounter = 0 ;
}
}
}

for(int j = 0; j < HP;j++){
DrawGraph( 0+(53*j) , 480-48 , HPGraph , FALSE ) ;

}

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

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

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

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

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


//----------------------------------

関数化はまだしていません。見づらいかもしれませんが、どうかよろしくお願いします。

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: 2つお願いします。

#2

投稿記事 by へにっくす » 12年前

関数化してください。読む気が起こりません。
メイン関数一つだけにすると、似たような処理や同じ処理などを何度も書くハメになり、絶対バグだらけになります。
修正しようにも人間なので、絶対どこか修正漏れが発生します。
そういうことから、何でもかんでもメイン関数一つだけのような人には、まず関数化してくださいと言います。

またコードを掲示するときは、[code][/code]で囲ってくださいね。
written by へにっくす

閉鎖

“C言語何でも質問掲示板” へ戻る