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

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

按照上面的流程,先向左邊移動,遇到?jīng)]有棋子的點(diǎn)停止后 i = 2,再向右移動,遇到不同顏色的棋子后停止,i = 3,這樣落棋點(diǎn)兩邊方向判斷結(jié)束后,i < 4即游戲繼續(xù)。
總結(jié)
判斷游戲是否勝利,就是從棋子落點(diǎn)兩個相反的方向,遇到相同的棋子使計數(shù)器數(shù)值加1,遇到無棋或顏色不同就結(jié)束向另一個方向,直到遇到無棋子和不同顏色的棋子,然后判斷計數(shù)器是否為4。在四子棋中有7個方向需要判斷。
import java.util.Scanner;
/**
*
*
* 玩法:1.跟五子棋玩法差不多,只是少一顆子,下棋只能選擇每列下在每列棋子上面一格。
* 2.棋子分為黃、紅,執(zhí)黃先行。
* 3.勝利條件跟五子棋一樣,就是少一顆子。
*/
class Desk {
//棋桌類
private char[][] date = new char[6][7];
private Scanner scanner = new Scanner(System.in) ;
private int hand = 1 ;
//畫出整個棋盤以及上面的棋子
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ù)落子位置的兩個方向是否連成四子)
public void win(int x, int place,char color) {
int number = 1;
//第一個方向(右斜線方向)
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");
//第二個方向(左斜線方向)
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");
//第三個方向(水平)
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");
//第四個方向(豎直)
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() ;
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java實戰(zhàn)之飛翔的小鳥小游戲
- Java實現(xiàn)五子棋游戲
- JAVA實現(xiàn)的CrazyArcade泡泡堂游戲
- Java實現(xiàn)的迷宮游戲
- java實戰(zhàn)之飛機(jī)大戰(zhàn)小游戲(源碼加注釋)
- Java實戰(zhàn)入門之雙色球彩票小游戲
- java實戰(zhàn)之猜字小游戲
- Java實現(xiàn)簡單的貪吃蛇小游戲
- 基于Java實現(xiàn)簡單貪吃蛇游戲
- 利用java開發(fā)簡易版掃雷游戲
- java簡易小游戲制作代碼
- java實現(xiàn)2048小游戲(含注釋)
- java實現(xiàn)簡單的猜數(shù)字小游戲
- java實現(xiàn)猜拳游戲試題
- java實現(xiàn)飛機(jī)大戰(zhàn)游戲
- Java實戰(zhàn)之王者榮耀的英雄是怎么產(chǎn)生的?
相關(guān)文章
動力節(jié)點(diǎn)_王勇_DRP項目視頻教程完整版292集
該視頻由國內(nèi)知名講師王勇老師主講,適合掌握J(rèn)ava基礎(chǔ)內(nèi)容的同學(xué)學(xué)習(xí),本視頻共計292集,學(xué)習(xí)Java Web項目,DRP項目視頻是首選,累計下載量已經(jīng)達(dá)到上千萬,很多同學(xué)通過自學(xué)該視頻找到了軟件開發(fā)工作2017-04-04
解讀Eureka的TimedSupervisorTask類(自動調(diào)節(jié)間隔的周期性任務(wù))
在Eureka客戶端中,盡管ScheduledExecutorService的schedule方法創(chuàng)建的是一次性任務(wù),但通過在任務(wù)執(zhí)行完畢后再次調(diào)用schedule方法實現(xiàn)了周期性執(zhí)行,這種設(shè)計既考慮到了任務(wù)超時導(dǎo)致的間隔時間調(diào)整,又通過CAS實現(xiàn)了多線程同步,展現(xiàn)了簡潔而巧妙的設(shè)計思想2024-11-11
Java List Object[]轉(zhuǎn)換成List T的實例
這篇文章主要介紹了Java List Object[]轉(zhuǎn)換成List T的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09

