作者Racci (Another Day...)
看板java
标题Re: [问题] 小精灵游戏里, 如何决定Ghost的路径
时间Sun Oct 14 04:21:59 2007
先感谢大家的热情分享 没想到会有这麽多高手回应
我後来也有找出比较不会loop的版本
不过跟会追着PacMan跑的完美境界还有很大的距离 ^^"
我後来的作法是,
让Ghost Random决定的要走方向 然後去检查这个方向能不能走
不能走就重取Random.
不过这样会有一个bug, 因为上下左右 才四各方向
random的值域太小 会出现ghost先往左边走, 马上走右边
有倒退的感觉
觉得还是有点笨
所以在random值取完 我会先判断 之前走的方向 跟这次走的方向是不是相反
(表示走回头路)
ex: random说要走右, 上一次走左
就要判断上下还有左是否都不能走, 如果是 才确定走右
否则就要重取random
这样就可以大大避免走前 又马上往回走的窘境
也不会因为说不准走反方向而被困住..
至少现在看起来 ghost像是自由的到处乱跑 :p
不过我又有一个很蠢的问题
这个单机版的PacMan里面有三各class,
class MyGameEngine implements GameEngineInterface
class Ghost extends Thread
public class Main
平常都用Netbean开发
但是现在反而不知道 如果要在Command Line执行
我先执行了:
javac -classpath pacman.jar Main.java
会出现:
Ghost.class
MyGaneEngine.class
Main.class
我试过打下面的command
java Main.class
但却出现这样的error Msg:
Exception in thread "main" java.lang.NoClassDefFoundError: Main/class
不知道是否有高手愿意指点我这个笨蛋
感激不尽!
※ 引述《Lordaeron (Terry)》之铭言:
: ※ 引述《Racci (Another Day...)》之铭言:
: : As title,
: : 先简单介绍这个游戏, 英文是叫做PacMan, 也就是大家俗称的小精灵游戏
: : 在迷宫里, 有
: : 1. PacMan: 即User本身
: : 2. Jewel: 放在迷宫里的宝物
: : 3. Ghost: 在迷宫里四处移动的怪物, 如果PacMan碰到鬼, 就Game Over了..
: : 我已经做的差不多, 是StandAlone版..
: : 但是有一个很蠢的Bug..
: : Ghost移动时, 很容易跑一跑就陷入某各程度的loop, 不断循环的跑某各区域
: : 先承认我现在做的路径判断很烂..
: : 大致就是 看现在的位置 上下左右 哪各可以走 就往哪边走
: : 可能是因为上下左右判断的顺序一下 所以才会让Ghost跑一跑就开始循环
: : 在网路上找过一些资料
: : 有些人是说, 必须要找出Ghost跟PacMan之间的最短路径
: : 但是我一直不懂.. 所谓的最短路径怎麽找出来
: : 举例来说:
: : ##########
: : # #
: : # p### # #
: : # ## # #
: : # ## #
: : ##### #
: : # g # ###
: : # # ## #
: : # # # #
: : ##########
: : 从Ghost怎麽直接找shortest path去抓PacMan?
: : 在我的想法里, 不是每走一步, 才知道接下来要走哪各位置吗?
: : 在上面的例子里, PacMan在上方, 可是上面是墙, 只有左右可以走
: : Ghost怎麽知道要走左边好 还是右边比较好?
: : 问题有点复杂, 谢谢大家看完 :)
: 你该不会想古时候的电脑会使用ooxx search 来追吧?
: 你有兴趣可以拿台286 来跑看看, 保证你game 都不用玩了.
: 更别说6502了.
: 你有空去找个PACMAN来玩玩吧.
: 看看它们的反应, 猜猜就好了. 千万别想太多.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 75.7.19.19
1F:推 willhunting:也许可考虑看看dynamic programming 10/14 07:42
2F:推 TonyQ:java Main (不用.class ) 10/14 10:12
3F:推 H45:给鬼一个方向,他就不会随便回头 10/14 14:07
4F:推 teman:我觉得前面几位大大有提到 不需要用到特别的最短路径去算 10/14 19:17
5F:→ teman:1.游戏一下子就结束了 2.早期电脑运算不会想浪费太多效能 10/14 19:19
6F:→ teman:我猜用以前玩的经验 他只在交叉入口下不同机率就行了 10/14 19:21
7F:→ teman:到後期人走过的路口的机率在随机变高点 速度变快就容易死了 10/14 19:24
8F:→ teman:不过还是要实际作过才知道... 10/14 19:26
9F:推 Lordaeron:随机和直线追合起来就好了. 随机在遇到路口, 直线上有 10/15 00:37
10F:→ Lordaeron:PacMan 就追, 路口遇到pacman 的方向追, 就这样就好了 10/15 00:39
11F:推 Racci:咦. 没想到直线追合这个Idea, 感谢分享!! 10/15 12:22
12F:推 Lordaeron:看来你是没看推文的习惯 10/16 06:14
13F:推 Jimmy0821:版众好热情XDDD 也提醒了不少,好久没有写游戏了呀!XD 10/18 11:54