编辑:完全忘了提及我正在用 Java 编写代码
我真的很难制作某种检测系统或某种方法来让我的吃 bean Sprite /角色在游戏中顺利通过我的棋盘。我没有把板做成图像。
我首先尝试了颜色检测,效果最好,但一点也不流畅,而且非常不稳定。
然后我尝试手动输入不允许输入的位置坐标。这也不是很好。
我现在正在尝试让程序使用颜色检测并检查一个单独的看不见的板,看看我是否还在路上。这是迄今为止失败最多的。看起来这将是最聪明的,但边角太小了,很难通过调整图像来修复。
我想知道你们会为这样的任务建议什么方法。
最佳答案
存储“老派”游戏板的典型方法是使用char
或int
multidimensional array .使用Matt's excellent little graphic你可以看到棋盘上有 21 x 21 个方 block :
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 消耗点时,将新值存储到板中的位置以指示点已被消耗但它仍然是路径方 block 。 Matt 建议用 -1
表示墙,0
表示没有点,1
表示点——这是一个很好的计划,因为它可以让您的“撞墙”套路简单找
if (board[pac.x][pac.y] > 0) {
/* still in bounds */
} else {
/* collided against a wall */
}
缺点是 -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') {
/* collided with a wall */
} else {
/* still in bounds */
}
(尽管编译器将在字符串末尾插入的尾随 NUL
意味着右下角的方 block 永远不能用于通路 或 墙 - - 多一点努力可以解决这个问题,但它并不那么漂亮。)
我不记得有足够多的 Java 可以在 Java 中完成这项工作——但我相信如果这看起来足够吸引人,你一定能想出一些办法。
关于java - 制作 pacman 时遇到问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8117564/