【发布时间】:2015-04-02 09:36:29
【问题描述】:
我一直在努力提高我的 Java 技能,并决定创建一个 Noughts and Crosses 游戏。我正在尝试实现获胜条件,因此游戏可以判断“ai”或人类是否获胜,并结束游戏。
数据作为键值对存储在 HashMap 中。整数是位置,字符串是它包含的内容。该字符串将为""、"O" 或"X"。
表示位置的整数:
1 2 3
4 5 6
7 8 9
显示数据库初始化的代码:
Map<Integer, String> database = new HashMap<Integer, String>();
无论如何,我正在尝试找出在这本词典中搜索的最佳方法,检查以下任何获胜条件:
- 位置 1、2、3 中的 3 个“O”或“X”字符串
- 3 个“O”或“X”字符串在位置 4、5、6
- 3 个“O”或“X”字符串在位置 7、8、9
- 位置 1、4、7 中的 3 个“O”或“X”字符串
- 位置 2、5、8 中的 3 个“O”或“X”字符串
- 3、6、9 位置的 3 个 "O" 或 "X" 字符串
- 位置 1、5、9 中的 3 个“O”或“X”字符串
- 3、5、7 位上的 3 个 "O" 或 "X" 字符串
我是否必须做一个大型的嵌套 if 语句或案例集,或者有什么方法可以更有效地循环这些?
【问题讨论】:
-
这不是
Noughts和十字架吗? -
更新了正确的拼写,干杯。
-
您希望它的效率如何?你的性能要求是什么?你真的认为这对 9 个项目很重要吗?你试过什么?很慢吗?
-
Map是一个相当奇怪的选择,但无论如何它都会起作用。您可以将所有获胜组合存储为 3 个数字,就像您已经拥有的一样,然后遍历它们,检查索引中的所有三个值是否匹配。然后通过检查任何这些值来确定谁赢了。我建议创建一个checkWin(int[] indexes)方法,该方法将检查所有 3 个索引并在它们是否匹配时返回真/假。 -
您还可以为板上的所有字段赋值。如果 X,则为 1,如果 O,则为 -1,如果为空,则为 0。然后在每转一圈后,计算行、列和对角线上的值,看看是否有-3或+3的值。
标签: java for-loop dictionary hashmap