box さんが書きました:platyくん さんが書きました:
エラーは
//移動処理を行う
p = pHead;
while(p->pNext != 0){
の辺りで
実行時のエラーが出る、ということは、少なくともコンパイルは通っていますね。一方、
最初に投稿されたコードはコンパイルが通りません。そこで、
いま手元にある(はずの)、コンパイルが通っているコードを見せてください。
今現在のプログラムは、自機が移動してAボタンで弾を撃つ仕様になっています。で、コードは
コード:
//main.cpp
#include "DxLib.h"
#include "GV.h"
int loop_time;
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){
Chara_move();//自機キャラを動かす
Weapon_shot();//弾を発射する
loop_time = loop_time + 1;
}
DxLib_End(); // DXライブラリ終了処理
return 0;}
コード:
//Character.cpp
#include "DxLib.h"
#include "GV.h"
int Key[256]; // キーが押されているフレーム数を格納する
int x = 100;
int y = 240;//自機キャラの初期配置を定義
static int Handle;
int loop = 0;
// キーの入力状態を更新する
int gpUpdateKey(){
char tmpKey[256]; // 現在のキーの入力状態を格納する
GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
for( int i=0; i<256; i++ ){
if( tmpKey[i] != 0 ){ // i番のキーコードに対応するキーが押されていたら
Key[i]++; // 加算
} else { // 押されていなければ
Key[i] = 0; // 0にする
}
}
return 0;
}
void Chara_move(){
if( loop == 0){
loop = 1;
Handle = LoadGraph("picture/boy.png");
}
// while(裏画面を表画面に反映, メッセージ処理, 画面クリア, キーの更新)
if( Key[ KEY_INPUT_RIGHT ] >= 1 ){ // 右キーが押されていたら
x++; // 右へ移動
}
if( Key[ KEY_INPUT_DOWN ] >= 1 ){ // 下キーが押されていたら
y++; // 下へ移動
}
if( Key[ KEY_INPUT_LEFT ] >= 1 ){ // 左キーが押されていたら
x--; // 左へ移動
}
if( Key[ KEY_INPUT_UP ] >= 1 ){ // 上キーが押されていたら
y--; // 上へ移動
}
DrawRotaGraph( x, y, 1.0, 0.0, Handle, TRUE ); // x,y の位置にキャラを描画
}
コード:
//Weapon.cpp
#include "DxLib.h"
#include "GV.h"
#include "zikishot.h"
static int Bullet;
bool shot_tyuu[30];
int bullet_x[30];
int bullet_y[30];//弾の座標を定義
zikishot *pHead = NULL;
zikishot *pTail = NULL;
zikishot *p;
int Weapon_shot(){
if( Key[ KEY_INPUT_A ] == 1){//Aボタンが押されてたら弾を発射!
//ウエポン変数に追加する
if(pHead == 0){//Headが空ならpを代入
pHead = p;}
if(pTail){//Tailに何か入ってたら?
pTail->pNext = p;}
p->pBefore = pTail;
p->pNext = 0;
p->x = x;
p->y = y;
pTail = p; }
//移動処理を行う
p = pHead;
while(p->pNext != 0){
p->x = 30;
p = p->pNext;
}
//描画処理を行うよ
if(loop_time == 0){
Bullet = LoadGraph("picture/bullet.png");//球の画像をロード
}
p = pHead;
while(p->pNext != 0){
DrawRotaGraph( p->x, p->y, 1.0, 0.0, Bullet, TRUE );
p = p->pNext;
}
return 0;
}
コード:
//GV.h
int gpUpdateKey();//ボタン入力情報を得る
void Chara_move();//自機を移動させるL1
int Weapon_shot();
#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern
#endif
GLOBAL int x; //自機のx座標
GLOBAL int y; //自機のy座標
extern int Key[256];//ボタン入力の変数
extern int Handle;//自機を表示させる
GLOBAL int loop_time;
コード:
//zikishot.h
struct zikishot{
int x;
int y;
zikishot *pBefore;
zikishot *pNext;
};
長くなってすみません。これでプログラム全部です。