最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

非常簡(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è)方向(右斜線方向)
 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è)方向(左斜線方向)
 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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Map與JavaBean相互轉(zhuǎn)換的工具類(lèi)?

    Map與JavaBean相互轉(zhuǎn)換的工具類(lèi)?

    這篇文章主要介紹了Map與JavaBean相互轉(zhuǎn)換的工具類(lèi),在做導(dǎo)入的時(shí)候,遇到了需要將map對(duì)象轉(zhuǎn)化?成javabean的問(wèn)題,也就是說(shuō),不清楚javabean的內(nèi)部字段排列,只知道m(xù)ap的?key代表javabean的字段名,value代表值,需要的朋友可以參考下
    2022-02-02
  • java中的?HashMap?的加載因子是0.75原理探討

    java中的?HashMap?的加載因子是0.75原理探討

    在Java中,HashMap是一種常用的數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)鍵值對(duì),它的設(shè)計(jì)目標(biāo)是提供高效的插入、查找和刪除操作,在HashMap的實(shí)現(xiàn)中,加載因子(Load?Factor)是一個(gè)重要的概念,本文將探討為什么Java中的HashMap的加載因子被設(shè)置為0.75
    2023-10-10
  • 動(dòng)力節(jié)點(diǎn)_王勇_DRP項(xiàng)目視頻教程完整版292集

    動(dòng)力節(jié)點(diǎn)_王勇_DRP項(xiàng)目視頻教程完整版292集

    該視頻由國(guó)內(nèi)知名講師王勇老師主講,適合掌握J(rèn)ava基礎(chǔ)內(nèi)容的同學(xué)學(xué)習(xí),本視頻共計(jì)292集,學(xué)習(xí)Java Web項(xiàng)目,DRP項(xiàng)目視頻是首選,累計(jì)下載量已經(jīng)達(dá)到上千萬(wàn),很多同學(xué)通過(guò)自學(xué)該視頻找到了軟件開(kāi)發(fā)工作
    2017-04-04
  • 解讀Eureka的TimedSupervisorTask類(lèi)(自動(dòng)調(diào)節(jié)間隔的周期性任務(wù))

    解讀Eureka的TimedSupervisorTask類(lèi)(自動(dòng)調(diào)節(jié)間隔的周期性任務(wù))

    在Eureka客戶端中,盡管ScheduledExecutorService的schedule方法創(chuàng)建的是一次性任務(wù),但通過(guò)在任務(wù)執(zhí)行完畢后再次調(diào)用schedule方法實(shí)現(xiàn)了周期性執(zhí)行,這種設(shè)計(jì)既考慮到了任務(wù)超時(shí)導(dǎo)致的間隔時(shí)間調(diào)整,又通過(guò)CAS實(shí)現(xiàn)了多線程同步,展現(xiàn)了簡(jiǎn)潔而巧妙的設(shè)計(jì)思想
    2024-11-11
  • Mybatis?Plus分頁(yè)查詢返回total為0問(wèn)題解決

    Mybatis?Plus分頁(yè)查詢返回total為0問(wèn)題解決

    在使用MybatisPlus進(jìn)行分頁(yè)查詢時(shí),可能會(huì)遇到返回的總條數(shù)(total)為0的問(wèn)題,這通常是由于未配置MybatisPlus的分頁(yè)插件攔截器導(dǎo)致的,本文就來(lái)介紹一下解決方法,感興趣的可以了解一下
    2024-10-10
  • 初識(shí)Spring Boot框架和快速入門(mén)

    初識(shí)Spring Boot框架和快速入門(mén)

    這篇文章主要介紹了初識(shí)Spring Boot框架學(xué)習(xí),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • springboot操作靜態(tài)資源文件的方法

    springboot操作靜態(tài)資源文件的方法

    這篇文章主要介紹了springboot操作靜態(tài)資源文件的方法,本文給大家提到了兩種方法,小編在這里比較推薦第一種方法,具體內(nèi)容詳情大家跟隨腳本之家小編一起看看吧
    2018-07-07
  • 關(guān)于@Entity和@Table注解的用法詳解

    關(guān)于@Entity和@Table注解的用法詳解

    這篇文章主要介紹了關(guān)于@Entity和@Table注解的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 深入理解java重載和重寫(xiě)

    深入理解java重載和重寫(xiě)

    這篇文章主要介紹了Java方法重載和重寫(xiě)原理區(qū)別解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-07-07
  • Java List Object[]轉(zhuǎn)換成List T的實(shí)例

    Java List Object[]轉(zhuǎn)換成List T的實(shí)例

    這篇文章主要介紹了Java List Object[]轉(zhuǎn)換成List T的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09

最新評(píng)論

裕民县| 固阳县| 板桥市| 金寨县| 洪湖市| 富裕县| 商洛市| 元朗区| 黄龙县| 都江堰市| 惠水县| 淄博市| 沽源县| 三亚市| 双鸭山市| 宝清县| 贡嘎县| 东丰县| 津市市| 定州市| 吉水县| 三原县| 新绛县| 涟源市| 乐亭县| 开封市| 五寨县| 定南县| 汕尾市| 裕民县| 麦盖提县| 滨州市| 阳江市| 固原市| 鄢陵县| 鄂州市| 甘肃省| 云南省| 泾阳县| 富平县| 五指山市|