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

Java實(shí)現(xiàn)五子棋的基礎(chǔ)方法

 更新時間:2020年09月03日 13:42:15   作者:MSJ_743579531  
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)五子棋的基礎(chǔ)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Java實(shí)現(xiàn)五子棋的具體代碼,供大家參考,具體內(nèi)容如下

任務(wù)概述:

五子棋是全國智力運(yùn)動會競技項(xiàng)目之一,是一種兩人對弈的純策略型棋類游戲。通常雙方分別使用黑白兩色的棋子,下在棋盤直線與橫線的交叉點(diǎn)上,先形成五子連線者獲勝。

任務(wù)過程:

1.繪制棋盤
2.提示黑方(用 1 表示)和白方(用 2 表示)分別下棋(X,Y 軸位置)并重新繪制棋盤
3.每當(dāng)一方下棋后判斷是否獲勝

重點(diǎn)講解:

1.關(guān)于勝利的判斷:

根據(jù)用戶所下棋子的位置對其周圍進(jìn)行檢測,分為以下情況:
橫向:當(dāng)前下棋位置左右各4顆棋子連續(xù)相同5顆
豎向:當(dāng)前下棋位置上下各4顆棋子連續(xù)相同5顆
斜向:當(dāng)前下棋位置左上右下各4顆棋子連續(xù)相同5顆、當(dāng)前下棋位置左下右上各4顆棋子連續(xù)相同5顆
在檢測時要注意數(shù)組的下標(biāo),若用戶下棋位置處于棋盤邊緣,則周圍坐標(biāo)很可能已經(jīng)在棋盤之外,要注意加上相應(yīng)的判斷避免下標(biāo)越界!

2.關(guān)于棋盤下滿:

我的思路是,先認(rèn)為棋盤已經(jīng)下滿,然后在打印棋盤的同時,若當(dāng)前打印值為0,則認(rèn)為棋盤未滿,可繼續(xù)下棋操作,若棋盤已經(jīng)打印完畢,仍然沒有打印值為0的情況,則認(rèn)為棋盤下滿,雙方平局,游戲結(jié)束。

其余內(nèi)容在代碼上有詳細(xì)的注釋,以下為代碼:

import java.util.Scanner;

public class Chess {

