欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實現(xiàn)四子棋游戲

 更新時間:2021年03月15日 06:57:30   作者:孤風寒雪  
這篇文章主要為大家詳細介紹了java實現(xiàn)四子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

非常簡單的四子棋游戲

本人是剛學java的小白,最近在書上看到了有關(guān)四子棋游戲的編程題,就試著來寫一寫,代碼也比較簡單。

思路

寫四子棋的難點是如何判斷四個棋子連在一起。

下面給出圖解:

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

按照上面的流程,先向左邊移動,遇到?jīng)]有棋子的點停止后 i = 2,再向右移動,遇到不同顏色的棋子后停止,i = 3,這樣落棋點兩邊方向判斷結(jié)束后,i < 4即游戲繼續(xù)。

總結(jié)

判斷游戲是否勝利,就是從棋子落點兩個相反的方向,遇到相同的棋子使計數(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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java事件處理模型知識點總結(jié)

    java事件處理模型知識點總結(jié)

    在本篇文章里小辮給大家分享的是一篇關(guān)于java事件處理模型知識點總結(jié)內(nèi)容,有興趣的朋友們可以學習下。
    2021-01-01
  • SpringBoot CommandLineRunner的異步任務(wù)機制使用

    SpringBoot CommandLineRunner的異步任務(wù)機制使用

    這篇文章主要介紹了SpringBoot CommandLineRunner的異步任務(wù)機制使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • SpringCloud入門實驗環(huán)境搭建

    SpringCloud入門實驗環(huán)境搭建

    這篇文章主要介紹了SpringCloud入門實驗環(huán)境搭建的相關(guān)資料,幫助大家更好的理解和學習使用SpringCloud,感興趣的朋友可以了解下
    2021-04-04
  • drools規(guī)則動態(tài)化實踐解析

    drools規(guī)則動態(tài)化實踐解析

    這篇文章主要為大家介紹了drools規(guī)則動態(tài)化實踐解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • MyBatis的JdbcType與Oracle、MySql數(shù)據(jù)類型一覽表

    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)代碼

    這篇文章主要給大家介紹了關(guān)于Spring?Boot接口支持高并發(fā)具體實現(xiàn)的相關(guān)資料,在SpringBoot項目中通常我們沒有處理并發(fā)問題,但是使用項目本身還是支持一定的并發(fā)量,需要的朋友可以參考下
    2023-08-08
  • java agent使用全解析

    java agent使用全解析

    這篇文章主要介紹了javaagent的相關(guān)資料,文中示例代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解下
    2020-07-07
  • Spring?自定義propertyEditor的示例代碼

    Spring?自定義propertyEditor的示例代碼

    這篇文章主要介紹了Spring?自定義propertyEditor的示例代碼,本文結(jié)合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • SpringBoot?整合Mybatis-Plus并輸出SQL日志示例詳解

    SpringBoot?整合Mybatis-Plus并輸出SQL日志示例詳解

    這篇文章主要介紹了SpringBoot整合Mybatis-Plus并輸出SQL日志,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • JAVA 根據(jù)Url把多文件打包成ZIP下載實例

    JAVA 根據(jù)Url把多文件打包成ZIP下載實例

    這篇文章主要介紹了JAVA 根據(jù)Url把多文件打包成ZIP下載的相關(guān)資料,需要的朋友可以參考下
    2017-08-08

最新評論