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(