一个存储“老派”游戏板的典型方法是使用一个
char
或
int
多维数组。使用
Matt的优秀小图形,您可以看到棋盘上有21x21个方格:
int board[21][21] = {{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1},
{1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1},
/* ... and so on, for all 21 lines .. */ }};
无论您为墙和路径选择哪些数字都没有关系。"路径"位置最初包含一个"包含点"的代码。当paccy吃掉点时,在该位置将一个新值存储到板子上,以指示已经消耗了点,但它仍然是一个通道方块。Matt建议用-1
表示墙,0
表示没有点,1
表示有点--这是一个相当好的计划,因为它让您的"墙碰撞"例程只需寻找。
if (board[pac.x][pac.y] > 0) {
} else {
}
缺点是在数组初始化器中使用-1
会显得更加笨拙。
如果这是在C中完成的,使用char board[21][21]
代替int board[21][21]
并将游戏板存储为C字符串将很容易“改进”:
char board[21][21] = " XXXXXXXXXXXXXXXXXXX "
" X X X "
" X XX XXX X XXX XX X "
" X X "
" X XX X XXXXX X XX X "
" X X X X X "
" XXXX XXX X XXX XXXX "
" X X X X "
"XXXXX X XXXXX X XXXXX"
" X X "
"XXXXX X XXXXX X XXXXX"
" X X X X "
" XXXX X XXXXX X XXXX "
" X X X "
" X XX XXX X XXX XX X "
" X X X X "
" XX X X XXXXX X X XX "
" X X X X X "
" X XXXXXX X XXXXXX X "
" X X "
" XXXXXXXXXXXXXXXXXXX";
这在源代码中读起来更容易,占用的内存更少,您的墙壁碰撞例程可以如下所示:
if (board[pac.x][pac.y] == 'X') {
} else {
}
尽管编译器会在字符串末尾插入一个
NUL
,这意味着右下角的正方形永远不能用于路径或墙壁,但稍加努力可以解决这个问题,但并不美观。我记不清足够的Java知识来使其在Java中运行,但如果你觉得这很有吸引力,我相信你可以想出一些办法。