 public static void main(String[] args) {
 Scanner scanner = new Scanner(System.in);
 int order = 1;//儲存順序,當(dāng)order為1時輪到黑方下棋,當(dāng)order為2時輪到白方下棋
 int row = 0;//用來儲存要下棋的行數(shù)
 int column = 0;//用來儲存要下棋的列數(shù)
 int win = 0;//用來儲存獲勝者編號,為0則雙方均未獲勝,為1則白方獲勝,為2則黑方獲勝
 int count1 = 0;//用來儲存當(dāng)前下棋位置左右各4顆棋子的相同數(shù)量
 int count2 = 0;//用來儲存當(dāng)前下棋位置上下各4顆棋子的相同數(shù)量
 int count3 = 0;//用來儲存當(dāng)前下棋位置左上右下各4顆棋子的相同數(shù)量
 int count4 = 0;//用來儲存當(dāng)前下棋位置左下右上各4顆棋子的相同數(shù)量
 int full = 1;//用來判斷棋盤是否下滿,默認(rèn)值1認(rèn)為已滿,只要有1處空則置0
 int board[][] = new int[16][16];//用來記錄棋盤
 
 //為棋盤的坐標(biāo)賦值
 for(int i = 0;i<16;i++) {
  board[i][0] = i;//為棋盤的Y軸賦值
 }
 for(int j = 0;j<16;j++) {
  board[0][j] = j;//為棋盤的X軸賦值
 }
 
 //開始下棋,無限循環(huán)直到有一方勝利或棋盤下滿
 while(true) {
  
  //首先輸出棋盤
  for(int i = 0;i<16;i++) {
  for(int j = 0;j<16;j++) {
   if(board[i][j] == 0)//若棋盤有1處空則認(rèn)為棋盤未滿
   full = 0;
   System.out.print(board[i][j]+"\t");
  }
  System.out.println();
  }
  
  //然后判斷棋盤是否下滿
  if(full == 1) {//棋盤自始至終未有空值,則認(rèn)為棋盤已經(jīng)下滿
  System.out.print("棋盤已下滿,雙方平局,游戲結(jié)束!");
  break;//跳出循環(huán)
  }
  
  //棋盤未滿,進(jìn)入下棋過程
  if(order == 1) {//order為1黑方下棋
  order = 2;//切換order,下一次則白方下棋
  //無限循環(huán)直到下棋點(diǎn)可以正常下棋
  while(true) {
   System.out.println("請黑方下棋,請先輸入X軸位置(列數(shù),1-15):");
   column = scanner.nextInt();//儲存要下棋的列數(shù)
   System.out.println("請黑方下棋,請輸入Y軸位置(行數(shù),1-15):");
   row = scanner.nextInt();//儲存要下棋的行數(shù)
   if(board[row][column] != 0)//下棋點(diǎn)已有棋子,需重新下棋
   System.out.println("此次下棋無效,請重新下棋!");
   else {
   board[row][column] = 1;//放置黑棋
   break;//跳出循環(huán)
   }
  }
  }
  else {//order為2白方下棋
  order = 1;//切換order,下一次則黑方下棋
  //無限循環(huán)直到下棋點(diǎn)可以正常下棋
  while(true) {
   System.out.println("請白方下棋,請先輸入X軸位置(列數(shù),1-15):");
   column = scanner.nextInt();//儲存要下棋的列數(shù)
   System.out.println("請白方下棋,請輸入Y軸位置(行數(shù),1-15):");
   row = scanner.nextInt();//儲存要下棋的行數(shù)
   if(board[row][column] != 0)//下棋點(diǎn)已有棋子,需重新下棋
   System.out.println("此次下棋無效,請重新下棋!");
   else {
   board[row][column] = 2;//放置白棋
   break;//跳出循環(huán)
   }
  }
  }
  
  //本次下棋完畢,判斷是否有人獲勝
  for(int i = -4;i < 4;i++) {
  
  //判斷當(dāng)前下棋位置左右各4顆棋子的相同數(shù)量,連續(xù)4組相同則獲勝
  if(column+i>0 && column+i+1<16) {//防止下標(biāo)越界
   if(board[row][column+i] == board[row][column+i+1] && board[row][column+i] != 0) {
   count1++;
   if(count1 == 4) {//連續(xù)4組相同,獲勝
    win = order;
    break;
   }
   }
   else
   count1 = 0;//未連續(xù)相同,清除相同計數(shù)
  }
  
  //判斷當(dāng)前下棋位置上下各4顆棋子的相同數(shù)量,連續(xù)4組相同則獲勝
  if(row+i>0 && row+i+1<16) {//防止下標(biāo)越界
   if(board[row+i][column] == board[row+i+1][column] && board[row+i][column] != 0) {
   count2++;
   if(count2 == 4) {//連續(xù)4組相同,獲勝
    win = order;
    break;
   }
   }
   else
   count2 = 0;//未連續(xù)相同,清除相同計數(shù)
  }
  
  //判斷當(dāng)前下棋位置左上右下各4顆棋子的相同數(shù)量,連續(xù)4組相同則獲勝
  if(column+i>0 && column+i+1<16 && row+i>0 && row+i+1<16) {//防止下標(biāo)越界
   if(board[row+i][column+i] == board[row+i+1][column+i+1] && board[row+i][column+i] != 0) {
   count3++;
   if(count3 == 4) {//連續(xù)4組相同,獲勝
    win = order;
    break;
   }
   }
   else
   count3 = 0;//未連續(xù)相同,清除相同計數(shù)
  }
  
  //判斷當(dāng)前下棋位置左下右上各4顆棋子的相同數(shù)量,連續(xù)4組相同則獲勝
  if(column+i>0 && column+i+1<16 && row-i-1>0 && row-i<16) {//防止下標(biāo)越界
   if(board[row-i][column+i] == board[row-i-1][column+i+1] && board[row-i][column+i] != 0) {
   count4++;
   if(count4 == 4) {//連續(xù)4組相同,獲勝
    win = order;
    break;
   }
   }
   else
   count4 = 0;//未連續(xù)相同,清除相同計數(shù)
  }
  
  }
  
  //有人獲勝,輸出棋盤及獲勝者,跳出循環(huán)
  if(win == 2) {//由于win是order的值,order輪到白方,說明黑方獲勝
  //輸出棋盤
  for(int i = 0;i<16;i++) {
   for(int j = 0;j<16;j++) {
   System.out.print(board[i][j]+"\t");
   }
   System.out.println();
  }
  System.out.println("恭喜黑方獲勝,游戲結(jié)束!");
  break;//跳出循環(huán)
  }
  else if(win == 1) {//由于win是order的值,order輪到黑方,說明白方獲勝
  //輸出棋盤
  for(int i = 0;i<16;i++) {
   for(int j = 0;j<16;j++) {
   System.out.print(board[i][j]+"\t");
   }
   System.out.println();
  }
  System.out.println("恭喜白方獲勝,游戲結(jié)束!");
  break;//跳出循環(huán)
  }
  
  //無人獲勝,清除相同棋子計數(shù),開始新循環(huán)
  count1 = 0;
  count2 = 0;
  count3 = 0;
  count4 = 0;
  full = 1;//再次認(rèn)為棋盤已滿
 
 }
 }

}

