首先,我是 Java 编程的初学者。我想申请学校项目。我决定做一个棋盘游戏!很直接。![Board][1] 这是棋盘,有两个玩家(Both Human)。第一个玩家(x)将在棋盘上的任何位置移动。他有 9 个名额。
游戏的动机是将所有三个标记对角线、水平线或垂直线放在一条线上。
![获胜条件][2] 我想要算法来检查获胜者以及如何在用户移动时从用户那里挑选价值。我浏览了很多井字游戏算法,但我不知道它们出了什么问题。![可能的动作][3]请帮助!
首先,我是 Java 编程的初学者。我想申请学校项目。我决定做一个棋盘游戏!很直接。![Board][1] 这是棋盘,有两个玩家(Both Human)。第一个玩家(x)将在棋盘上的任何位置移动。他有 9 个名额。
游戏的动机是将所有三个标记对角线、水平线或垂直线放在一条线上。
![获胜条件][2] 我想要算法来检查获胜者以及如何在用户移动时从用户那里挑选价值。我浏览了很多井字游戏算法,但我不知道它们出了什么问题。![可能的动作][3]请帮助!
既然是作业,我不想只给你一个答案。另外,您并不清楚自己在挣扎什么,所以我希望这适用于您遇到的问题。编辑您的答案以使其更清晰和/或发表评论,以便所有已回答的人都可以改进他们的答案以更有效地满足您的需求。
您可以使用二维数组来存储板。在 Java 中,创建 3x3 二维数组的语法(例如,使用char
类型、存储X
或O
)如下:
char[][] board = new char[3][3];
在井字游戏中,有 8 种可能的棋盘状态表明玩家赢得了游戏(X
下面标有移动):
(1) (2) (3) (4) (5) (6) (7) (8)
X X X # # # # # # X # # # X # # # X X # # # # X
# # # X X X # # # X # # # X # # # X # X # # X #
# # # # # # X X X X # # # X # # # X # # X X # #
记住数组索引从 0 开始(一直到 2,因为我们有一个 3x3 2D 数组),这转化为以下一组条件:
(1): board[0][0] == board[0][1] && board[0][1] == board[0][2]
(2): board[1][0] == board[1][1] && board[1][1] == board[1][2]
(3): board[2][0] == board[2][1] && board[2][1] == board[2][2]
(4): board[0][0] == board[1][0] && board[1][0] == board[2][0]
(5): board[0][1] == board[1][1] && board[1][1] == board[2][1]
(6): board[0][2] == board[1][2] && board[1][2] == board[2][2]
(7): board[0][0] == board[1][1] && board[1][1] == board[2][2]
(8): board[0][2] == board[1][1] && board[1][1] == board[2][0]
如果这些单元格中的任何一个相同(并且不是空白),那么某人(或者X
或O
,取决于谁占据了这些单元格)赢得了比赛。您可能会使用循环来使此代码更紧凑。