Java黑皮书课后题第8章:***8.20(游戏:四子连)两人玩游戏,轮流将有颜色的棋子放在一个六行七列的垂直悬挂网格中。谁先实现一行、一列或者一对角线上有4个相同颜色的棋子。
生活随笔
收集整理的這篇文章主要介紹了
Java黑皮书课后题第8章:***8.20(游戏:四子连)两人玩游戏,轮流将有颜色的棋子放在一个六行七列的垂直悬挂网格中。谁先实现一行、一列或者一对角线上有4个相同颜色的棋子。
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
***8.20(游戲:四子連)兩人玩游戲,輪流將有顏色的棋子放在一個六行七列的垂直懸掛網格中。誰先實現一行、一列或者一對角線上有4個相同顏色的棋子
- 題目
- 題目描述與運行示例
- 破題
- 代碼
題目
題目描述與運行示例
***8.20(游戲:四子連)兩人玩游戲,輪流將有顏色的棋子放在一個六行七列的垂直懸掛網格中。誰先實現一行、一列或者一對角線上有4個相同顏色的棋子。
程序提示兩個玩家交替下紅子Red或黃子Yellow。R表示紅子、Y表示黃子。當放下一子時,程序在控制臺重新顯示這個棋盤,然后確定游戲狀態(贏、平局還是繼續)
下面是一個運行示例:
破題
代碼
import java.util.Scanner;public class Test8_20 {public static void main(String[] args) {//1. 主方法:先聲明一個數組array,長度為6*7,類型為int(0表沒有子,1表Y黃子,2表R紅子)int[][] array = new int[6][7];//2. 主方法:創建一個boolean對象bool,初始值為trueboolean bool = true;//3. 主方法:創建一個int型對象temp(用于臨時存儲變量)1個int型對象result,存儲結果int temp = 0, result = 0;//4. 主方法:創建一個計數變量count,int類型(初始值為0)int count = 0;//5. 主方法:接收用戶輸入語句Scanner input = new Scanner(System.in);//6. 主方法:循環體:調用打印棋盤狀態方法,傳入數組arrayprint_array(array);//7. 主方法:使用循環運行這個游戲,繼續運行條件為boolwhile (bool) {//8. 主方法:循環體:計數變量count+1++count;//9. 主方法:循環體:接收用戶的輸入,使用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. 主方法:循環體:調用棋盤狀態改變方法,傳入array、temp與count(對棋盤狀態進行改變),使用array接收temp = input.nextInt();array = change_array(array, temp, count);//11. 主方法:循環體:再調用打印棋盤狀態的方法,傳入數組arrayprint_array(array);//12. 主方法:循環體:調用結果判斷方法,傳入數組array,result接收// 返回值為1則將bool改為false并輸出黃色玩家贏,返回值2將bool改為false并輸出紅色玩家贏,返回值為0則繼續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. 打印棋盤狀態方法:傳入數組array,無返回值public static void print_array(int[][] array){//14. 打印棋盤狀態方法:對數組array進行遍歷// 0則輸出|+" ",1則輸出| + "Y",2則輸出| + " R",每行結尾打印一個|并換行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. 棋盤狀態改變方法:傳入int型二維數組array、表示新元素所在列的temp和計數變量count,返回int型二維數組public static int[][] change_array(int[][] array, int temp, int count){//16. 棋盤狀態改變方法:對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. 棋盤狀態改變方法:返回新數組return array;}//18. 結果判斷方法:接收二維數組,返回int型值public static int judge_array(int[][] array){//19. 結果判斷方法:對數組進行行遍歷、列遍歷、對角線遍歷// 當有連續四個值相同且均為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. 結果判斷方法:如果上面情況都沒有執行到返回0return 0;} }總結
以上是生活随笔為你收集整理的Java黑皮书课后题第8章:***8.20(游戏:四子连)两人玩游戏,轮流将有颜色的棋子放在一个六行七列的垂直悬挂网格中。谁先实现一行、一列或者一对角线上有4个相同颜色的棋子。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java黑皮书课后题第8章:**8.19
- 下一篇: Java黑皮书课后题第8章:*8.21(