java实现飞行棋

@@   两人重合时
A   玩家1
B   玩家2
◎   幸运轮盘
★   地雷
■   暂停
〓   时空隧道
∷   普通格  0

地图样式

∷∷∷∷∷★¤∷∷■∷∷∷★∷∷∷★∷∷〓∷∷¤∷〓∷■∷∷∷
                                                     ∷
                                                     ∷
                                                     ★
                                                     ∷
∷★〓∷∷■∷∷∷∷∷∷∷∷∷★∷∷∷∷〓∷∷∷∷¤∷★∷∷∷
∷
∷
∷
¤∷∷〓∷∷∷∷∷∷∷★∷∷¤∷∷∷∷〓∷〓∷∷■★∷∷∷∷∷


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


第一行 31  0-30
右竖列 31-34
第二行 35-65
左竖列 66-68
第三行 69-99

规则:

游戏从玩家1先扔骰子开始,走出相应步数,然后玩家2扔骰子,重复过程。当任意一个玩家走到地图结束位置则游戏结束。
判定规则:
1.当玩家重合时,被踩中的玩家退回到起点。
2.当玩家遇到幸运轮盘时,可以再掷一次骰子。1-6之间的数
3.当玩家遇到地雷时,随机后退1-6步。
4.当玩家遇到暂停时,下次回合中玩家不能掷骰子。
5.当玩家遇到时空隧道时,穿越到下一个时空隧道,但是如果下一个时空隧道不存在,退回到第一个时空隧道。


编写游戏时需要的属性

玩家1和玩家2的昵称

玩家1的位置
玩家2的位置

玩家1和玩家2是否暂停的标识

游戏的过程:
当任意一个玩家走到地图结束位置则游戏结束
游戏从玩家1先仍骰子开始,走完当前地图,然后玩家扔骰子

扔完骰子后计算玩家当前在声明位置


package flygame;

import java.util.Random;

public class Player {
    private String name;
    private int point;//位置
    private boolean isPause=false;//是否暂停,默认不暂停

    public Player(){

    }
    public Player(String name, int point, boolean isPause) {
        super();
        this.name = name;
        this.point = point;
        this.isPause = isPause;
    }


    public String getName() {
        return name;
    }


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


    public int getPoint() {
        return point;
    }


    public void setPoint(int point) {
        this.point = point;
    }


    public boolean isPause() {
        return isPause;
    }


    public void setPause(boolean isPause) {
        this.isPause = isPause;
    }


    //掷色子
    public int play(){
        Random m=new Random();
        int num=m.nextInt(6)+1;
        return num;
    }
}

package flygame;

public class Map {
    int[] map = new int[100];
    public void init(){

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

        for(int i=0;i<luckyTurn.length;i++){
            int index =luckyTurn[i];
            map[index]=1;
        }
        for(int i=0;i<landMine.length;i++){
            int index =landMine[i];
            map[index]=2;
        }
        for(int i=0;i<pause.length;i++){
            int index=pause[i];
            map[index]=3;
        }
        for(int i=0;i<timeTunnel.length;i++){
            int index=timeTunnel[i];
            map[index]=4;
        }
        showMap(0,0);
    }
    public void drawLine(int begin,int end){//上下
        for( int i=begin;i<=end;i++){
            System.out.print(getGraphics(map[i]));
        }
        System.out.println();
    }
    public void drawLine(int begin,int end,int aPos,int bPos){//上下重载
        for( int i=begin;i<=end;i++){
            System.out.print(getGraphics(map[i],i,aPos,bPos));
        }
        System.out.println();
    }
    public void drawRight(int begin,int end){//右边
        for(int i=begin;i<=end;i++){
            for(int j=1;j<=53;j++){System.out.print(" ");}//打空格  109????
            System.out.println(getGraphics(map[i]));
        }

    }
    public void drawRight(int begin,int end,int aPos,int bPos){//右边重载
        for(int i=begin;i<=end;i++){
            for(int j=1;j<=53;j++){System.out.print(" ");}   //  109?????
            System.out.println(getGraphics(map[i],i,aPos,bPos));
        }

    }
    public void drawMiddleLine(int begin,int end){//中间
        for(int i=end;i>=begin;i--){
            System.out.print(getGraphics(map[i]));
        }
        System.out.println();
    }
    public void drawMiddleLine(int begin,int end,int aPos,int bPos){//中间重载
        for(int i=end;i>=begin;i--){
            System.out.print(getGraphics(map[i],i,aPos,bPos));
        }
        System.out.println();
    }
    public void drawLeft(int begin,int end){//左边
        for(int i=begin;i<=end;i++){
            System.out.println(getGraphics(map[i]));
        }
    }
    public void drawLeft(int begin,int end,int aPos,int bPos){//左边重载
        for(int i=begin;i<=end;i++){
            System.out.println(getGraphics(map[i],i,aPos,bPos));
        }
    }
    public void showMap(int aPos,int bPos){//地图显示
        drawLine(0, 30,aPos,bPos);
        drawRight(31, 34,aPos,bPos);
        drawMiddleLine(35, 65,aPos,bPos);
        drawLeft(66, 69,aPos,bPos);
        drawLine(70, 99,aPos,bPos);
    }
    public String  getGraphics(int flag){//数字换成图像
        String icon=null;
        if(flag==0){icon="∷";}
        else if(flag==1){icon="◎";}
        else if(flag==2){icon="★";}
        else if(flag==3){icon="■";}
        else{ return icon="〓";}
        return icon;
    }
    /**
     *
     * @param flag   当前格子表示
     * @param index当前格子下标
     * @param aPos A的位置
     * @param bPos B的位置
     * @return
     */
    public String getGraphics(int flag,int index,int aPos,int bPos){//数字换图像重写
        String icon=null;
        if(index==aPos&&index==bPos){
            icon="@@";
        }else if(index==aPos){
            icon="A";
        }else if(index== bPos){
            icon="B";
        }else{
            icon=getGraphics(flag);
        }
        return icon;
    }
}

