簡體   English   中英

Java中的吃豆人迷宮

[英]Pacman maze in Java

所以我在 Java 中構建 pacman 游戲來自學游戲編程。

我有基本游戲 window 與 pacman sprite 和 ghost sprites 繪制,pacman 用箭頭鍵移動,不會超出 window 等的牆壁。現在我正在嘗試構建迷宮,就像在這個圖片:

吃豆人迷宮

如果沒有給我直接/完整的解決方案,有人可以指導我如何構建它嗎? 我在這里只談論邊界和管道('T'標記),你不能通過 go 並且你必須在 go 周圍。 不是吃豆人吃的那些點。

以下是我的問題:

1)創建這個迷宮最有效的算法/方法是什么? 每次調用paint()方法時都必須繪制它,還是有辦法只在游戲開始時繪制它而不再繪制?

2)這將如何實際繪制到屏幕上? 我假設將使用fillRect()

3) 任何有關碰撞檢測的提示(因此 pacman/ghosts 不能 go 穿過牆壁)會有所幫助。

4)關於如何計算管道之間的空白空間以便在它們之間填充點的任何提示也將非常有幫助。

謝謝

我不會那樣做的。

我將繪制圖形 map,然后創建一個代表 map 的二維數據數組。 數據 map 將負責確定碰撞、吃點、糖果在哪里以及鬼魂在哪里。 處理完所有內容的所有邏輯后,只需使用 2D 數組在圖形 map 上以正確的像素坐標顯示所有內容。

例如,用戶正在按下左鍵。 首先,您確定 pacman 位於元素 3、3。元素 3、2 包含表示牆壁的信息,因此您可以執行代碼以使他忽略該命令。

編輯:

每個元素將代表一個點可能在哪里。 例如:

不,看着板我會說陣列看起來像這樣。

d,d,d,d,d,d,d,d,d,d,d,d,w,w,d,d,d,d,d,d,d,d,d,d,d,d
d,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,d
p,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,p    
d,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,d    
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d

等等。 但是,您可能希望選擇一個比字符更靈活的數據結構,因為某些區域需要包含一堆不同的信息。 IE 即使幽靈生成區域是空白的,pacman 也不允許在那里。 側逃生的鬼魂和吃豆人的移動是不同的,糖果生成點是一個空白點,但如果你想保持靈活,你需要在每個 map 的基礎上指出它的位置。

您需要記住的另一件事是 pacman 和幽靈通常位於點之間,因此包含代表它們在 1,2 和 1,3 之間占用的空間百分比的信息對於碰撞檢測和確定很重要當您想從板上移除點、通電和糖果時。

這里給你一個提示:

替代文字 http://www.freeimagehosting.net/uploads/66e4131f59.jpg

正確使用此提示將允許您處理渲染和碰撞檢測,並且還允許您以緊湊的方式表示迷宮。

  1. 您可以將 map 繪制到 BufferedImage 中,然后在每個paint() 上繪制該圖像。 通過這種方式,您將獲得相當合理的性能。

  2. 如果您對實心牆感到滿意,您可以使用 fillRect 繪制每個方形牆塊。 如果您希望獲得與圖片相同的外觀,您需要弄清楚如何以正確的方式繪制線條並使用弧線作為角落。

  3. Pacman 游戲 map 由正方形組成,Pacman 和幽靈總是以動畫的方式從一個正方形移動到相鄰的正方形(即您按右,吃豆人向右移動一格)。 這意味着碰撞檢測很容易:只是不允許移動到非空方格。

  4. 我不明白你想在這里問什么。

1)只是為了給我關於重繪的建議。 如果您發現重繪整個圖像很慢,您可以做的事情是僅確定屏幕上已更改的元素並重繪這些元素。 一種方法如下: 確定已移動的精靈。 確定(近似)圍繞這些精靈的矩形。 僅重繪這些矩形。 這樣你只刷新屏幕的一部分而不是整個屏幕。 與重繪整個屏幕相比,這應該會提高性能。

對於您提出的其他問題,其他答案是合理的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM