作者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
推 willhunting:也許可考慮看看dynamic programming 10/14 07:42
推 TonyQ:java Main (不用.class ) 10/14 10:12
推 H45:給鬼一個方向,他就不會隨便回頭 10/14 14:07
推 teman:我覺得前面幾位大大有提到 不需要用到特別的最短路徑去算 10/14 19:17
→ teman:1.遊戲一下子就結束了 2.早期電腦運算不會想浪費太多效能 10/14 19:19
→ teman:我猜用以前玩的經驗 他只在交叉入口下不同機率就行了 10/14 19:21
→ teman:到後期人走過的路口的機率在隨機變高點 速度變快就容易死了 10/14 19:24
→ teman:不過還是要實際作過才知道... 10/14 19:26
推 Lordaeron:隨機和直線追合起來就好了. 隨機在遇到路口, 直線上有 10/15 00:37
→ Lordaeron:PacMan 就追, 路口遇到pacman 的方向追, 就這樣就好了 10/15 00:39
推 Racci:咦. 沒想到直線追合這個Idea, 感謝分享!! 10/15 12:22
推 Lordaeron:看來你是沒看推文的習慣 10/16 06:14
推 Jimmy0821:版眾好熱情XDDD 也提醒了不少,好久沒有寫遊戲了呀!XD 10/18 11:54