更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:

C++經(jīng)典小游戲匯總

python經(jīng)典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經(jīng)典游戲 玩不停

javascript經(jīng)典小游戲匯總

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java爬蟲爬取漫畫示例

    Java爬蟲爬取漫畫示例

    這篇文章主要介紹了Java爬蟲爬取漫畫示例,大部分的爬蟲入門教學(xué)都是爬取圖片的,本文就來測試一下爬取網(wǎng)站的漫畫,需要的朋友可以參考下
    2023-04-04
  • 簡單理解遵循接口隔離原則的Java設(shè)計模式編程

    簡單理解遵循接口隔離原則的Java設(shè)計模式編程

    這篇文章主要介紹了遵循接口隔離原則的Java設(shè)計模式編程,針對Java編程中interface接口方面的編寫進(jìn)行約束,需要的朋友可以參考下
    2016-02-02
  • SpringBoot實(shí)現(xiàn)簡單文件上傳功能

    SpringBoot實(shí)現(xiàn)簡單文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)簡單文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Java連接Mysql數(shù)據(jù)庫詳細(xì)代碼實(shí)例

    Java連接Mysql數(shù)據(jù)庫詳細(xì)代碼實(shí)例

    這篇文章主要介紹了Java連接Mysql數(shù)據(jù)庫詳細(xì)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Maven坐標(biāo)和依賴的實(shí)現(xiàn)示例

    Maven坐標(biāo)和依賴的實(shí)現(xiàn)示例

    本文主要介紹了Maven坐標(biāo)和依賴的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • Spring之詳解bean的實(shí)例化

    Spring之詳解bean的實(shí)例化

    這篇文章主要介紹了Spring之詳解bean的實(shí)例化,文章內(nèi)容詳細(xì),簡單易懂,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2023-01-01
  • Java9版本新特性同一個Jar支持多JDK版本運(yùn)行

    Java9版本新特性同一個Jar支持多JDK版本運(yùn)行

    這篇文章主要為大家介紹了Java9新版本的特性之同一個Jar支持多JDK版本運(yùn)行的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • Spring條件注解@Conditional示例詳解

    Spring條件注解@Conditional示例詳解

    這篇文章主要給大家介紹了關(guān)于Spring條件注解@Conditional的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • java解析XML Node與Element的區(qū)別(推薦)

    java解析XML Node與Element的區(qū)別(推薦)

    下面小編就為大家分享一篇java解析XML Node與Element的區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • 基于Java和Lua實(shí)現(xiàn)IP鎖定功能

    基于Java和Lua實(shí)現(xiàn)IP鎖定功能

    本文主要介紹了?Lua?語言的特點(diǎn)、應(yīng)用場景、基本語法,以及使用?Redis?+?Lua?腳本實(shí)現(xiàn)限制?IP?多次輸入錯誤密碼功能,包括?Lua?腳本示例、參數(shù)解釋、邏輯流程、執(zhí)行方式,并給出了?Java?應(yīng)用示例及代碼解釋,還闡述了參數(shù)傳遞和使用,需要的朋友可以參考下
    2025-01-01

最新評論

赤城县| 平塘县| 河池市| 高碑店市| 惠州市| 海晏县| 铁力市| 乌兰浩特市| 东台市| 新晃| 长丰县| 尉犁县| 东港市| 稻城县| 汉阴县| 桐梓县| 托克托县| 东阿县| 雷州市| 交城县| 赤城县| 哈巴河县| 青铜峡市| 运城市| 广西| 曲靖市| 麻城市| 临城县| 宜章县| 辉县市| 巩留县| 阳谷县| 皮山县| 砀山县| 曲靖市| 河间市| 当涂县| 南乐县| 新宁县| 石家庄市| 于都县|