激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Java實(shí)現(xiàn)五子棋的基礎(chǔ)方法

Java實(shí)現(xiàn)五子棋的基礎(chǔ)方法

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

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

本文實(shí)例為大家分享了Java實(shí)現(xiàn)五子棋的具體代碼,供大家參考,具體內(nèi)容如下

任務(wù)概述:

五子棋是全國(guó)智力運(yùn)動(dòng)會(huì)競(jìng)技項(xiàng)目之一,是一種兩人對(duì)弈的純策略型棋類(lèi)游戲。通常雙方分別使用黑白兩色的棋子,下在棋盤(pán)直線(xiàn)與橫線(xiàn)的交叉點(diǎn)上,先形成五子連線(xiàn)者獲勝。

任務(wù)過(guò)程:

1.繪制棋盤(pán)
2.提示黑方(用 1 表示)和白方(用 2 表示)分別下棋(X,Y 軸位置)并重新繪制棋盤(pán)
3.每當(dāng)一方下棋后判斷是否獲勝

重點(diǎn)講解:

1.關(guān)于勝利的判斷:

根據(jù)用戶(hù)所下棋子的位置對(duì)其周?chē)M(jìn)行檢測(cè),分為以下情況:
橫向:當(dāng)前下棋位置左右各4顆棋子連續(xù)相同5顆
豎向:當(dāng)前下棋位置上下各4顆棋子連續(xù)相同5顆
斜向:當(dāng)前下棋位置左上右下各4顆棋子連續(xù)相同5顆、當(dāng)前下棋位置左下右上各4顆棋子連續(xù)相同5顆
在檢測(cè)時(shí)要注意數(shù)組的下標(biāo),若用戶(hù)下棋位置處于棋盤(pán)邊緣,則周?chē)鴺?biāo)很可能已經(jīng)在棋盤(pán)之外,要注意加上相應(yīng)的判斷避免下標(biāo)越界!

2.關(guān)于棋盤(pán)下滿(mǎn):

我的思路是,先認(rèn)為棋盤(pán)已經(jīng)下滿(mǎn),然后在打印棋盤(pán)的同時(shí),若當(dāng)前打印值為0,則認(rèn)為棋盤(pán)未滿(mǎn),可繼續(xù)下棋操作,若棋盤(pán)已經(jīng)打印完畢,仍然沒(méi)有打印值為0的情況,則認(rèn)為棋盤(pán)下滿(mǎn),雙方平局,游戲結(jié)束。

其余內(nèi)容在代碼上有詳細(xì)的注釋?zhuān)韵聻榇a:

