gpt4 book ai didi

java - 制作 pacman 时遇到问题?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:28:40 24 4
gpt4 key购买 nike

编辑:完全忘了提及我正在用 Java 编写代码

我真的很难制作某种检测系统或某种方法来让我的吃 bean Sprite /角色在游戏中顺利通过我的棋盘。我没有把板做成图像。

我首先尝试了颜色检测,效果最好,但一点也不流畅,而且非常不稳定。

然后我尝试手动输入不允许输入的位置坐标。这也不是很好。

我现在正在尝试让程序使用颜色检测并检查一个单独的看不见的板,看看我是否还在路上。这是迄今为止失败最多的。看起来这将是最聪明的,但边角太小了,很难通过调整图像来修复。

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

最佳答案

存储“老派”游戏板的典型方法是使用charint 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com