DXライブラリでマップが作れません・・・。
今DXライブラリとVisualC++2008を使ってゲーム(アクション)を作っているのですがマップが作れません・・・、構造体?をつかってマップの描写は成功したのですが、0のところに判定を持たせることができません・・・。どのようにすればいいのでしょうか?色々試してみてもできず困っています。
ソースの一部
#include"DxLib.h"
#define MAP_SIZE 64 // マップチップ一つのドットサイズ
#define MAP_WIDTH 10 // マップの幅
#define MAP_HEIGHT 8 // マップの縦長さ
int MapData[ MAP_HEIGHT ][ MAP_WIDTH ] =
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ,
} ;
void HYOUZI(void);
void SYOKIKA(void);
struct dousa{
int power;
int flag;
};
struct dousa jump;
struct zahyou {
int x,y;
int img;
int flag;
int muki_y;
int muki_x;
int x1;
int x2;
int x3;
int x4;
int y1;
int y2;
int y3;
int y4;
};
struct zahyou haikei;
struct charcter {
int x,y;
int img;
int flag;
};
struct charcter ziki;
struct map;
//初期化
void SYOKIKA(void){
jump.flag=0;
ziki.x=100;
ziki.y=100;
ziki.img=LoadGraph("red_player.bmp");
}
//背景
void HYOUZI(void){
int i,j;
for( i = 0 ; i < MAP_HEIGHT ; i ++ )
{
for( j = 0 ; j < MAP_WIDTH ; j ++ )
{
if( MapData[ i ][ j ] == 0 )
{
DrawBox( j * MAP_SIZE , i * MAP_SIZE ,
j * MAP_SIZE + MAP_SIZE , i * MAP_SIZE + MAP_SIZE ,
GetColor( 255 , 0 , 0 ) , TRUE ) ;
}
}
}
DrawGraph(ziki.x,ziki.y,ziki.img,TRUE);
ScreenFlip();
}
//動き
void ugoki(void){
int OldX , OldY ;
OldX = ziki.x ;
OldY = ziki.y ;
if (CheckHitKey(KEY_INPUT_RIGHT) == 1){
ziki.x=ziki.x+4;
}
if (CheckHitKey(KEY_INPUT_RIGHT) == 1)
if (CheckHitKey(KEY_INPUT_Z) == 1)
{
ziki.x=ziki.x+8;
}
if (CheckHitKey(KEY_INPUT_LEFT) == 1){
ziki.x=ziki.x-4;
}
if (CheckHitKey(KEY_INPUT_LEFT) == 1)
if (CheckHitKey(KEY_INPUT_Z) == 1)
{
ziki.x=ziki.x-8;
}
if(ziki.x>640){
ziki.x=-10;
}
if(ziki.x<-10){
ziki.x=640;
}
//ジャンプ
jump.power-=1;
ziki.y -=jump.power;
if(ziki.y>400){
jump.power=0;
ziki.y=400;
jump.flag=0;
}
if (CheckHitKey(KEY_INPUT_DOWN) == 1 && jump.flag == 0){
jump.power=30;
jump.flag=1;
}
if (CheckHitKey(KEY_INPUT_UP) == 1 && jump.flag == 0){
jump.power=20;
jump.flag=1;
}
if( MapData[ ziki.x ][ ziki.y ] == 0 )
{
ziki.x = OldX ;
ziki.y = OldY ;
}
}
int WINAPI WinMain ( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
ChangeWindowMode(TRUE);
if(DxLib_Init()==-1)
{
return -1;
}
SYOKIKA();
SetDrawScreen(DX_SCREEN_BACK);
while(ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0){
HYOUZI();
ugoki();
ClearDrawScreen();
}
DxLib_End();
return(0);
}
分かる人がいたらぜひ教えてください(o_ _)o
お礼
こんにちは、boundaryです。 とりあえず解決しました。 とあるホームページのとある方より正しいコードを頂戴しました。 (その際、クロスポストのお叱りを受けました。失礼しました。) またまた最大投稿文字数の関係で全てを記述できないので、 要点にまとめて書きます。 struct StateAndReturn { int State; int Return; StateAndReturn(int s =0, int r =0) : State(s), Return(r) {} }; template<typename F> struct NextStateAndFunc { typedef int (F::*func_type)(); int NextState; func_type MemFuncPointer; NextStateAndFunc(int s =0, func_type f =0) : NextState(s), MemFuncPointer(f) {} }; とし、 typedef typename NextStateAndFunc<F>::func_type func_type; typedef std::map<StateAndReturn, NextStateAndFunc<F>, my_less> map_type; template<typename F> const NextStateAndFunc<F> CEventManager<F>::Answer(int StateNow, int ServerReturnCode) { typename map_type::const_iterator ite = EventFuncMap.find(StateAndReturn(StateNow,ServerReturnCode)); return ite->second; } との事です。 僕のとの違いを今考えているのですが正直言ってよくわかりません。(^◇^) 違いはメンバ関数スコープ内にローカルオブジェクトを作ってmap::find()のと メンバ関数の引数としての一時オブジェクトをmap::find()に渡してるだけだと 思うのですが、(-.-;)y-~~~ 何分初心者ですので(テンポラリなセリフ・・・)しばしゆっくり考えてみたいと思います。 ありがとうございました。q( ̄ω ̄)p
補足
こんにちは、Fookyさん。 お返事ありがとうございます。 >反復子との型の不一致ということは無いんですか? すみません。貼り付け間違いました。 map<StateAndReturn, NextStateAndFunc>::const_iterator ite; ← × map<StateAndReturn, NextStateAndFunc, my_less>::const_iterator ite; ← ○ my_lessは、 struct my_less : binary_function<_StateAndReturn, _StateAndReturn, bool>{ bool operator()(const _StateAndReturn& x, const _StateAndReturn& y){ return x.State < y.State; } }; としてます。 エラーの内容ですが、 error C2679: 二項演算子 '=' : 型 'class std::_Tree<struct _StateAndReturn,struct std::pair<struct _StateAndReturn const ,struct NextStateAndFunc>,struct std::map<struct _StateAndReturn,struct NextStateAndFunc,struct my_less,class std::allocator<struct NextStateAndFunc> >::_Kfn,struct my_less,class std::allocator<struct NextStateAndFunc> >::iterator' の右オペランドを扱う演算子は定義されていません。(または変換できません)(新しい動作; ヘルプを参照) となっています。