Java实现五子棋的基础方法

2025-05-29 0 29

本文实例为大家分享了Java实现五子棋的具体代码,供大家参考,具体内容如下

任务概述:

五子棋是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜。

任务过程:

1.绘制棋盘
2.提示黑方(用 1 表示)和白方(用 2 表示)分别下棋(X,Y 轴位置)并重新绘制棋盘
3.每当一方下棋后判断是否获胜

重点讲解:

1.关于胜利的判断:

根据用户所下棋子的位置对其周围进行检测,分为以下情况:
横向:当前下棋位置左右各4颗棋子连续相同5颗
竖向:当前下棋位置上下各4颗棋子连续相同5颗
斜向:当前下棋位置左上右下各4颗棋子连续相同5颗、当前下棋位置左下右上各4颗棋子连续相同5颗
在检测时要注意数组的下标,若用户下棋位置处于棋盘边缘,则周围坐标很可能已经在棋盘之外,要注意加上相应的判断避免下标越界!

2.关于棋盘下满:

我的思路是,先认为棋盘已经下满,然后在打印棋盘的同时,若当前打印值为0,则认为棋盘未满,可继续下棋操作,若棋盘已经打印完毕,仍然没有打印值为0的情况,则认为棋盘下满,双方平局,游戏结束。

其余内容在代码上有详细的注释,以下为代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170
import java.util.Scanner;

public class Chess {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

int order = 1;//储存顺序,当order为1时轮到黑方下棋,当order为2时轮到白方下棋

int row = 0;//用来储存要下棋的行数

int column = 0;//用来储存要下棋的列数

int win = 0;//用来储存获胜者编号,为0则双方均未获胜,为1则白方获胜,为2则黑方获胜

int count1 = 0;//用来储存当前下棋位置左右各4颗棋子的相同数量

int count2 = 0;//用来储存当前下棋位置上下各4颗棋子的相同数量

int count3 = 0;//用来储存当前下棋位置左上右下各4颗棋子的相同数量

int count4 = 0;//用来储存当前下棋位置左下右上各4颗棋子的相同数量

int full = 1;//用来判断棋盘是否下满,默认值1认为已满,只要有1处空则置0

int board[][] = new int[16][16];//用来记录棋盘

//为棋盘的坐标赋值

for(int i = 0;i<16;i++) {

board[i][0] = i;//为棋盘的Y轴赋值

}

for(int j = 0;j<16;j++) {

board[0][j] = j;//为棋盘的X轴赋值

}

//开始下棋,无限循环直到有一方胜利或棋盘下满

while(true) {

//首先输出棋盘

for(int i = 0;i<16;i++) {

for(int j = 0;j<16;j++) {

if(board[i][j] == 0)//若棋盘有1处空则认为棋盘未满

full = 0;

System.out.print(board[i][j]+"\\t");

}

System.out.println();

}

//然后判断棋盘是否下满

if(full == 1) {//棋盘自始至终未有空值,则认为棋盘已经下满

System.out.print("棋盘已下满,双方平局,游戏结束!");

break;//跳出循环

}

//棋盘未满,进入下棋过程

if(order == 1) {//order为1黑方下棋

order = 2;//切换order,下一次则白方下棋

//无限循环直到下棋点可以正常下棋

while(true) {

System.out.println("请黑方下棋,请先输入X轴位置(列数,1-15):");

column = scanner.nextInt();//储存要下棋的列数

System.out.println("请黑方下棋,请输入Y轴位置(行数,1-15):");

row = scanner.nextInt();//储存要下棋的行数

if(board[row][column] != 0)//下棋点已有棋子,需重新下棋

System.out.println("此次下棋无效,请重新下棋!");

else {

board[row][column] = 1;//放置黑棋

break;//跳出循环

}

}

}

else {//order为2白方下棋

order = 1;//切换order,下一次则黑方下棋

//无限循环直到下棋点可以正常下棋

while(true) {

System.out.println("请白方下棋,请先输入X轴位置(列数,1-15):");

column = scanner.nextInt();//储存要下棋的列数

System.out.println("请白方下棋,请输入Y轴位置(行数,1-15):");

row = scanner.nextInt();//储存要下棋的行数

if(board[row][column] != 0)//下棋点已有棋子,需重新下棋

System.out.println("此次下棋无效,请重新下棋!");

else {

board[row][column] = 2;//放置白棋

break;//跳出循环

}

}

}

//本次下棋完毕,判断是否有人获胜

for(int i = -4;i < 4;i++) {

//判断当前下棋位置左右各4颗棋子的相同数量,连续4组相同则获胜

if(column+i>0 && column+i+1<16) {//防止下标越界

if(board[row][column+i] == board[row][column+i+1] && board[row][column+i] != 0) {

count1++;

if(count1 == 4) {//连续4组相同,获胜

win = order;

break;

}

}

else

count1 = 0;//未连续相同,清除相同计数

}

//判断当前下棋位置上下各4颗棋子的相同数量,连续4组相同则获胜

if(row+i>0 && row+i+1<16) {//防止下标越界

if(board[row+i][column] == board[row+i+1][column] && board[row+i][column] != 0) {

count2++;

if(count2 == 4) {//连续4组相同,获胜

win = order;

break;

}

}

else

count2 = 0;//未连续相同,清除相同计数

}

//判断当前下棋位置左上右下各4颗棋子的相同数量,连续4组相同则获胜

if(column+i>0 && column+i+1<16 && row+i>0 && row+i+1<16) {//防止下标越界

if(board[row+i][column+i] == board[row+i+1][column+i+1] && board[row+i][column+i] != 0) {

count3++;

if(count3 == 4) {//连续4组相同,获胜

win = order;

break;

}

}

else

count3 = 0;//未连续相同,清除相同计数

}

//判断当前下棋位置左下右上各4颗棋子的相同数量,连续4组相同则获胜

if(column+i>0 && column+i+1<16 && row-i-1>0 && row-i<16) {//防止下标越界

if(board[row-i][column+i] == board[row-i-1][column+i+1] && board[row-i][column+i] != 0) {

count4++;

if(count4 == 4) {//连续4组相同,获胜

win = order;

break;

}

}

else

count4 = 0;//未连续相同,清除相同计数

}

}

//有人获胜,输出棋盘及获胜者,跳出循环

if(win == 2) {//由于win是order的值,order轮到白方,说明黑方获胜

//输出棋盘

for(int i = 0;i<16;i++) {

for(int j = 0;j<16;j++) {

System.out.print(board[i][j]+"\\t");

}

System.out.println();

}

System.out.println("恭喜黑方获胜,游戏结束!");

break;//跳出循环

}

else if(win == 1) {//由于win是order的值,order轮到黑方,说明白方获胜

//输出棋盘

for(int i = 0;i<16;i++) {

for(int j = 0;j<16;j++) {

System.out.print(board[i][j]+"\\t");

}

System.out.println();

}

System.out.println("恭喜白方获胜,游戏结束!");

break;//跳出循环

}

//无人获胜,清除相同棋子计数,开始新循环

count1 = 0;

count2 = 0;

count3 = 0;

count4 = 0;

full = 1;//再次认为棋盘已满

}

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:https://blog.csdn.net/qq_35221384/article/details/108347818

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Java实现五子棋的基础方法 https://www.kuaiidc.com/118227.html

相关文章

发表评论
暂无评论