制作pacman有些问题?

编辑:完全忘了提到我用Java编码

我真的很难制作某种检测系统或某种方式让我的pacman精灵/角色在游戏中顺利通过我的棋盘。 我没有把它作为一张图片。

我曾经尝试过色彩检测,它起到了最好的作用,但根本不光滑而且相当不稳定。

然后我尝试手动输入不允许输入的位置坐标。 这也没有那么好用。

我现在正在尝试让程序使用颜色检测并检查一个单独看不见的板,看看我是否还在路上。 到目前为止,这已经失败了。 它看起来似乎是最聪明的,但角落只是通过调整图像而难以修复。

我想知道你们会为这样的任务建议什么样的方法。

存储“旧学校”游戏板的典型方法是使用charint 多维数组 。 使用Matt优秀的小图形,您可以看到板上有21个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在您的arrays初始化程序中看起来更尴尬。

如果这是在C中完成的话,使用char board[21][21]而不是int board[21][21]很容易“改进”这个并将游戏板存储为C字符串:

 char board[21][21] = " XXXXXXXXXXXXXXXXXXX " " XXX " " X XX XXX X XXX XX X " " XX " " X XX X XXXXX X XX X " " XXXXX " " XXXX XXX X XXX XXXX " " XXXX " "XXXXX X XXXXX X XXXXX" " XX " "XXXXX X XXXXX X XXXXX" " XXXX " " XXXX X XXXXX X XXXX " " XXX " " X XX XXX X XXX XX X " " XXXX " " XX XX XXXXX XX XX " " XXXXX " " X XXXXXX X XXXXXX X " " XX " " XXXXXXXXXXXXXXXXXXX"; 

这在源代码中更容易阅读,占用更少的内存,而且墙碰撞例程看起来像这样:

 if (board[pac.x][pac.y] == 'X') { /* collided with a wall */ } else { /* still in bounds */ } 

(虽然编译器将在字符串末尾插入的尾随NUL意味着右下方的方块永远不能用于路径墙壁 – 稍微努力可以解决这个问题,但它并不那么漂亮。)

我不记得有足够的Java在Java中使用它 – 但我相信如果这看起来足够引人注目,你可以弄明白。