飞行棋游戏

import java.util.*;

public class Game {
    static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {
        Chessboard chessboard = new Chessboard();
        Player player1 = new Player();
        Player player2 = new Player();
        Judge judge = new Judge();

        gameBegin(player1, player2, judge, chessboard);
    }

    //游戏准备
    static void gameBegin(Player player1, Player player2, Judge judge, Chessboard chessboard){
        System.out.println("游戏开始!"
                            + "请输入第一位玩家名字:");
        player1.setName(input.next());
        System.out.println("请输入第二位玩家名字:");
        player2.setName(input.next());
        while(player2.getName().equals(player1.getName())){
            System.out.println("两位玩家名字相同,请重新输入第二位玩家名字:");
            player2.setName(input.next());
        }

        //判断游戏结束
        while(true){
            gameGoOn(player1, player2, judge, chessboard);
            if(judge.getWinner().equals(player1.getName())) break;

            gameGoOn(player2, player1, judge, chessboard);
            if(judge.getWinner().equals(player2.getName())) break;
        }
        System.out.println("游戏结束! 胜者是" + judge.getWinner());

    }


    //游戏进行
    static void gameGoOn(Player player, Player withPlayer,Judge judge, Chessboard chessboard){
        //判断是否暂停
        if (player.isFrozen()) {
            player.setFrozen(false);
            System.out.println(player.getName() + "正在休息");
            return;
        }

//        System.out.println("请" + player.getName() + "输入1投掷骰子!");
//        while(!input.next().equals("1")){
//            System.out.println("请" + player.getName() + "输入1投掷骰子!");
//        }

        int n = judge.RollDice();
        player.setFeet(n + player.getFeet());
        if(player.getFeet() > 100){
            System.out.println(player.getName() + "摇到了" + n + ",走到了第100格");
        }
        else {
            System.out.println(player.getName() + "摇到了" + n + ",走到了第" + player.getFeet() + "");
        }


        //判断是否触发炸弹
        if(judge.touchBoom(player, chessboard)){
            judge.Boom(player);
        }

        //判断是否触发幸运转盘
        if(judge.touchLuckyTurn(player, chessboard)){
            judge.LuckyTurn(player);
        }

        //判断是否出发暂停
        if(judge.touchPause(player, chessboard)){
            judge.Frozen(player);
            System.out.println(player.getName() + "被暂停一回合!");
        }

        //判断是否出发时空隧道
        if(judge.touchTimeTunnel(player, chessboard)){
            judge.TimeTunnel(player, chessboard);
        }

        //判断玩家位置是否重叠
        judge.overlap(player, withPlayer);

        //判断游戏是否结束
        if(player.getFeet() >= 100) judge.setWinner(player.getName());
    }
}


class Player{
    private boolean frozen = false;     //暂停标记
    private String name;                //名字
    private int feet = 0;               //步数

    boolean isFrozen(){
        return frozen;
    }

    void setFrozen(boolean frozen){
        this.frozen = frozen;
    }

    int getFeet() {
        return feet;
    }

    void setFeet(int feet) {
        this.feet = feet;
    }

    void setName(String name) {
        this.name = name;
    }

    String getName() {
        return name;
    }
}


class Chessboard{
    private final int[] luckyTurn = {6, 23, 40, 55, 69, 83};//幸运轮盘    1
    private final int[] landMine = {5, 13, 17, 33, 38, 50, 64, 80, 94};   //地雷位置  2
    private final int[] pause = {9, 27, 60, 93};         //暂停  3
    private final int[] timeTunnel = {20, 25, 45, 63, 72, 88, 90};   //时空隧道  4

    int[] getLandMine() {
        return landMine;
    }

    int[] getLuckyTurn() {
        return luckyTurn;
    }

    int[] getPause() {
        return pause;
    }

    int[] getTimeTunnel() {
        return timeTunnel;
    }
}

class Judge {
    private String winner = "";


    //掷骰子
    int RollDice(){
        return (int)(Math.random()*5+1);
    }

    //是否碰到炸弹,到达终点返回true,反则返回false
    boolean touchBoom(Player player, Chessboard chessboard){
        for(int i : chessboard.getLandMine()){
            if(i == player.getFeet()){
                return true;
            }
        }
        return false;
    }

    //是否碰到幸运转盘
    boolean touchLuckyTurn(Player player, Chessboard chessboard){
        for(int i : chessboard.getLuckyTurn()){
            if(i == player.getFeet()){
                return true;
            }
        }
        return false;
    }

    //是否碰到暂停
    boolean touchPause (Player player, Chessboard chessboard){
        for(int i : chessboard.getPause()){
            if(i == player.getFeet()){
                return true;
            }
        }
        return false;
    }

    //是否碰到时光隧道
    boolean touchTimeTunnel (Player player, Chessboard chessboard){
        for(int i : chessboard.getTimeTunnel()){
            if(i == player.getFeet()){
                return true;
            }
        }
        return false;
    }

    //时光隧道
    void TimeTunnel(Player player, Chessboard chessboard){
        for (int i = 0; i < chessboard.getTimeTunnel().length; i++) {
            if(player.getFeet() == chessboard.getTimeTunnel()[i]){
                if(i == chessboard.getTimeTunnel().length-1){
                    player.setFeet(chessboard.getTimeTunnel()[0]);
                }
                else{
                    player.setFeet(chessboard.getTimeTunnel()[i+1]);
                }
                System.out.println(player.getName() + "遇到时空隧道,被传送到第" + player.getFeet() + "格!");
                return;
            }
        }
    }

    //炸弹
    void Boom(Player player){
        int n = RollDice();
        if(n > player.getFeet()){
            player.setFeet(0);
        }else{
            player.setFeet(player.getFeet() - n);
        }
        System.out.println(player.getName() + "碰到地雷,向后退" + n + "步!" +
                                "现在在第" + player.getFeet() + "格!");
    }

    //暂停
    void Frozen(Player player){ player.setFrozen(true); }

    //幸运转盘
    void LuckyTurn(Player player){
        int n = RollDice();
        player.setFeet(player.getFeet() + n);
        System.out.println("触发幸运转盘,向前走" + n + "步!" +
                            player.getName() + "走到第" + player.getFeet() + "格!");
    }

    //重叠
    void overlap(Player player1, Player player2){
        if(player1.getFeet() == player2.getFeet()){
            player2.setFeet(0);
            System.out.println(player2.getName() + "被踩到了,退回到起点!");
        }
    }

    String getWinner() {
        return winner;
    }

    void setWinner(String winner) {
        this.winner = winner;
    }
}

 

posted @ 2022-01-15 10:12  冬日寻雾记  阅读(56)  评论(0)    收藏  举报