新年早々質問をさせて頂くクロすけと申します。C++を勉強中の身です。
今回は、15パズルというゲームを練習で作成しておりまして、特定の画像が表示されないということで困っております。
パズル自体は画像(puzuru)として表示されるのですが、どれを選択しているのかというターゲットマーカー(mark)がどうしても表示しません。
いろいろとコマンド化して修正場所を特定しようと試みたのですが、何も変化がなく先に進めない状態です。
もちろん、画像の名前と場所はしっかりと確認しました。
もしかしたら、致命的なミスかもしれないので一応、全てのソースコードを載せようと思います。
どなたか分かる方お願いします。
ヘッダーファイル
gv.h
#include "DxLib.h"
#include "define.h"
#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern
#endif
GLOBAL int step;
//画像系ハンドル
GLOBAL int pHandle[15] ;
GLOBAL int mark ;
//構造体
GLOBAL mark_s m;
#include "function.h"//関数宣言//main.cppから呼ぶ必要のある他のファイルで宣言した関数
//load.cpp
//画像読み込み
GLOBAL void load();
//draw.cpp
//描画処理
GLOBAL void draw_main();
//mark.cpp
//マーカーの移動制御
GLOBAL void mark_move();
//ini.cpp
//1度だけの初期化処理
GLOBAL void first_ini();
//ゲームの初期化処理
GLOBAL void ini();load.cpp
#include "gv.h"
void load(){
LoadDivGraph( "img/puzuru.png" , 15 , 5 , 3 , 64 , 64 , pHandle ) ;
int mark = LoadGraph("img/mark.png");//←この画像だけが表示されない
}#include "gv.h"
//一番最初の初期化
void first_ini(){
m.x = 64;
m.y = 64;
}
void ini(){
memset(&m,0,sizeof(mark_s));
//memset(&ta,0,sizeof(tama_s));
m.x = 64;
m.y = 64;
//ta.hassyaFlag = 0;
//ji.flag = 0;
}#include "gv.h"
void mark_move(){
if(CheckHitKey(KEY_INPUT_LEFT)==1) m.x -=64;
if(CheckHitKey(KEY_INPUT_RIGHT)==1) m.x +=64;
if(CheckHitKey(KEY_INPUT_UP)==1) m.y -=64;
if(CheckHitKey(KEY_INPUT_DOWN)==1) m.y +=64;
//移動範囲の制御
if(m.x < 64) {m.x=64;}
if(m.x > PANERU_MAX_X-64) {m.x = PANERU_MAX_X-64;}
if(m.y < 64) {m.y=64;}
if(m.y > PANERU_MAX_Y-64) {m.y = PANERU_MAX_Y-64;}
}#include "gv.h"
//パネル4×4で描画
void draw_paneru(){
int cnt = 0;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
DrawGraph( 64*j+64 , 64*i+64 , pHandle[ cnt ] , FALSE );
cnt++;
}
}
}
//ターゲットマーカー描画
void draw_mark(){
DrawGraph(m.x , m.y , mark , FALSE );
}
//まとめた描画処理
void draw_main(){
draw_paneru();
draw_mark();
}
#define GLOBAL_INSTANCE
#include "gv.h"
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
return 0;
}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE); // ウィンドウモードに設定
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
while(ProcessLoop()==0){//メインループ
switch(step){
case 0:
load();//データのロード
first_ini();//初回の初期化
step=1;
break;
case 1:
ini();
step=2;
break;
case 2:
mark_move();
draw_main();
break;
default:
printfDx("step不明\n");
break;
}
if(CheckHitKey(KEY_INPUT_ESCAPE)==1) break;//エスケープが入力されたらブレイク
ScreenFlip();//裏画面反映
} // キー入力待ち
DxLib_End(); // DXライブラリ終了処理
return 0;
}