package flygame;

import java.util.Random;
import java.util.Scanner;

public class Game {
    //两个玩家
    Player[] player =new Player[2];
    //一张地图
    Map map;

    //游戏初始化
    public void init(){
//选角色
        Scanner in = new Scanner(System.in);
        for(int i=0;i<player.length;i++){
            System.out.println("请玩家1选择角色:1.吴煜鑫;  2.陆小涛; 3.王帅:");
            int choose=in.nextInt();

            player[i]=new Player();
            player[i].setName(getName(choose));
        }
//显示地图
        map=new Map();
        map.init();
//开始游戏
        start();
    }
    //根据用户选择得到对应的角色名称
    public String getName(int choose){
        String name=null;
        switch(choose){
            case 1:
                name="吴煜鑫";
                break;
            case 2:
                name="陆小涛";
                break;
            case 3:
                name="王帅";
                break;
        }
        return name;
    }

    //游戏开始
    public void start(){
        Scanner in = new Scanner(System.in);
//玩家循环掷筛子
        while(player[0].getPoint()<99&&player[1].getPoint()<99){
//A和B轮流掷
            for(int i=0;i<player.length;i++){
//player[i]是玩家A或者B
                if(player[i].isPause()){   //判断此玩家是不是被暂停了此轮
                    System.out.println(player[i].getName()+"暂停一轮");
                    player[i].setPause(false);
                    continue;
                }
                System.out.print("请玩家"+player[i].getName()+"掷骰子:");
                in.nextLine();
                int n=player[i].play();

                System.out.println("点数为:"+n);
                //大于等于99 此玩家胜利
                if(player[i].getPoint()+n>=99){
                    System.out.println(player[i].getName()+"获胜");
                    return;
                }
//改变位置
                player[i].setPoint(player[i].getPoint()+n);

//判断当前是否踩到关卡
                int pos=player[i].getPoint();
                int flag=map.map[pos];
                switch(flag){
                    case 0:
                        common(i);
                        break;
                    case 1:
                        //luckyTurn(i);
                        i--;map.showMap(player[0].getPoint(),player[1].getPoint());
                        System.out.println("恭喜你幸运轮盘,继续扔骰子!");
                        continue;
                        //break;
                    case 2:
                        landMine(i);
                        break;
                    case 3:
                        pause(i);
                        break;
                    case 4:
                        timeTunnel(i);
                }

//重绘地图
                map.showMap(player[0].getPoint(),player[1].getPoint());
            }
        }
    }

