シューティングゲームで・・・
Posted: 2007年7月04日(水) 00:26
お久しぶりです。
早速なんですが今、学校の授業でシューティングゲームを作っているのですが、
その作成中のプログラムに
こちらのサイトのシューティングゲーム館の内容を参考にして
自機の弾を増やしたのですがうまく表示されません。
どなたかアドバイスをお願いします。
長いですが、貼っておきます。
---------------------------
#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;
}
早速なんですが今、学校の授業でシューティングゲームを作っているのですが、
その作成中のプログラムに
こちらのサイトのシューティングゲーム館の内容を参考にして
自機の弾を増やしたのですがうまく表示されません。
どなたかアドバイスをお願いします。
長いですが、貼っておきます。
---------------------------
#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;
}