2015-04-02 107 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个索引,并返回它们是否匹配的真/假。然后通过所有预先制作的获胜组合循环检查胜利。