未定義のシンボル jkidata(関数 JicharaMove() )とでてくるのですがどこがいけないでしょうか??
//spgame01.cpp
#include "spgame.h"
//グローバル変数
struct CharaData jikidata;
struct CharaData jitama[3];
int trigger = 0;
struct CharaData tekidata[50];
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC)
{
ChangeWindowMode(TRUE); //ウィンドウモードで起動
if(DxLib_Init() == -1) return(-1); //DXライブラリ初期化
JicharaLoad();
TekiLoad();
JicharaInit();
TekiInit();
SetDrawScreen(DX_SCREEN_BACK);
while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
ClsDrawScreen();
JicharaMove();
JitamaMove();
TekiMove();
if(AtariHantei() == 1) break;
ScreenFlip();
}
DxLib_End(); //DXライブラリ終了処理
return(0); //終了
}
//jichara.cpp
#include "spgame.h"
//グローバル変数
int jitamabmp;
//●自キャラ画像の読み込み(プログラム起動時に呼び出す)
void JicharaLoad(){
jikidata.ghandle = LoadGraph("media\\jiki.bmp");
jitamabmp = LoadGraph("media\\tama.bmp");
}
//●自キャラデータの初期化(タイトル画面から呼び出す)
void JicharaInit(){
jikidata.x=0;
jikidata.y=0;
jikidata.image_w = 48;
jikidata.image_h = 32;
jikidata.bounds_w = 32;
jikidata.bounds_h = 20;
for(int i=0; i<3;i=i+1) {
jitama.ghandle = jitamabmp;
jitama.image_w = 64;
jitama.image_h = 16;
jitama.bounds_w = 48;
jitama.bounds_h = 12;
}
}
//●自キャラの移動処理(ゲームメインから呼び出す)
void JicharaMove(){
//自キャラ移動
int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
if(key & PAD_INPUT_UP) jikidata.y = jikidata.y-4;
if(key & PAD_INPUT_DOWN) jikidata.y = jikidata.y+4;
if(key & PAD_INPUT_LEFT) jikidata.x = jikidata.x-4;
if(key & PAD_INPUT_RIGHT) jikidata.x = jikidata.x+4;
DrawGraph(jkidata.x, jikidata.y, jikidata.ghandle, TRUE);
}
void JitamaMove(){
//弾の発射
int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
if( (key & PAD_INPUT_A) && (trigger == 0) ) {
for(int i=0; i<3; i=i+1){
if (jitama.life == 0){
jitama.life = 1;
jitama.x = jikidata.x+24;
jitama.y = jikidata.y+8;
break;
}
}
trigger = 20;
}
if(trigger>0) trigger = trigger - 1;
//弾の移動
for(int i=0; i<3; i=i+1){
if(jitama.life > 0){
jitama[i].x = jitama[i].x + 2;
DrawGraph(jitama[i].x, jitama[i].y, jitama[i].ghandle, TRUE);
//画面に出た時の処理
if(jitama[i].x>640) jitama[i].life = 0;
}
}
}
int IsAtari(CharaData a, CharaData b){
int retval = 0;
int ax1 = a.x + (a.image_w - a.bounds_w)/2;
int ay1 = a.y + (a.image_h - a.bounds_h)/2;
int ax2 = a.x + (a.image_w + a.bounds_w)/2;
int ay2 = a.y + (a.image_h + a.bounds_h)/2;
int bx1 = b.x + (b.image_w - b.bounds_w)/2;
int by1 = b.y + (b.image_h - b.bounds_h)/2;
int bx2 = b.x + (b.image_w + b.bounds_w)/2;
int by2 = b.y + (b.image_h + b.bounds_h)/2;
if( (ax1<bx2) && (bx1<ax2) && (ay1<by2) && (by1<ay2) ){
retval = 1;
}
return(retval);
}
int AtariHantei(){
for(int i=0; i<50; i=i+1){
if(tekidata[i].life>0){
//自機と敵の判定
if(IsAtari(jikidata, tekidata[i])==1) return(1);
//弾と敵の判定
for(int j=0; j<3; j=j+1){
if(jitama[j].life > 0){
if(IsAtari(jitama[j], tekidata[i])==1){
jitama[j].life = 0;
tekidata[i].life = 0;
}
}
}
}
}
return(0);
tekichara.cpp
#include "spgame.h"
//グローバル変数
int tekibmp;
//●敵キャラ画像の読み込み(プログラム起動時に呼び出す)
void TekiLoad(){
tekibmp = LoadGraph("media\\teki00.bmp");
}
//●敵キャラデータの初期化(タイトル画面から呼び出す)
void TekiInit(){
for(int i=0; i<50; i=i+1){
tekidata[i].ghandle = tekibmp;
tekidata[i].life = 1;
tekidata[i].x = GetRand(548)+60;
tekidata[i].y = GetRand(448);
tekidata[i].image_w = 32;
tekidata[i].image_h = 32;
tekidata[i].bounds_w = 20;
tekidata[i].bounds_h = 20;
}
}
void TekiMove(){
for(int i=0; i<50; i=i+1){
if(tekidata[i].life>0){
DrawGraph(tekidata[i].x, tekidata[i].y, tekidata[i].ghandle, true);
}
}
}
spgame.h
#include "DxLib.h"
struct CharaData{
int x; //左上座標
int y;
int ghandle; //画像ハンドル
int life; //ライフ
int image_w; //イメージの大きさ
int image_h;
int bounds_w; //判定領域の大きさ
int bounds_h;
};
//プロトタイプ宣言
void JitamaMove();
void TekiMove();
int IsAtari(CharaData, CharaData);
int AtariHantei();
void JicharaLoad();
void JicharaInit();
void JicharaMove();
void TekiLoad();
void TekiInit();
//グローバル変数
extern struct CharaData jikidata;
extern struct CharaData jitama[/url];
extern int trigger;
extern struct CharaData tekidata[/url];
14歳からはじめるワクワクC言語
Re:14歳からはじめるワクワクC言語
//●自キャラの移動処理(ゲームメインから呼び出す) void JicharaMove(){ //自キャラ移動 int key = GetJoypadInputState(DX_INPUT_KEY_PAD1); if(key & PAD_INPUT_UP) jikidata.y = jikidata.y-4; if(key & PAD_INPUT_DOWN) jikidata.y = jikidata.y+4; if(key & PAD_INPUT_LEFT) jikidata.x = jikidata.x-4; if(key & PAD_INPUT_RIGHT) jikidata.x = jikidata.x+4; DrawGraph(jkidata.x, jikidata.y, jikidata.ghandle, TRUE); // ↑ここです }
Re:14歳からはじめるワクワクC言語
まず、規約を読んで投稿しましょう。
ソースコードはプレタグを使って投稿しましょう。
自分の見つけたい文字列は検索すれば見つけられます。
ソースコードはプレタグを使って投稿しましょう。
自分の見つけたい文字列は検索すれば見つけられます。