申し訳ありません。
目的
シューティングゲームの作成
他のファイルからグローバル変数を参照しないようにしたい
結果
メニュー画面でゲームを選択し、エンターを押すとゲーム画面でキャラの描画と移動
書き方としては問題はないでしょうか?
char.cppはこのようにしました
コード:
#include "DxLib.h"
#include "key.h"
#include "math.h" //sqrt関数
#include "define.h"
//キャラクターに関する構造体
typedef struct{
int flag; //フラグ
int cnt; //カウンタ
int power; //パワー
int point; //ポイント
int score; //スコア
int num; //残機数
int mutekicnt; //無敵状態とカウント
int shot_mode; //ショットモード
int money; //お金
int img;
int slow; //スローかどうか
double x,y; //座標
}ch_t;
static int img_ch[2][12]; //キャラクタ画像9枚分 X2(変身用)
ch_t ch; //キャラクタデータ宣言
//初期化
void char_Initialize(){
//画像ファイルのメモリへの分割読みこみ
LoadDivGraph("dat/img/char/0.png", 12, 4, 3, 73, 73, img_ch[0]);
//自機データの初期化
memset(&ch,0,sizeof(ch_t));
//キャラクタの初期座標を設定
ch.x=FMX/2;
ch.y=FMY*7/8;
}
//終了処理
void char_Finalize(){
//画像の解放
for(int i=0; i<12; i++) DeleteGraph(img_ch[0][i]);
}
//更新
void char_Update(){
int i,sayu_flag=0,joge_flag=0;
double x,y,mx,my,naname=1;
double move_x[4]={-4.0,4.0,0,0},move_y[4]={0,0,4.0,-4.0};//{左,右,下,上}のスピード
int inputpad[4];
inputpad[0]=CheckStateKey(KEY_INPUT_LEFT); inputpad[1]=CheckStateKey(KEY_INPUT_RIGHT);
inputpad[2]=CheckStateKey(KEY_INPUT_DOWN); inputpad[3]=CheckStateKey(KEY_INPUT_UP);
//24周期で1周、その中で4種類の画像をループ
ch.cnt++;
ch.img=(ch.cnt%24)/6;
//キャラクタの移動制御
if(CheckStateKey(KEY_INPUT_LEFT)>0)//左キーが押されていたら
ch.img+=4*2;//画像を左向きに
else if(CheckStateKey(KEY_INPUT_RIGHT)>0)//右キーが押されていたら
ch.img+=4*1;//画像を右向きに
for(i=0;i<2;i++)//左右分
if(inputpad[i]>0)//左右どちらかの入力があれば
sayu_flag=1;//左右入力フラグを立てる
for(i=2;i<4;i++)//上下分
if(inputpad[i]>0)//上下どちらかの入力があれば
joge_flag=1;//上下入力フラグを立てる
if(sayu_flag==1 && joge_flag==1)//左右、上下両方の入力があれば斜めだと言う事
naname=sqrt(2.0);//移動スピードを1/ルート2に
for(int i=0;i<4;i++){//4方向分ループ
if(inputpad[i]>0){//i方向のキーボード、パッドどちらかの入力があれば
x=ch.x , y=ch.y;//今の座標をとりあえずx,yに格納
mx=move_x[i]; my=move_y[i];//移動分をmx,myに代入
if(CheckStateKey(KEY_INPUT_LSHIFT)>0){//低速移動なら
mx=move_x[i]/3; my=move_y[i]/3;//移動スピードを1/3に
}
x+=mx/naname , y+=my/naname;//今の座標と移動分を足す
if(!(x<10 || x>FMX-10 || y<5 || y>FMY-5)){//計算結果移動可能範囲内なら
ch.x=x , ch.y=y;//実際に移動させる
}
}
}
}
//描画
void char_Draw(){
DrawRotaGraphF(ch.x+FX,ch.y+FY,1.0f,0.0f,img_ch[0][ch.img],TRUE);
}