2011-11-22 82 views
1

這是我一直在長時間工作的問題之一。這是一個PentaHexes遊戲。玩家可以選擇22個五角星中的一個,並根據他/她的需要翻轉/旋轉五角星,並將五角星放入網格中。在遊戲的兩個玩家版本中,我必須檢查遊戲結束的情況。遊戲結束時,其中一名玩家未能在網格上留下五角星。 供您參考,遊戲網格和pentaHexes顯示在第40頁。如果您檢查this link在PentaHex遊戲中結束遊戲檢查

我正在尋找一個算法來做到這一點。我可以處理編碼!

每一個五十六進制放置
及時發現網格中的所有未使用的六邊形: 我可以用這將是這樣一個強制的方法做到這一點。
檢查未使用PentaHexes,
得到PentaHex的格局,
檢查,如果你可以把任何pentaHex對電網,
如果是,
比賽還沒有結束。
如果沒有
比賽結束。

+2

你的代碼在哪裏,你是否有問題?你可以發佈你迄今爲止嘗試過的嗎? – Deco

+0

我正在尋找一個算法來做到這一點。我可以處理編碼!

每次放置五角十六進制時,
查找網格中所有未使用的六邊形。
檢查未使用PentaHexes,
得到PentaHex的格局,
檢查,如果你可以把任何pentaHex對電網,
如果是,
比賽還沒有結束。
如果沒有
遊戲結束。
AkaMu

+1

您剛剛描述了您的算法,現在您需要嘗試並實施它。一旦你這樣做了,如果你有任何問題,你可以發佈你的代碼,並提出有關它的具體問題。 – Deco

回答

1

您正在嘗試優化尚不存在的內容。

首先實現它,使用你的蠻力想法,然後當你有一些東西適合時尚時,你將會對需要發生的事情有更深的理解。這是您開始優化和改進代碼的時候。

很少有人會寫一段代碼,它在第一次迭代中是完美的。

在編碼之前不要陷入嘗試擁有完整/最終設計的陷阱。所有突發事件/問題都可以預見是非常罕見的。使用您的設計作爲指導和範圍分隔符;寫下你的第一份'草案'計劃;現在你可以調試和優化。

你可以編碼,所以你知道這是一個迭代過程。

+0

我同意這是一個迭代過程。我會先實現我的想法,然後嘗試優化。但我在這裏提出這個問題只是爲了避免錯誤的算法。 – AkaMu

2

你的問題顯然不是一個不知道如何解決問題的問題,而是一個「我該怎麼做比蠻力更好」的問題。

儘管我沒有特別研究過這個遊戲,但是在「製作拼圖合適」類中的許多類似遊戲都是組合性問題,總是會遭受一些討厭的最壞情況行爲。

如果您對這個主題還不熟悉,可以閱讀大量的文章。即使是很簡單的,看似遊戲,像掃雷和俄羅斯方塊 - 當在正式的方式看着 - 沒有(known!)完全廣義的解決方案,比蠻力顯著更好:

https://math.stackexchange.com/questions/39578/simple-real-life-np-hard-problems

一個工具,你的武器庫中有某種「側面結構」的想法。只是隨便扔一個例子(這可能不是一個好主意),你可以在每個單元上存儲一個數字,說明它可以連接多少個連接的單元。每次將棋子添加到棋盤上時,都可以從這些數字中減去以反映棋盤的新現實。然後用每個單元的連接單元的數量來標記每個單元的每個單元。這會突然讓您有能力「快速」搜索。 (例如,你不必測試任何不能達到至少4個其他細胞的細胞,因爲沒有pentahex可能適合它!)

雖然權衡總是存在於這些側面結構消耗的內存中以及保持最新狀態的時間。我非常喜歡的例子可能會比在平均五角星遊戲中節省的成本更高。所以這是否值得呢取決於你的具體情況。

對這些問題進行敏感和了解都很好,但不要讓它阻止您先編寫效率低下但「正確」的版本......然後查看您可以在何處以及如何使用優化提升。

+0

嘿..非常感謝答覆。我將首先實現並首先開始工作,然後嘗試使其更高效。非常感謝鏈接。 – AkaMu

+0

我會投票決定你的答案,但顯然我需要更多的聲譽才能做到! – AkaMu