2012-07-29 27 views
-4

首先我是初学Java编程。我想为学校项目提出申请。我决定做一个棋盘游戏!非常直截了当。 ![董事会] [1] 这是董事会,有两个球员(都是人类)。第一名球员(x)将在棋盘上的任何位置进行移动。有9个地方可供他使用。需要一个游戏(类似于tic tac toe)算法。

游戏的动机是将所有三个令牌放在一条对角线,水平线或垂直线上。

![获胜条件] [2] 我想算法来检查赢家以及如何在移动时选择frm用户的价值。 我浏览了很多tic tac toh算法,但我不知道他们出了什么问题。 ![Posible moves] [3] 请帮忙!!

+6

这是你的哪个部分有问题?存储数据?显示用户界面?确定赢家?还有别的吗? – 2012-07-29 17:56:58

回答

3

既然是作业,我不想给你一个答案。另外,你对于你所遇到的问题并不十分清楚,所以我希望这适用于你遇到的问题。编辑您的答案,使其更清楚和/或留下评论,以便所有已回答的人都可以更有效地改进他们的答案以满足您的需求。

您可以使用二维数组来存储板。在Java中,用于创建一个3x3的二维阵列(例如,使用char类型,存储XO)的语法如下:

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的二维数组),这相当于以下一组条件:

(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] 

如果这些单元格中的任何一个相等(并且不是空白),则有人(取决于谁占用那些单元格的XO)赢得了游戏。你可以使用循环来使代码更加紧凑。

+0

因为你只能靠自己的动作赢得胜利,所以你可以搜索最后放置的令牌周围的空间。 – 2012-07-31 16:26:27