    public void common(int i){//前进到普通格处理,i为当前玩家
        if(player[0].getPoint()==player[1].getPoint()){
            if(i==0){System.out.println(player[1].getName()+"被踢回原点");player[1].setPoint(0);}
            else{System.out.println(player[0].getName()+"被踢回原点");player[0].setPoint(0);}
        }
    }
//   public void luckyTurn(int i){   //幸运轮盘,交换或轰炸(退六)
//        Scanner in = new Scanner(System.in);
//        System.out.println("恭喜遇到幸运轮盘,选择功能 1-与对方交换位置 2-轰炸对方");
//        int choose=in.nextInt();
//        switch(choose){
//            case 1:
//                if(i==1){
//                    int change=player[1].getPoint();
//                    player[1].setPoint(player[0].getPoint());
//                    player[0].setPoint(change);
//                }else{
//                    int change=player[0].getPoint();
//                    player[0].setPoint(player[1].getPoint());
//                    player[1].setPoint(change);
//                }
//                break;
//            case 2:
//                if(i==0){
//                    if(player[1].getPoint()<6)player[1].setPoint(0);else player[1].setPoint(player[1].getPoint()-6);
//                }
//                else {
//                    if(player[0].getPoint()<6)player[0].setPoint(0);else player[0].setPoint(player[0].getPoint()-6);
//                }
//                break;
//            default:
//                System.out.println("默认选择轰炸");
//                if(i==0){
//                    if(player[1].getPoint()<6)player[1].setPoint(0);else player[1].setPoint(player[1].getPoint()-6);
//                }
//                else {
//                    if(player[0].getPoint()<6)player[0].setPoint(0);else player[0].setPoint(player[0].getPoint()-6);
//                }
//        }
//    }
    public void landMine(int i){//踩地雷

        Random ran = new Random();
        int xx = ran.nextInt(6) + 1;
        System.out.println(player[i].getName()+"踩到地雷,后退"+xx+"步");
        if(player[i].getPoint()<xx)
        {player[i].setPoint(0);}
        else
        {player[i].setPoint(player[i].getPoint()-xx);}
    }
    public void pause(int i){//暂停一圈
        player[i].setPause(true);
    }
    public void timeTunnel(int i){//时空隧道
       if( player[i].getPoint()<=88 ){
           System.out.println(player[i].getName()+"进入时空隧道,到达下一个时空");
           switch (player[i].getPoint()){
               case 20: player[i].setPoint(25) ;break;
               case 25: player[i].setPoint(45);break;
               case 45: player[i].setPoint(63);break;
               case 63: player[i].setPoint(72);break;
               case 72: player[i].setPoint(88);break;
               case 88: player[i].setPoint(90);break;

           }
       }else {
           System.out.println("由于您在最后一个时空,穿越到第一个时空");
           player[i].setPoint(20);
       }

    }
}

package flygame;

public class test {
    public static void main(String[] args) {
        Game game=new Game();
        game.init();
    }
}

  • 9
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
游戏介绍 基本规则 起飞 只有在掷得6点后,方可将一枚棋子由“基地”起飞至起飞点,并可以再掷骰子一次,确定棋子的前进步数;在改进规则场中,只要掷得5点以上的点数就可以起飞。 连投奖励 在游戏进行过程中,掷得6点的游戏者可以连续投掷骰子,直至显示点数不是6点或游戏结束。 迭子 己方的棋子走至同一格内,可迭在一起,这类情况称为“迭子”。敌方的棋子不能在迭子上面飞过;当敌方的棋子正好停留在“迭子”上方时,敌方棋子与2架迭子棋子同时返回停机坪。若其它游戏者所掷点数大于他的棋子与迭子的相差步数,则多余格数为由迭子处返回的格数;但当其它游戏者所掷点数是6而且大于他得棋子与迭子的相差步数时,那么其它游戏者的棋子可以停于迭子上面,但是当该游戏者依照规则自动再掷点的时候,服务器自动走刚才停于迭子上面的棋子。 如果棋子在准备通过虚线时有其他棋子停留在虚线和通往终点线路的交叉点时:A、如果对方是一个棋子,则将该棋子逐回基地,本方棋子继续行进到对岸;B、如果对方是两个棋子重叠则该棋子不能穿越虚线、必须绕行。 撞子 棋子在行进过程中走至一格时,若已有敌方棋子停留,可将敌方的棋子逐回基地。 跳子 棋子在地图行走时,如果停留在和自己颜色相同格子,可以向前一个相同颜色格子作跳跃。 飞棋 棋子若行进到颜色相同而有虚线连接的一格,可照虚线箭头指示的路线,通过虚线到前方颜色相同的的一格后,再跳至下一个与棋子颜色相同的格内;若棋子是由上一个颜色相同的格子跳至颜色相同而有虚线连接的一格内,则棋子照虚线箭头指示的路线,通过虚线到前方颜色相同的的一格后,棋子就不再移动。 终点 “终点”就是游戏棋子的目的地。当玩家有棋子到达本格时候,表示到达终点,不能再控制该棋子。传统飞行棋规则里,玩家要刚好走到终点处才能算“到达”,如果玩家扔出的骰子点数无法刚好走到终点出,多出来的点数,棋子将往回走。 在改进规则场中,如骰子点数多过于到终点的格数,也不需要后退,可以直接胜利返回。 对家配合模式 相对而坐的玩家为配合的一方,彼此的棋子相遇不相互攻击,做“迭子”处理。 胜负判定 混战模式时某一方的四个棋子领先其他方都到达终点则游戏结束,先将所有棋子走到终点的一方获胜。 配合模式时某一方两玩家的八个棋子领先另一方都到达终点则游戏结束,先将所有棋子走到终点的一方获胜。 四.计分规则 以房间规定的分数,按游戏的总棋子数平分,玩家在游戏结束时候没有到达终点的棋子有多少个就扣掉多少分,没有到达终点的棋子数的分数都加到第一名的分数中去。如果是游戏币房间,那么游戏币的分配比例和积分的分配比例相同。 如:第一名进4棋 第二名进3棋 第三名2棋 第四名1棋。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值