?
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;//儲(chǔ)存順序,當(dāng)order為1時(shí)輪到黑方下棋,當(dāng)order為2時(shí)輪到白方下棋
 int row = 0;//用來(lái)儲(chǔ)存要下棋的行數(shù)
 int column = 0;//用來(lái)儲(chǔ)存要下棋的列數(shù)
 int win = 0;//用來(lái)儲(chǔ)存獲勝者編號(hào),為0則雙方均未獲勝,為1則白方獲勝,為2則黑方獲勝
 int count1 = 0;//用來(lái)儲(chǔ)存當(dāng)前下棋位置左右各4顆棋子的相同數(shù)量
 int count2 = 0;//用來(lái)儲(chǔ)存當(dāng)前下棋位置上下各4顆棋子的相同數(shù)量
 int count3 = 0;//用來(lái)儲(chǔ)存當(dāng)前下棋位置左上右下各4顆棋子的相同數(shù)量
 int count4 = 0;//用來(lái)儲(chǔ)存當(dāng)前下棋位置左下右上各4顆棋子的相同數(shù)量
 int full = 1;//用來(lái)判斷棋盤(pán)是否下滿(mǎn),默認(rèn)值1認(rèn)為已滿(mǎn),只要有1處空則置0
 int board[][] = new int[16][16];//用來(lái)記錄棋盤(pán)
 
 //為棋盤(pán)的坐標(biāo)賦值
 for(int i = 0;i<16;i++) {
  board[i][0] = i;//為棋盤(pán)的Y軸賦值
 }
 for(int j = 0;j<16;j++) {
  board[0][j] = j;//為棋盤(pán)的X軸賦值
 }
 
 //開(kāi)始下棋,無(wú)限循環(huán)直到有一方勝利或棋盤(pán)下滿(mǎn)
 while(true) {
  
  //首先輸出棋盤(pán)
  for(int i = 0;i<16;i++) {
  for(int j = 0;j<16;j++) {
   if(board[i][j] == 0)//若棋盤(pán)有1處空則認(rèn)為棋盤(pán)未滿(mǎn)
   full = 0;
   System.out.print(board[i][j]+"\t");
  }
  System.out.println();
  }
  
  //然后判斷棋盤(pán)是否下滿(mǎn)
  if(full == 1) {//棋盤(pán)自始至終未有空值,則認(rèn)為棋盤(pán)已經(jīng)下滿(mǎn)
  System.out.print("棋盤(pán)已下滿(mǎn),雙方平局,游戲結(jié)束!");
  break;//跳出循環(huán)
  }
  
  //棋盤(pán)未滿(mǎn),進(jìn)入下棋過(guò)程
  if(order == 1) {//order為1黑方下棋
  order = 2;//切換order,下一次則白方下棋
  //無(wú)限循環(huán)直到下棋點(diǎn)可以正常下棋
  while(true) {
   System.out.println("請(qǐng)黑方下棋,請(qǐng)先輸入X軸位置(列數(shù),1-15):");
   column = scanner.nextInt();//儲(chǔ)存要下棋的列數(shù)
   System.out.println("請(qǐng)黑方下棋,請(qǐng)輸入Y軸位置(行數(shù),1-15):");
   row = scanner.nextInt();//儲(chǔ)存要下棋的行數(shù)
   if(board[row][column] != 0)//下棋點(diǎn)已有棋子,需重新下棋
   System.out.println("此次下棋無(wú)效,請(qǐng)重新下棋!");
   else {
   board[row][column] = 1;//放置黑棋
   break;//跳出循環(huán)
   }
  }
  }
  else {//order為2白方下棋
  order = 1;//切換order,下一次則黑方下棋
  //無(wú)限循環(huán)直到下棋點(diǎn)可以正常下棋
  while(true) {
   System.out.println("請(qǐng)白方下棋,請(qǐng)先輸入X軸位置(列數(shù),1-15):");
   column = scanner.nextInt();//儲(chǔ)存要下棋的列數(shù)
   System.out.println("請(qǐng)白方下棋,請(qǐng)輸入Y軸位置(行數(shù),1-15):");
   row = scanner.nextInt();//儲(chǔ)存要下棋的行數(shù)
   if(board[row][column] != 0)//下棋點(diǎn)已有棋子,需重新下棋
   System.out.println("此次下棋無(wú)效,請(qǐng)重新下棋!");
   else {
   board[row][column] = 2;//放置白棋
   break;//跳出循環(huán)
   }
  }
  }
  
  //本次下棋完畢,判斷是否有人獲勝
  for(int i = -4;i < 4;i++) {
  
  //判斷當(dāng)前下棋位置左右各4顆棋子的相同數(shù)量,連續(xù)4組相同則獲勝
  if(column+i>0 && column+i+1<16) {//防止下標(biāo)越界
   if(board[row][column+i] == board[row][column+i+1] && board[row][column+i] != 0) {
   count1++;
   if(count1 == 4) {//連續(xù)4組相同,獲勝
    win = order;
    break;
   }
   }
   else
   count1 = 0;//未連續(xù)相同,清除相同計(jì)數(shù)
  }
  
  //判斷當(dāng)前下棋位置上下各4顆棋子的相同數(shù)量,連續(xù)4組相同則獲勝
  if(row+i>0 && row+i+1<16) {//防止下標(biāo)越界
   if(board[row+i][column] == board[row+i+1][column] && board[row+i][column] != 0) {
   count2++;
   if(count2 == 4) {//連續(xù)4組相同,獲勝
    win = order;
    break;
   }
   }
   else
   count2 = 0;//未連續(xù)相同,清除相同計(jì)數(shù)
  }
  
  //判斷當(dāng)前下棋位置左上右下各4顆棋子的相同數(shù)量,連續(xù)4組相同則獲勝
  if(column+i>0 && column+i+1<16 && row+i>0 && row+i+1<16) {//防止下標(biāo)越界
   if(board[row+i][column+i] == board[row+i+1][column+i+1] && board[row+i][column+i] != 0) {
   count3++;
   if(count3 == 4) {//連續(xù)4組相同,獲勝
    win = order;
    break;
   }
   }
   else
   count3 = 0;//未連續(xù)相同,清除相同計(jì)數(shù)
  }
  
  //判斷當(dāng)前下棋位置左下右上各4顆棋子的相同數(shù)量,連續(xù)4組相同則獲勝
  if(column+i>0 && column+i+1<16 && row-i-1>0 && row-i<16) {//防止下標(biāo)越界
   if(board[row-i][column+i] == board[row-i-1][column+i+1] && board[row-i][column+i] != 0) {
   count4++;
   if(count4 == 4) {//連續(xù)4組相同,獲勝
    win = order;
    break;
   }
   }
   else
   count4 = 0;//未連續(xù)相同,清除相同計(jì)數(shù)
  }
  
  }
  
  //有人獲勝,輸出棋盤(pán)及獲勝者,跳出循環(huán)
  if(win == 2) {//由于win是order的值,order輪到白方,說(shuō)明黑方獲勝
  //輸出棋盤(pán)
  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("恭喜黑方獲勝,游戲結(jié)束!");
  break;//跳出循環(huán)
  }
  else if(win == 1) {//由于win是order的值,order輪到黑方,說(shuō)明白方獲勝
  //輸出棋盤(pán)
  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("恭喜白方獲勝,游戲結(jié)束!");
  break;//跳出循環(huán)
  }
  
  //無(wú)人獲勝,清除相同棋子計(jì)數(shù),開(kāi)始新循環(huán)
  count1 = 0;
  count2 = 0;
  count3 = 0;
  count4 = 0;
  full = 1;//再次認(rèn)為棋盤(pán)已滿(mǎn)
 
 }
 }
 
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久伊人精品视频 | 日本视频在线播放 | 国产99久久 | 91社| 欧美高清另类自拍视频在线看 | 亚洲91在线 | 欧美性成人 | 毛片大全在线观看 | 久久久一区二区三区四区 | 欧美久久一区 | 亚洲第一成av人网站懂色 | 日美av在线 | 久久精品视频6 | 久久久久久艹 | 日本aaaa片毛片免费观看视频 | 国产三级午夜理伦三级 | 87成人免费看片 | 国产精品亚洲一区二区三区久久 | 黄污在线观看 | 久久久久久免费 | 国产精彩视频在线 | 欧美爱爱视频免费看 | 国产papa| 亚洲国产成人久久成人52 | 一区二区三区欧美在线观看 | 国内精品伊人久久 | 欧美日韩在线视频一区 | 国产精品一区二区三区在线看 | 日本一区二区三区精品 | 二区三区四区 | 欧美性受ⅹ╳╳╳黑人a性爽 | 亚洲欧美一区二区三区在线观看 | 精品久久中文网址 | 欧美一级小视频 | 春光影院理论片 | 人人看人人舔 | 日韩美香港a一级毛片免费 日韩激情 | 福利在线国产 | 国产精品成人久久久久a级 欧美特黄一级高清免费的香蕉 | 精品一区二区三区在线观看国产 | av成人免费观看 |