2014年11月26日水曜日

マイクロマウス:迷路情報の格納の仕方

たぶんあまり興味ないネタだと思うけど


一昨年出た時、シミュレーター主体で組んでたせいで、迷路情報アホみたいにでかくてメモリオーバー起こしたので、それの反省を込めて、省メモリの迷路情報保存

つっても区画情報は保存してるし、従来のやつとはあまり変わらないけど



1区画は

class MazeBlock{

public:
bool north;
bool west;
int Count;
};

にしました。


なんで、迷路情報は

MazeBlock mouseMaze[MAX_N][MAX_M];

こんな感じ

1区画だと上と左しか壁情報保存しないけど、
ある区画の右壁情報って隣の区画の左壁情報と同じなわけで

壁情報を使うときに関数を使えば問題ない的な? みたいな?

つまり、こういうこと

bool CheckNorthWall(int x,int y){
if(x < 0) return true;
if(x >= MAX_N) return true;
return mouseMaze[x][y].north;
};

bool CheckWestWall(int x,int y){
if(y < 0) return true;
if(y >= MAX_M) return true;
return mouseMaze[x][y].west;
};

bool CheckEastWall(int x,int y){
if(y+1 >= MAX_M){
return true;
}
return mouseMaze[x][y+1].west;
};

bool CheckSouthWall(int x,int y){
if(x+1 >= MAX_N){
return true;
}
return mouseMaze[x+1][y].north;
};


たぶん、これが一番省メモリだと思います(嘘)
というか、みんなどういう風にしてんの?

0 件のコメント:

コメントを投稿