ページ 11

シューティングゲームで・・・

Posted: 2007年7月04日(水) 00:26
by 雪中 蓮
お久しぶりです。

早速なんですが今、学校の授業でシューティングゲームを作っているのですが、

その作成中のプログラムに

こちらのサイトのシューティングゲーム館の内容を参考にして

自機の弾を増やしたのですがうまく表示されません。

どなたかアドバイスをお願いします。

長いですが、貼っておきます。


---------------------------

#include "DxLib.h" // DxLibライブラリを使用する
#include <math.h> //平方根の計算のため

//プロトタイプ宣言
float rad(float degree);
/*
*
* 変数定義
*
*/
int Counter = 0;

int Backimg;

int PlayerGraph;
int PlayerX;
int PlayerY;

double ShotSpeed = 10;

typedef struct{
double x,y;
double Mx,My;
double Angle;
int flag;
} SHOT_t;

SHOT_t PlayerShot[5][15];//1:列 2:1列の最大個数

int ShotGraph[2];

int EnemyGraph;
int EnemyX;
int EnemyY;
bool EFlag;

double root = 5 * sqrt(2.0f);

// ========== WinMain関数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{

// ---------- システム処理
SetGraphMode(640, 480, 16); // 640×480ドット65536色モードに設定
SetWindowText("Shooting_kadai");
ChangeWindowMode(true); //true:window false:フルスクリーン
if(DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
SetDrawScreen(DX_SCREEN_BACK); // ひとまずバックバッファに描画

/*
*
* 初期設定
*
*/

//背景
Backimg=LoadGraph("image/haikei.bmp");

//自機グラフィック
SetTransColor(255,0,255);
PlayerGraph = LoadGraph("image/player.bmp");
PlayerX = 319;
PlayerY = 239;

//弾グラフィック
SetTransColor(255,0,255);
ShotGraph[0] = LoadGraph("image/shot.bmp");
ShotGraph[1] = LoadGraph("image/shot2.bmp");

//弾移動量初期化
float degree[5]={0+90,22.5+90,-22.5+90,45+90,-45+90};
int a,b;
for(a=0;a<5;a++){
for(b=0;b<15;b++){
PlayerShot[a].Mx=cos(rad(degree[a]))*ShotSpeed;
PlayerShot[a].My=sin(rad(degree[a]))*ShotSpeed;
}
}

//敵グラフィック
SetTransColor(255,0,255);
EnemyGraph = LoadGraph("image/enemy.bmp");
EnemyX = 319;
EnemyY = 75;
EFlag = true;

// ---------- ゲームループ
while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
{
ClsDrawScreen(); // 画面消去

//フレームカウント 60fpsを正常動作とする
if(Counter == 60){
Counter = -1;
}
Counter++;
/*
* メイン処理
*/
DrawGraph(0, 0, Backimg,false);

//キー入力
if(CheckHitKey(KEY_INPUT_RIGHT))PlayerX += 5;
if(CheckHitKey(KEY_INPUT_LEFT))PlayerX -= 5;
if(CheckHitKey(KEY_INPUT_UP))PlayerY -= 5;
if(CheckHitKey(KEY_INPUT_DOWN))PlayerY += 5;

//画面外判定
if(PlayerX < 16) PlayerX = 16;
if(PlayerX > 623) PlayerX = 623;
if(PlayerY < 16) PlayerY = 16;
if(PlayerY > 463) PlayerY = 463;

DrawGraph(PlayerX, PlayerY, PlayerGraph,true);


//ショット

//表示チェック 表示されてないものを探して表示させる
if(CheckHitKey(KEY_INPUT_LCONTROL) && Counter%5==0){
for(a=0;a<5;a++){
for(b=0;b<15;b++){
if(PlayerShot[a].flag==0){
PlayerShot[a].flag=1;
PlayerShot[a].x=PlayerX;
PlayerShot[a].y=PlayerY;
break;
}
}
}
}
//ショット移動
for(a=0;a<5;a++){
for(b=0;b<15;b++){
if(PlayerShot[a].flag==1){
PlayerShot[a].x-=PlayerShot[a].Mx;
PlayerShot[a].y-=PlayerShot[a][b].My;
if(PlayerShot[a][b].x<-32||PlayerShot[a][b].x>640+32||PlayerShot[a][b].y<-32)
PlayerShot[a][b].flag=0;
}
}
}
//表示
for(a=0;a<5;a++){
for(b=0;b<15;b++){
if(PlayerShot[a][b].flag==1){
if(a==0) DrawGraph(PlayerShot[a][b].x-10,PlayerShot[0][b].y-18,ShotGraph[0],true);
if(a==1) DrawGraph(PlayerShot[a][b].x-10,PlayerShot[0][b].y-18,ShotGraph[1],true);
}
}
}

//敵表示
if(EFlag == true){
EnemyX -= 6;
if(EnemyX <= 0) EFlag = false;
}
if(EFlag == false){
EnemyX += 6;
if(EnemyX >= 640-32) EFlag = true;
}
DrawGraph(EnemyX - 32, EnemyY - 32, EnemyGraph, true);


ScreenFlip(); // 裏画面を表画面に瞬間コピー
}
DxLib_End(); // DXライブラリの終了処理
return 0; // このプログラムの終了
}



float rad(float degree)
{
return degree / 180.0 * 3.14159265;
}

Re:シューティングゲームで・・・

Posted: 2007年7月04日(水) 01:50
by Justy
 ぱっと見おかしなところは
[color=#d0d0ff" face="monospace]	if (a == 0)
		DrawGraph(PlayerShot[a].x - 10, PlayerShot[0].y - 18, ShotGraph[0], true);
	if (a == 1)
		DrawGraph(PlayerShot[a].x - 10, PlayerShot[0].y - 18, ShotGraph[1], true);[/color]

 ここですね。

 a=0と a=1の時しか描画していないので、どうやっても 2~4は表示されません。
 それに y座標のほうで PlayerShot[[color=#ff8080" face="aria[/url]0[/color]]としていますが、これは aではないのでしょうか?

Re:シューティングゲームで・・・

Posted: 2007年7月04日(水) 23:26
by 雪中 蓮
ご指摘ありがとうございます。

今朝からコンパイルができなくなったので動作確認ができませんので

また何かあれば質問させてもらいます。

返信が遅れて申し訳ありませんでした。