日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java黑皮书课后题第8章:***8.20(游戏:四子连)两人玩游戏,轮流将有颜色的棋子放在一个六行七列的垂直悬挂网格中。谁先实现一行、一列或者一对角线上有4个相同颜色的棋子。

發(fā)布時間:2024/7/23 java 38 豆豆

***8.20(游戲:四子連)兩人玩游戲,輪流將有顏色的棋子放在一個六行七列的垂直懸掛網(wǎng)格中。誰先實現(xiàn)一行、一列或者一對角線上有4個相同顏色的棋子

  • 題目
    • 題目描述與運行示例
    • 破題
  • 代碼

題目

題目描述與運行示例

***8.20(游戲:四子連)兩人玩游戲,輪流將有顏色的棋子放在一個六行七列的垂直懸掛網(wǎng)格中。誰先實現(xiàn)一行、一列或者一對角線上有4個相同顏色的棋子。
程序提示兩個玩家交替下紅子Red或黃子Yellow。R表示紅子、Y表示黃子。當(dāng)放下一子時,程序在控制臺重新顯示這個棋盤,然后確定游戲狀態(tài)(贏、平局還是繼續(xù))
下面是一個運行示例:

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Drop a red disk at column (0-6): 0 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |R| | | | | | | Drop a yellow disk at column (0-6): 3 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |R| | |Y| | | | Drop a red disk at column (0-6): 2 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |R| |R|Y| | | | Drop a yellow disk at column (0-6): 3 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |Y| | | | |R| |R|Y| | | | Drop a red disk at column (0-6): 3 | | | | | | | | | | | | | | | | | | | | | | | | | | | |R| | | | | | | |Y| | | | |R| |R|Y| | | | Drop a yellow disk at column (0-6): 4 | | | | | | | | | | | | | | | | | | | | | | | | | | | |R| | | | | | | |Y| | | | |R| |R|Y|Y| | | Drop a red disk at column (0-6): 5 | | | | | | | | | | | | | | | | | | | | | | | | | | | |R| | | | | | | |Y| | | | |R| |R|Y|Y|R| | Drop a yellow disk at column (0-6): 2 | | | | | | | | | | | | | | | | | | | | | | | | | | | |R| | | | | | |Y|Y| | | | |R| |R|Y|Y|R| | Drop a red disk at column (0-6): 4 | | | | | | | | | | | | | | | | | | | | | | | | | | | |R| | | | | | |Y|Y|R| | | |R| |R|Y|Y|R| | Drop a yellow disk at column (0-6): 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | |R| | | | | | |Y|Y|R| | | |R|Y|R|Y|Y|R| | Drop a red disk at column (0-6): 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | |R| | | | | |R|Y|Y|R| | | |R|Y|R|Y|Y|R| | Drop a yellow disk at column (0-6): 1 | | | | | | | | | | | | | | | | | | | | | | | | | |Y| |R| | | | | |R|Y|Y|R| | | |R|Y|R|Y|Y|R| | Drop a red disk at column (0-6): 0 | | | | | | | | | | | | | | | | | | | | | | | | | |Y| |R| | | | |R|R|Y|Y|R| | | |R|Y|R|Y|Y|R| | Drop a yellow disk at column (0-6): 0 | | | | | | | | | | | | | | | | | | | | | | | | |Y|Y| |R| | | | |R|R|Y|Y|R| | | |R|Y|R|Y|Y|R| | Drop a red disk at column (0-6): 1 | | | | | | | | | | | | | | | | | |R| | | | | | |Y|Y| |R| | | | |R|R|Y|Y|R| | | |R|Y|R|Y|Y|R| | Drop a yellow disk at column (0-6): 0 | | | | | | | | | | | | | | | | |Y|R| | | | | | |Y|Y| |R| | | | |R|R|Y|Y|R| | | |R|Y|R|Y|Y|R| | The yellow player won

