2015-04-02 171 views
0

我一直在努力提高自己的Java技能,並決定創建一個Noughts和Crosses遊戲。我試圖實現獲勝條件,所以遊戲可以判斷「ai」或人類是否贏得了勝利,並結束遊戲。搜索字典

數據作爲鍵值對存儲在HashMap中。整數是位置,字符串就是它所包含的。字符串將是"","O""X"

整數,表示職位:

1 2 3 
4 5 6 
7 8 9 

代碼顯示數據庫初始化:

Map<Integer, String> database = new HashMap<Integer, String>(); 

無論如何,我試圖找出通過這本詞典搜索最好的辦法,檢查看到任何的以下贏條件:

  • 3 「O」 或 「X」 的字符串中的位置1,2,3 < --Horizo​​ntally
  • 3 「O」 或 「X」 中的位置4字符串,5,6 < --Horizo​​ntally
  • 3 「O」 或 「X」 的字符串中的位置7,8,9 < --Horizo​​ntally
  • 3 「O」 或在第1位的 「X」 的字符串,4,7 < --Vertically
  • 3 「O」 或 「X」 的字符串中的位置2,5,8 < --Vertically
  • 3位置3,6,9中的「O」或「X」字符串< - 垂直
  • 位置1,5,9中的3「O」或「X」字符串< --Diagonally
  • 3 「O」 或 「X」 的字符串中的位置3,5,7 < --Diagonally

請問我有if語句做一個大的嵌套,或者盒套裝,或者是有什麼辦法可以更有效地循環這個?

+0

是不是'不存在'和十字架? – Kayaman 2015-04-02 09:40:35

+0

用正確的拼寫更新,歡呼聲。 – 2015-04-02 09:41:47

+0

你想要它有多高效?你的性能要求是什麼?你真的認爲這對9件物品很重要嗎?你有什麼嘗試?速度慢嗎? – 2015-04-02 09:43:02

回答

1

地圖是一個相當奇怪的選擇,但它無論如何都會工作。您可以將所有獲獎組合存儲爲3個數字,就像您已經擁有的那樣,然後遍歷它們,檢查索引中的所有三個值是否匹配。然後通過檢查任何這些值來確定誰贏了。

我建議創建一個checkWin(int[] indexes)方法,它將檢查所有3個索引,並返回它們是否匹配的真/假。然後通過所有預先製作的獲勝組合循環檢查勝利。