java實(shí)現(xiàn)四子棋游戲
非常簡(jiǎn)單的四子棋游戲
本人是剛學(xué)java的小白,最近在書(shū)上看到了有關(guān)四子棋游戲的編程題,就試著來(lái)寫(xiě)一寫(xiě),代碼也比較簡(jiǎn)單。
思路
寫(xiě)四子棋的難點(diǎn)是如何判斷四個(gè)棋子連在一起。
下面給出圖解:

觀察上圖,先從落棋點(diǎn)開(kāi)始,設(shè)置一個(gè)計(jì)數(shù)器 i ,并初始化它為1,像左端移動(dòng),遇到的是跟落棋點(diǎn)相同顏色的棋子,則使 i 加1,繼續(xù)向左端移動(dòng),沒(méi)有棋子,則回到落棋點(diǎn)從而向右移動(dòng),向右端移動(dòng)遇到第三個(gè)相同的棋,這時(shí)i = 3,然后繼續(xù)向右移動(dòng)遇到第四個(gè)棋子使 i = 4,到最后只要i = 4,即游戲勝利。再看下圖。

按照上面的流程,先向左邊移動(dòng),遇到?jīng)]有棋子的點(diǎn)停止后 i = 2,再向右移動(dòng),遇到不同顏色的棋子后停止,i = 3,這樣落棋點(diǎn)兩邊方向判斷結(jié)束后,i < 4即游戲繼續(xù)。
總結(jié)
判斷游戲是否勝利,就是從棋子落點(diǎn)兩個(gè)相反的方向,遇到相同的棋子使計(jì)數(shù)器數(shù)值加1,遇到無(wú)棋或顏色不同就結(jié)束向另一個(gè)方向,直到遇到無(wú)棋子和不同顏色的棋子,然后判斷計(jì)數(shù)器是否為4。在四子棋中有7個(gè)方向需要判斷。
import java.util.Scanner;/** * * * 玩法:1.跟五子棋玩法差不多,只是少一顆子,下棋只能選擇每列下在每列棋子上面一格。 * 2.棋子分為黃、紅,執(zhí)黃先行。 * 3.勝利條件跟五子棋一樣,就是少一顆子。 */class Desk { //棋桌類(lèi) private char[][] date = new char[6][7]; private Scanner scanner = new Scanner(System.in) ; private int hand = 1 ; //畫(huà)出整個(gè)棋盤(pán)以及上面的棋子 public void draw() { for (int i = 0; i < this.date.length; i++) { System.out.print('|'); for (int j = 0; j < this.date[i].length; j++) { System.out.print(this.date[i][j] + '|'); } System.out.println(); } if (this.hand % 2 == 1) { System.out.print('現(xiàn)在是第' + this.hand + '手,輪到黃棋: '); playchess(’Y’); } else { System.out.print('現(xiàn)在是第' + this.hand + '手,輪到紅棋: ') ; playchess(’R’); } } //控制落子 public void playchess(char color) { this.hand ++; int place = scanner.nextInt() ; int i ; for (i = 5; i >= 0; i--) { // if (date[i][place] == ’u0000’) { date[i][place] = color; break; } } if (i < 0)System.exit(1); else win(i, place, color) ; } //判斷游戲是否有人勝利或平局(依據(jù)是根據(jù)落子位置的兩個(gè)方向是否連成四子) public void win(int x, int place,char color) { int number = 1; //第一個(gè)方向(右斜線(xiàn)方向) for (int i = x - 1, j = place - 1; (i >= 0) && (j >= 0); i--, j--) { if (date[i][j] == color) { number++; } else break; } for (int i = x + 1, j = place + 1; (i <= 5) && (j <= 6); i++, j++) { if (date[i][j] == color) { number ++ ; } else break; } if (number == 4)end(color, 'win'); //第二個(gè)方向(左斜線(xiàn)方向) number = 1; for (int i = x - 1, j = place + 1; (i >= 0) && (j <= 6); i--, j++) { if (date[i][j] == color) { number++; } else break; } for (int i = x + 1, j = place - 1; (i <= 5) && (j >= 0); i++, j--) { if (date[i][j] == color) { number ++ ; } else break; } if (number == 4)end(color, 'win'); //第三個(gè)方向(水平) number = 1; for (int i = x, j = place - 1; j >= 0; j--) { if (date[i][j] == color) { number ++ ; } else break ; } for (int i = x, j = place + 1; j <= 6; j++) { if (date[i][j] == color) { number ++ ; } else break; } if (number == 4)end(color, 'win'); //第四個(gè)方向(豎直) number = 1; for (int i = x + 1, j = place; i <= 5; i++) { if (date[i][j] == color) { number ++ ; } else break; } if (number == 4)end(color, 'win') ; //判斷平局 for (int i = 0; i < date.length; i++) { for (int j = 0; j < date[i].length; j++) { if (date[i][j] != ’Y’ || date[i][j] != ’R’)draw() ; } } end(color, 's') ; } //判斷游戲是否結(jié)束 public void end(char color, String str) { if (str.equals('win')) { System.out.print(color + '棋獲得勝利!!!'); System.exit(0); } else { System.out.print('兩棋子平局.') ; System.exit(0); } }}public class ChessOffour { public static void main(String[] args) { Desk desk = new Desk() ; desk.draw() ; }}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. asp文件用什么軟件編輯2. PHP基礎(chǔ)之生成器4——比較生成器和迭代器對(duì)象3. CentOS郵箱服務(wù)器搭建系列——SMTP服務(wù)器的構(gòu)建( Postfix )4. Docker 啟動(dòng)Redis 并設(shè)置密碼的操作5. ASP新手必備的基礎(chǔ)知識(shí)6. Vue axios獲取token臨時(shí)令牌封裝案例7. vue+element開(kāi)發(fā)一個(gè)谷歌插件的全過(guò)程8. Spring如何替換掉默認(rèn)common-logging.jar9. 利用CSS制作3D動(dòng)畫(huà)10. JAVA 實(shí)現(xiàn)延遲隊(duì)列的方法

網(wǎng)公網(wǎng)安備