発射されない
Posted: 2010年2月26日(金) 23:35
こんにちは kameoです。
次のようなプログラムを作製したいと思います。
①三角型のプレイヤーを十字キーで操作する。
②スペースを押すと、弾が1個だけとぶ
③弾が消えると次の弾が打てるようになる。(リセット)
そこで次のようなプログラムを組みました。
#include "DxLib.h"
typedef struct{ //プレイヤー
int x,y,img;
}ch_t;
int image[9]; //画像イメージ
char Key[256];
ch_t ch;
void shoot(){ //発射
int flag=0; //発射フラグ
int tamax,tamay=0; //弾の座標
tamax=ch.x; //弾はプレイヤーの上から発射されるように座標設定する。
tamay=ch.y-32;
if(Key[KEY_INPUT_SPACE]==1 && flag==0) flag=1; //発射されていなくかつスペースを押すと弾は飛び出す。
if(flag=1){
tamay-=8;
DrawGraph(tamax,tamay,image[6],TRUE);
if(tamay<-32){
tamay=ch.y;
flag=0; //リセット
}
}
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
//プレイヤー座標及び向き
ch.x =320;
ch.y =240;
int muki=0;
SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
LoadDivGraph( "jiji.png" , 9 , 3 , 3 , 32 , 32 , image ) ;//画像を分割してimage配列に保存
while(1){
ClearDrawScreen();
GetHitKeyStateAll(Key);
if(ProcessMessage()==-1)break;
void shoot(); //発射関数
//移動
if( Key[ KEY_INPUT_RIGHT ] == 1 ) {
ch.x+=4 ;
muki=4;
}
if( Key[ KEY_INPUT_LEFT ] == 1 ) {
ch.x-=4 ;
muki=3;
}
if( Key[ KEY_INPUT_UP ] == 1 ) {
ch.y-=4 ;
muki=0;
}
if( Key[ KEY_INPUT_DOWN ] == 1 ) {
ch.y+=4 ;
muki=1;
}
//プレイヤー描写
ch.img=image[muki];
DrawGraph( ch.x-15 , ch.y-24 , ch.img , TRUE ) ;
if (Key[KEY_INPUT_ESCAPE]==1) break;
ScreenFlip();//裏画面を表画面に反映
}
DxLib_End();
return 0;
}
コンパイルエラーは出ていないのですが、スペースを押しても反応がありません。
たぶん関数の使い方に問題があると思うのですが
いまいち原因がつかめません。
どなたかアドバイスをください。お願いします。
次のようなプログラムを作製したいと思います。
①三角型のプレイヤーを十字キーで操作する。
②スペースを押すと、弾が1個だけとぶ
③弾が消えると次の弾が打てるようになる。(リセット)
そこで次のようなプログラムを組みました。
#include "DxLib.h"
typedef struct{ //プレイヤー
int x,y,img;
}ch_t;
int image[9]; //画像イメージ
char Key[256];
ch_t ch;
void shoot(){ //発射
int flag=0; //発射フラグ
int tamax,tamay=0; //弾の座標
tamax=ch.x; //弾はプレイヤーの上から発射されるように座標設定する。
tamay=ch.y-32;
if(Key[KEY_INPUT_SPACE]==1 && flag==0) flag=1; //発射されていなくかつスペースを押すと弾は飛び出す。
if(flag=1){
tamay-=8;
DrawGraph(tamax,tamay,image[6],TRUE);
if(tamay<-32){
tamay=ch.y;
flag=0; //リセット
}
}
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //ウィンドウ化と初期化処理
//プレイヤー座標及び向き
ch.x =320;
ch.y =240;
int muki=0;
SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面に設定
LoadDivGraph( "jiji.png" , 9 , 3 , 3 , 32 , 32 , image ) ;//画像を分割してimage配列に保存
while(1){
ClearDrawScreen();
GetHitKeyStateAll(Key);
if(ProcessMessage()==-1)break;
void shoot(); //発射関数
//移動
if( Key[ KEY_INPUT_RIGHT ] == 1 ) {
ch.x+=4 ;
muki=4;
}
if( Key[ KEY_INPUT_LEFT ] == 1 ) {
ch.x-=4 ;
muki=3;
}
if( Key[ KEY_INPUT_UP ] == 1 ) {
ch.y-=4 ;
muki=0;
}
if( Key[ KEY_INPUT_DOWN ] == 1 ) {
ch.y+=4 ;
muki=1;
}
//プレイヤー描写
ch.img=image[muki];
DrawGraph( ch.x-15 , ch.y-24 , ch.img , TRUE ) ;
if (Key[KEY_INPUT_ESCAPE]==1) break;
ScreenFlip();//裏画面を表画面に反映
}
DxLib_End();
return 0;
}
コンパイルエラーは出ていないのですが、スペースを押しても反応がありません。
たぶん関数の使い方に問題があると思うのですが
いまいち原因がつかめません。
どなたかアドバイスをください。お願いします。