一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java實現五子棋的基礎方法

Java實現五子棋的基礎方法

2020-09-04 00:20MSJ_743579531 Java教程

這篇文章主要為大家詳細介紹了Java實現五子棋的基礎方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了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;//再次認為棋盤已滿
 
 }
 }
 
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 九9热这里真品 | 成人一区二区丝袜美腿 | 禁忌第一季第3季 | 校花被吃奶还摸下面 | 99久久精品国产免费 | 欧美大美bbb和大白屁股 | free性俄罗斯护士 | 亚洲码和乱人伦中文一区 | 久久国产精品永久免费网站 | 久久国产免费 | 男人女人日皮 | 色综合网亚洲精品久久 | 91天堂素人| 国产亚洲精品aaa大片 | 无限资源在线观看高清 | 欧美一卡二卡科技有限公司 | 国产不卡视频 | 日本h乱淫动漫在线观看 | 国产亚洲精品第一综合另类 | 精品国产日韩亚洲一区在线 | tube日本高清老少配 | 欧美日韩一区二区三区免费不卡 | 国产福利不卡视频在免费 | 亚洲精品成人a | 奇米网在线| 国产网站免费观看 | 精品无码国产AV一区二区三区 | 日本另类z0zx高清 | www日本在线观看 | 欧美人伦禁忌.5 | daring国家队在线观看樱花动漫 | 国产精品久久毛片完整版 | 国产喂奶300部 | 好大好硬抽搐好爽想要 | 免费一看一级欧美 | 校园春色偷拍自拍 | 亚洲激情久久 | 亚洲偷窥图区色 | 5g影院天天5g爽天天看 | 久草在线精彩免费视频 | 欧美另类变态 |