存储“老派”游戏板的典型方法是使用一个char
或int
多维数组。使用马特出色的小图形,您可以看到板上有 21 x 21 个正方形:
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 消耗点时,将新值存储到板上的位置以指示点已被消耗,但它仍然是路径正方形。马特推荐-1
墙壁,0
无点,和1
一个点 - 这是一个漂亮的计划,因为它让你的“墙壁碰撞”例程简单地寻找
if (board[pac.x][pac.y] > 0) {
/* still in bounds */
} else {
/* collided against a wall */
}
缺点是-1
在您的数组初始化程序中看起来更尴尬。
char board[21][21]
如果这是在 C 中完成的,那么使用而不是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') {
/* collided with a wall */
} else {
/* still in bounds */
}
(虽然NUL
编译器将在字符串末尾插入的尾随意味着右下角的正方形永远不能用于路径或墙壁 - 更多的努力可以解决这个问题,但它并不那么漂亮。 )
我不记得有足够多的 Java 可以在 Java 中完成这项工作——但我相信如果这看起来足够引人注目,你会发现一些东西。