破題

  • 主方法:先聲明一個數(shù)組array,長度為6*7,類型為int(0表沒有子,1表Y黃子,2表R紅子)
  • 主方法:創(chuàng)建一個boolean對象bool,初始值為true
  • 主方法:創(chuàng)建一個int型對象temp(用于臨時存儲變量)1個int型對象result,存儲結(jié)果
  • 主方法:創(chuàng)建一個計數(shù)變量count,int類型(初始值為0)
  • 主方法:接收用戶輸入語句
  • 主方法:循環(huán)體:調(diào)用打印棋盤狀態(tài)方法,傳入數(shù)組array
  • 主方法:使用循環(huán)運行這個游戲,繼續(xù)運行條件為bool
  • 主方法:循環(huán)體:計數(shù)變量count+1
  • 主方法:循環(huán)體:接收用戶的輸入,使用temp接收
  • 主方法:循環(huán)體:調(diào)用棋盤狀態(tài)改變方法,傳入array、temp與count(對棋盤狀態(tài)進行改變),使用array接收
  • 主方法:循環(huán)體:再調(diào)用打印棋盤狀態(tài)的方法,傳入數(shù)組array
  • 主方法:循環(huán)體:調(diào)用結(jié)果判斷方法,傳入數(shù)組array,result接收;返回值為1則將bool改為false并輸出黃色玩家贏,返回值2將bool改為false并輸出紅色玩家贏,返回值為0則繼續(xù)
  • 打印棋盤狀態(tài)方法:傳入數(shù)組array,無返回值
  • 打印棋盤狀態(tài)方法:對數(shù)組array進行遍歷,0則輸出|+" “,1則輸出| + “Y”,2則輸出| + " R”,每行結(jié)尾打印一個|并換行
  • 棋盤狀態(tài)改變方法:傳入int型二維數(shù)組array、表示新元素所在列的temp和計數(shù)變量count,返回int型二維數(shù)組
  • 棋盤狀態(tài)改變方法:對temp列從下到上遍歷,找到元素值為0的地方并替換為(count % 2 + 1)
  • 棋盤狀態(tài)改變方法:返回新數(shù)組
  • 結(jié)果判斷方法:接收二維數(shù)組,返回int型值
  • 結(jié)果判斷方法:對數(shù)組進行行遍歷、列遍歷、對角線遍歷,當(dāng)有連續(xù)四個值相同且均為1或2時,如果值均為1則返回1、值均為2則返回2
  • 結(jié)果判斷方法:如果上面情況都沒有執(zhí)行到返回0
  • 代碼

    import java.util.Scanner;public class Test8_20 {public static void main(String[] args) {//1. 主方法:先聲明一個數(shù)組array,長度為6*7,類型為int(0表沒有子,1表Y黃子,2表R紅子)int[][] array = new int[6][7];//2. 主方法:創(chuàng)建一個boolean對象bool,初始值為trueboolean bool = true;//3. 主方法:創(chuàng)建一個int型對象temp(用于臨時存儲變量)1個int型對象result,存儲結(jié)果int temp = 0, result = 0;//4. 主方法:創(chuàng)建一個計數(shù)變量count,int類型(初始值為0)int count = 0;//5. 主方法:接收用戶輸入語句Scanner input = new Scanner(System.in);//6. 主方法:循環(huán)體:調(diào)用打印棋盤狀態(tài)方法,傳入數(shù)組arrayprint_array(array);//7. 主方法:使用循環(huán)運行這個游戲,繼續(xù)運行條件為boolwhile (bool) {//8. 主方法:循環(huán)體:計數(shù)變量count+1++count;//9. 主方法:循環(huán)體:接收用戶的輸入,使用temp接收if (count % 2 == 1)System.out.print("Drop a red disk at column (0-6): ");elseSystem.out.print("Drop a yellow disk at column (0-6): ");//10. 主方法:循環(huán)體:調(diào)用棋盤狀態(tài)改變方法,傳入array、temp與count(對棋盤狀態(tài)進行改變),使用array接收temp = input.nextInt();array = change_array(array, temp, count);//11. 主方法:循環(huán)體:再調(diào)用打印棋盤狀態(tài)的方法,傳入數(shù)組arrayprint_array(array);//12. 主方法:循環(huán)體:調(diào)用結(jié)果判斷方法,傳入數(shù)組array,result接收// 返回值為1則將bool改為false并輸出黃色玩家贏,返回值2將bool改為false并輸出紅色玩家贏,返回值為0則繼續(xù)result = judge_array(array);if (result == 1){System.out.print("The yellow player won");bool = false;} else if (result == 2) {System.out.print("The red player won");bool = false;}}}//13. 打印棋盤狀態(tài)方法:傳入數(shù)組array,無返回值public static void print_array(int[][] array){//14. 打印棋盤狀態(tài)方法:對數(shù)組array進行遍歷// 0則輸出|+" ",1則輸出| + "Y",2則輸出| + " R",每行結(jié)尾打印一個|并換行for (int i = 0 ; i <array.length ; i++){for (int j = 0 ; j < array[i].length ;j++){if ( array[i][j] == 0 ){System.out.print("| ");} else if ( array[i][j] == 1 ){System.out.print("|Y");} else {System.out.print("|R");}}System.out.println("|");}}//15. 棋盤狀態(tài)改變方法:傳入int型二維數(shù)組array、表示新元素所在列的temp和計數(shù)變量count,返回int型二維數(shù)組public static int[][] change_array(int[][] array, int temp, int count){//16. 棋盤狀態(tài)改變方法:對temp列從下到上遍歷,找到元素值為0的地方并替換為(count % 2 + 1)for (int i = array.length - 1 ; i >= 0 ; i--){if ( array[i][temp] == 0 ){array[i][temp] = count % 2 + 1;return array;}}//17. 棋盤狀態(tài)改變方法:返回新數(shù)組return array;}//18. 結(jié)果判斷方法:接收二維數(shù)組,返回int型值public static int judge_array(int[][] array){//19. 結(jié)果判斷方法:對數(shù)組進行行遍歷、列遍歷、對角線遍歷// 當(dāng)有連續(xù)四個值相同且均為1或2時,如果值均為1則返回1、值均為2則返回2// 行遍歷部分for (int i = 0 ; i < array.length ; i++){for (int j = 0 ; j < array[i].length - 3 ; j++){if ( array[i][j] == array[i][j+1] && array[i][j+1] == array[i][j+2]&& array[i][j+2] == array[i][j+3] ){if (array[i][j] == 1){return 1;}if (array[i][j] == 2){return 2;}}}}// 列遍歷for (int j = 0 ; j < array[0].length ; j++){for (int i = 0 ; i < array.length - 3 ; i++){if (array[i][j] == array[i+1][j] && array[i+1][j] == array[i+2][j]&& array[i+2][j] == array[i+3][j]){if (array[i][j] == 1){return 1;}if (array[i][j] == 2){return 2;}}}}// 對角線:左上到右下for (int i = 0 ; i < array.length - 3 ; i++){for (int j = 0 ; j < array[i].length - 3 ;j++){if (array[i][j] == array[i+1][j+1] && array[i+1][j+1] == array[i+2][j+2]&& array[i+2][j+2] == array[i+3][j+3]){if (array[i][j] == 1){return 1;}if (array[i][j] == 2){return 2;}}}}// 對角線:左下到右上for (int i = array.length - 1 ; i >= 3 ; i--){for (int j = 0 ; j < array[i].length - 3 ; j++){if (array[i][j] == array[i-1][j+1] && array[i-1][j+1] == array[i-2][j+2]&& array[i-2][j+2] == array[i-3][j+3]){if (array[i][j] == 1){return 1;}if (array[i][j] == 2){return 2;}}}}//20. 結(jié)果判斷方法:如果上面情況都沒有執(zhí)行到返回0return 0;} }

    總結(jié)

    以上是生活随笔為你收集整理的Java黑皮书课后题第8章:***8.20(游戏:四子连)两人玩游戏,轮流将有颜色的棋子放在一个六行七列的垂直悬挂网格中。谁先实现一行、一列或者一对角线上有4个相同颜色的棋子。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。