第八章第二十题(游戏:四子连)(Game: Sizi company)

第八章第二十题(游戏:四子连)(Game: Sizi company)

  • ***8.29(游戏:四子连)四子连是一个两个人玩的棋盘游戏,在游戏中,玩家轮流将有颜色的妻子放在一个六行七列的垂直悬挂的网格中。
    这个游戏的目的是看谁先实现一行、一列或者一条对角线上有四个相同颜色的棋子。程序提示两个玩家交替地下红字Red或黄字Yellow。当放下一子时,程序在控制台重新显示这个棋盘,然后确定游戏的状态(赢、平局还是继续)。
    ***8.20(Game: Sizi company)Game: the game is a board game played by two people. In the game, players take turns to place colored wives in a vertical grid of six rows and seven columns.
    The purpose of this game is to see who first realizes a row, a column or a diagonal line with four pieces of the same color. The program prompts two players to alternate red or yellow. When a piece is put down, the program redisplays the chessboard on the console and determines the state of the game (win, draw or continue).

  • 参考代码:

    package chapter08;
    
    import java.util.Scanner;
    
    public class Code_20 {
        public static void main(String[] args) throws Exception {
            Scanner input = new Scanner(System.in);
            String[] rys = {"red","yellow"};
            int ry = 0;
            int[] ptrs = {5,5,5,5,5,5,5};
            int[][] map = new int[6][7];
            while(true){
                printMap(map);
                if(isConsecutiveFour(map,1)){
                    System.out.println("The red player won");
                    break;
                }
                if(isConsecutiveFour(map,2)){
                    System.out.println("The yellow player won");
                    break;
                }
                System.out.print("Drop a " + rys[ry % 2] + " disk at column (0-6):");
                int dick = input.nextInt();
                map[ptrs[dick]][dick]=ry % 2 + 1;
                ptrs[dick]--;
                ry++;
            }
        }
        public static boolean isConsecutiveFour(int[][] values,int ass){
            int rows = values.length;
            int columns = values[0].length;
            for(int i = 0;i < rows;i++)
                for(int j = 0;j <= columns - 4;j++)
                    if(values[i][j] == values[i][j + 1] && values[i][j] == values[i][j + 2] && values[i][j] == values[i][j + 3] && values[i][j] == ass)
                        return true;
            for(int i = 0;i < columns;i++)
                for(int j = 0;j <= rows - 4;j++)
                    if(values[j][i] == values[j + 1][i] && values[j][i] == values[j + 2][i] && values[j][i] == values[j + 3][i] && values[j][i] == ass)
                        return true;
            for(int i = 3;i < rows;i++)
                for(int j = 0;j < columns - 3;j++)
                    if(values[i][j] == values[i - 1][j + 1] && values[i][j] == values[i - 2][j + 2] && values[i][j] == values[i - 3][j + 3] && values[i][j] == ass)
                        return true;
            for(int i = 0;i < rows - 3;i++)
                for(int j = 0;j < columns - 3;j++)
                    if(values[i][j] == values[i + 1][j + 1] && values[i][j] == values[i + 2][j + 2] && values[i][j] == values[i + 3][j + 3] && values[i][j] == ass)
                        return true;
            return false;
        }
        public static void printMap(int[][] values){
            for(int i = 0;i < 6;i++){
                for(int j = 0;j < 7;j++){
                    System.out.print("|");
                    if(values[i][j] == 0)
                        System.out.print(" ");
                    else if(values[i][j] == 1)
                        System.out.print("R");
                    else if(values[i][j] == 2)
                        System.out.print("Y");
                }
                System.out.println("|");
            }
            System.out.println("---------------");
        }
    }
    
    
  • 结果显示:

    | | | | | | | |
    | | | | | | | |
    | | | | | | | |
    | | | | | | | |
    | | | | | | | |
    | | | | | | | |
    ---------------
    Drop a red disk at column (0-6):1
    | | | | | | | |
    | | | | | | | |
    | | | | | | | |
    | | | | | | | |
    | | | | | | | |
    | |R| | | | | |
    ---------------
    Drop a yellow disk at column (0-6):2
    | | | | | | | |
    | | | | | | | |
    | | | | | | | |
    | | | | | | | |
    | | | | | | | |
    | |R|Y| | | | |
    ---------------
    Drop a red disk at column (0-6):1
    | | | | | | | |
    | | | | | | | |
    | | | | | | | |
    | | | | | | | |
    | |R| | | | | |
    | |R|Y| | | | |
    ---------------
    Drop a yellow disk at column (0-6):2
    | | | | | | | |
    | | | | | | | |
    | | | | | | | |
    | | | | | | | |
    | |R|Y| | | | |
    | |R|Y| | | | |
    ---------------
    Drop a red disk at column (0-6):1
    | | | | | | | |
    | | | | | | | |
    | | | | | | | |
    | |R| | | | | |
    | |R|Y| | | | |
    | |R|Y| | | | |
    ---------------
    Drop a yellow disk at column (0-6):2
    | | | | | | | |
    | | | | | | | |
    | | | | | | | |
    | |R|Y| | | | |
    | |R|Y| | | | |
    | |R|Y| | | | |
    ---------------
    Drop a red disk at column (0-6):1
    | | | | | | | |
    | | | | | | | |
    | |R| | | | | |
    | |R|Y| | | | |
    | |R|Y| | | | |
    | |R|Y| | | | |
    ---------------
    The red player won
    
    Process finished with exit code 0
    
    
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值