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

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

按照上面的流程,先向左邊移動,遇到沒有棋子的點停止后 i = 2,再向右移動,遇到不同顏色的棋子后停止,i = 3,這樣落棋點兩邊方向判斷結束后,i < 4即游戲繼續(xù)。
總結
判斷游戲是否勝利,就是從棋子落點兩個相反的方向,遇到相同的棋子使計數(shù)器數(shù)值加1,遇到無棋或顏色不同就結束向另一個方向,直到遇到無棋子和不同顏色的棋子,然后判斷計數(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") ;
}
//判斷游戲是否結束
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() ;
}
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- Java實戰(zhàn)之飛翔的小鳥小游戲
- Java實現(xiàn)五子棋游戲
- JAVA實現(xiàn)的CrazyArcade泡泡堂游戲
- Java實現(xiàn)的迷宮游戲
- java實戰(zhàn)之飛機大戰(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)飛機大戰(zhàn)游戲
- Java實戰(zhàn)之王者榮耀的英雄是怎么產生的?
相關文章
SpringBoot CommandLineRunner的異步任務機制使用
這篇文章主要介紹了SpringBoot CommandLineRunner的異步任務機制使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
MyBatis的JdbcType與Oracle、MySql數(shù)據(jù)類型一覽表
這篇文章主要介紹了MyBatis的JdbcType與Oracle、MySql數(shù)據(jù)類型一覽表,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
Spring?Boot接口支持高并發(fā)具體實現(xiàn)代碼
這篇文章主要給大家介紹了關于Spring?Boot接口支持高并發(fā)具體實現(xiàn)的相關資料,在SpringBoot項目中通常我們沒有處理并發(fā)問題,但是使用項目本身還是支持一定的并發(fā)量,需要的朋友可以參考下2023-08-08
SpringBoot?整合Mybatis-Plus并輸出SQL日志示例詳解
這篇文章主要介紹了SpringBoot整合Mybatis-Plus并輸出SQL日志,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06

