2014-06-08 195 views
0

考慮一個方陣,所有插槽都用零填充。這將是戰場。現在,爲了放置船隻,我通過放置1來表示。一艘船的尺寸可以是1,2,3,也就是說兩個或三個連續的方塊應該是1.它們也可以是水平的或垂直的。現在,敵人搜尋我的戰艦的最佳策略是什麼?他不知道我是如何放置我的船。搜索矩陣有什麼好的策略?或者在做出「聰明動作」時,如何讓CPU成爲更好的玩家?戰場 - 棋盤遊戲策略

  1. 搜索隨機
  2. 搜索,當你發現一個攻擊相鄰塊來檢查它是否大小2/3的船。
  3. 此外,CPU的初始定位可以基於之前的獲勝位置,而不僅僅基於隨機數。
  4. 其他想法..... ??

這個想法可以擴展到20 x 20矩陣的多船遊戲。一個例子如下。

0 0 0 0 0 0 
0 1 0 0 0 0 
0 0 0 1 1 0 
0 1 0 0 0 0 
0 1 0 0 0 0 
0 1 0 0 0 0 

任何幫助將不勝感激!

+0

什麼問題? – bytefire

+0

剛做了必要的編輯 - 謝謝@bytefire –

回答

0

因爲你有一艘大小爲1的船,你基本上需要枚舉所有的領域,並檢查鄰居的大船。您可以通過使用特定的順序一樣,通過所有的行會節省一些工作:

1 2 3 4 5 6 
7 8 9 10 11 12 
13 ... 

如果檢測到更大的船隻,你檢查以下兩個右字段(如果不是出界,你檢查的第一個領域,如果它是一艘船的一部分,那麼你檢查第二)以及兩個底部字段(再次邊界檢查)。使用該遍歷,可以確保從不檢查左側和頂部字段以獲取更大的船。當你檢查更大的船隻時,你應該記住你已經訪問過多少個職位,並在移動後跳過這些職位。

這只是一個建議,是相對有效的。使用一些內存使用情況後,您可以在檢查底部後避免雙重訪問字段,但這不會導致在現實生活中取得成功。

+0

謝謝@Ivaylo Toskov。是的,我通過枚舉這樣的方塊來完成這個實現。這確實是一種天真的方法的改進。但我期望利用一些數據結構來真正提高性能。我摔倒了,我仍然錯過了一些非常有效的東西。 –

+0

沒有辦法顯着提高性能。這是因爲你擁有單一艦隊,這基本上意味着你需要枚舉所有的領域,除了這麼小的調整之外,沒有「超高效」的方法去做。事實上,使用數據結構實際上可能會降低性能,因爲如果數據結構中存在數據結構,您將不得不檢查每個字段,但您可以基本上爲鄰居做到這一點,但僅限於某些字段。 –

+0

聲音有效。有關如何讓CPU播放器更智能的建議?我的意思是,讓它更好地猜測,以更加計算的方式? –