package s1java.xmal1;public class Map {
int map[] = new int[100];
int luckyTurn[] = {6,23,40,55,69,83};
int landMine[] = {5,13,17,33,38,50,64,80,94};
int pause[] = {9,27,60,93};
int timeTunnel[] = {20,25,45,63,72,88,90};
/**
 * 生成地图
 * 关卡代号为:1:幸运轮盘 2:地雷 3:暂停 4:时空隧道 0:普通
 *
 */
public void createMap() {
int i = 0;
for (i = 0; i < luckyTurn.length; i++) {
map[luckyTurn[i]] = 1;
}
for (i = 0; i < landMine.length; i++) {
map[landMine[i]] = 2;
}
for (i = 0; i < pause.length; i++) {
map[pause[i]] = 3;
}
for (i = 0; i < timeTunnel.length; i++) {
map[timeTunnel[i]] = 4;
}

}
/**
 * 显示地图关卡相对应的图形
 * @param i 地图当前位置的关卡代号
 * @param index 当前地图位置标号
 * @param playerPos1 玩家1的当前位置
 * @param playerPos2 玩家2的当前位置
 * @return 地图向前位置的对应图片 
 */
public String getGraph(int i,int index,int playerPos1,int playerPos2) {
String graph = "";
if(playerPos1 == index && playerPos2 == index) {
graph = "@@";
}else if (playerPos1 == index) {
graph = "A";
}else if (playerPos2 == index) {
graph = "B";
}else {
switch(i) {
   case 1:
   graph = "¤";
   break;
   case 2:
   graph = "★";
   break;
   case 3:
   graph = "■";
   break;
   case 4:
   graph = "〓";
   break;
   default:
   graph = "∷";
   
}
}
return graph;
}
public void showLine1(int start,int end,int playerPos1,int playerPos2) {
for(int i = start; i <= end; i++) {
System.out.print(getGraph(map[i],i,playerPos1,playerPos2));
}
System.out.println();
}
public void showRLine(int start,int end,int playerPos1,int playerPos2) {
for(int i = start; i <= end; i++) {
for(int j = 0; j < 30; j++) {
System.out.print(" ");
}
System.out.println(getGraph(map[i],i,playerPos1,playerPos2));
}
}
public void showLine2(int start,int end,int playerPos1,int playerPos2) {
for(int i = end; i >= start; i--) {
System.out.print(getGraph(map[i],i,playerPos1,playerPos2));
}
System.out.println();
}
public void showLLine(int start,int end,int playerPos1,int playerPos2){
for(int i = start; i <= end; i++) {
System.out.println(getGraph(map[i],i,playerPos1,playerPos2));
}
}
public void showMap(int playerPos1,int playerPos2) {
createMap();
showLine1(0,30,playerPos1,playerPos2);
showRLine(31,34,playerPos1,playerPos2);
showLine2(35,65,playerPos1,playerPos2);
showLLine(66,68,playerPos1,playerPos2);
showLine1(69,99,playerPos1,playerPos2);
}}

解决方案 »

  1.   

    package s1java.xmal1;
    import java.util.*;
    public class Game {
    Map map;     //创建Map类的对象map
    int playerPos1;   //记录玩家1的位置
    int playerPos2;   //记录玩家2的位置
    String goAndStop[] = new String[2];      //记录玩家下一次是走或是停
    String playerName[] = new String[2];     //记录玩家使用的角色

    /**
     * 初始化游戏
     */
    public void initial() {
    map = new Map();
    playerPos1 = 0;   
    playerPos2 = 0;
    goAndStop[0] = "on";   
    goAndStop[1] = "on";  
    }

    /**
     * 设置对战角色
     * @param no 玩家次序 1:玩家1  2:玩家2
     * @param role  角色代号 1:戴高乐 2:艾森豪威尔 3:麦克阿瑟  4:巴顿
     */
    public void setRole(int no, int role) {
    switch(role) {
       case 1:
       //设置玩家名称为“戴高乐”
       playerName[no-1] = "戴高乐";
       break;
       case 2:
       //设置玩家名称为“艾森豪威尔”
       playerName[no-1] = "艾森豪威尔";
       break;
       case 3:
       //设置玩家名称为“麦克阿瑟高乐”
       playerName[no-1] = "麦克阿瑟";
       break;
       case 4:
       //设置玩家名称为“巴顿高乐”
       playerName[no-1] = "巴顿";
       break;
    }
    }

    /**
     * 游戏界面及游戏相关配置
     */
    public void start() {
    initial();
    System.out.println("\n\t\t\t\t\t**************************************************");
    System.out.println("\t\t\t\t\t//                                              //");
    System.out.println("\t\t\t\t\t//                                              //");
    System.out.println("\t\t\t\t\t//             骑  士  飞  行  棋                //");
    System.out.println("\t\t\t\t\t//                                              //");
    System.out.println("\t\t\t\t\t//                                              //");
    System.out.println("\t\t\t\t\t**************************************************\n\n");
    System.out.println("\n\n\t\t\t\t\t-------------------两 人 对 战---------------------");
    System.out.println("\n\n请选择角色:1.戴高乐 2.艾森豪威尔 3.麦克阿瑟 4.巴顿");

    boolean con;
    do {
    con = false;
    System.out.print("\n请玩家1选择角色:");
    Scanner input = new Scanner(System.in);
    int role = input.nextInt();
    setRole(1,role);
    System.out.print("\n请玩家2选择角色:");
        int role1 = input.nextInt();
    setRole(2,role1);
    if(role == role1) {
    System.out.println("\n请玩家从新选择!");
    con = true;
    }else {

    }
    }while(con);
    play();
    }

    /**
     * 两人对战玩法
     */
    public void play() {
    System.out.println("\n\n\n\n");
    System.out.print("\n\n\t\t\t\t\t****************************************************\n\n");
    System.out.print("\t\t\t\t\t                   Game  Start                            \n");
    System.out.print("\n\t\t\t\t\t****************************************************\n\n");

    //显示对战双方士兵
    System.out.println("^-^"+playerName[0]+"的士兵: A");
    System.out.println("^-^"+playerName[1]+"的士兵: B\n");

    //显示对战地图
    System.out.println("\n图例: ■ 暂停  ¤ 幸运轮盘  ★ 地雷  〓 时空隧道  ∷ 普通\n");
    map.showMap(playerPos1, playerPos2);

    //游戏开始
    int step;          //存储色子数目
    while(playerPos1 < 99 && playerPos2 < 99) {         //有认可一方走到终点,跳出循环
    //轮流掷色子
    if(goAndStop[0].equals("on")) {
    //玩家1掷色子
    step = throwShifter(1);     //掷色子
    System.out.println("\n-----------------------------");        //显示结果信息
    System.out.println(playerName[0]+"的色子数:"+step);
    playerPos1 = getCurPos(1,playerPos1,step);        //计算这一次移动后的当前位置
    System.out.println("\n您当前位置: "+playerPos1);
    System.out.println("\n对方当前位置: "+playerPos2);
    System.out.println("-----------------------------\n");
    map.showMap(playerPos1,playerPos2);      //显示当前地图

    if(playerPos1 == 99) {          //如果走到终点
    break;                //退出
    }
    }else {
    System.out.println("\n"+playerName[0]+"停止一次!\n");
    goAndStop[0] = "on";
    }

    System.out.println("\n\n\n\n");

    if(goAndStop[1].equals("on")) {
    //玩家1掷色子
    step = throwShifter(2);     //掷色子
    System.out.println("\n-----------------------------");        //显示结果信息
    System.out.println(playerName[1]+"的色子数:"+step);
    playerPos2 = getCurPos(2,playerPos2,step);        //计算这一次移动后的当前位置
    System.out.println("\n您当前位置: "+playerPos2);
    System.out.println("\n对方当前位置: "+playerPos1);
    System.out.println("-----------------------------\n");
    map.showMap(playerPos1,playerPos2);      //显示当前地图

    if(playerPos2 == 99) {          //如果走到终点
    break;                //退出
    }
    }else {
    System.out.println("\n"+playerName[1]+"停止一次!\n");
    goAndStop[1] = "on";
    }

    System.out.println("\n\n\n\n");

    }

    //游戏结束
    System.out.println("\n\n\n\n");
    System.out.print("\n\n\t\t\t\t\t****************************************************\n\n");
    System.out.print("\t\t\t\t\t                   Game  Over                            \n");
    System.out.print("\n\t\t\t\t\t****************************************************\n\n");
    judge();
    }

    /**
     * 掷色子
     * @param no 玩家次序
     * @return step 掷色子的数目
     * 
     */
    public int throwShifter(int no) {
    System.out.print("请按任意键掷色子:");
    Scanner input = new Scanner(System.in);
    input.next();
    int step = (int)(Math.random()*6+1);
    return step;
    }

    /**
     * 计算玩家此次移动后的当前位置
     * @param no 玩家次序
     * @param position 移动前位置
     * @param step 掷色子的数目
     * @return position 移动后的位置
     */

    public int getCurPos(int no, int position, int step) {
    position += step;     //第一次移动后的位置
    if(position >= 99) {
    return 99;
    }
    Scanner input = new Scanner(System.in);
    switch(map.map[position]) {          //根据地图中的关卡代号进行判断
       case 0:      //走到普通格
       if(playerPos1 == position) {            //如果玩家1遇到玩家2
       playerPos2 = 0;            //玩家2回起点
       System.out.println("仇人见面,分外眼红!给我回起点!");
       }
       if(playerPos2 == position) {            //如果玩家2遇到玩家1
       playerPos1 = 0;            //玩家1回起点
       System.out.println("仇人见面,分外眼红!给我回起点!");
       }
       break;
       case 1:     //幸运轮盘
       System.out.println("\n\n\t\t\t\t◆◇◆◇◆欢 迎 进 入 幸 运 轮 盘◆◇◆◇◆");
       System.out.println("    请选择一种运气:");
       System.out.println("    1.交换位置  2.轰炸");
       System.out.println("======================================\n");
       int choice = input.nextInt();
       int temp;            //交换时的临时变量
       switch(choice) {
          case 1:   //交换位置
           if(no == 1) {
           temp = playerPos2;
           playerPos2 = position;
           position = temp;
           
           }else if(no == 2) {
           temp = playerPos1;
           playerPos1 = position;
           position = temp;
           
           }
              break;
          case 2:   //轰炸
           if(no == 1 && playerPos2 < 6) {
           playerPos2 = 0;
           }else {
           playerPos2 -= 6;
           }
           if(no == 2 && playerPos1 < 6) {
           playerPos1 = 0;
           }else {
           playerPos1 -= 6;
           }
           break;
           
       }
       break;
       case 2:        //踩到地雷
       position -= 6;
       System.out.println("我晕,踩到地雷了,气死了!");
       break;
       case 3:        //下一次暂停一次
       if(no == 1) {
       goAndStop[0] = "off";
       System.out.println(playerName[0]+"将军停战一局 -->_<-- ");
       }
       if(no == 2) {
       goAndStop[1] = "off";
       System.out.println(playerName[1]+"将军停战一局 -->_<-- ");
       }
      
       break;
       case 4:        //时空隧道
       position += 10;
       System.out.println("|-)  进入时空隧道了,娃哈哈,好爽,我飞!");
       break;
    }

    //返回此次掷色子后玩家的坐标位置
    if(position < 0) {
    return 0;
    }else if(position > 99) {
    return 99;
    }else {
    return position;
    }
    }

    /**
     * 显示对战结果
     */
    public void judge() {
    if(playerPos1 > playerPos2) {
    System.out.println("恭喜!"+playerName[0]+"将军获得了胜利!");
    }else {
    System.out.println("恭喜!"+playerName[1]+"将军获得了胜利!");
    }
    }

    /**
     * @author edison
     * 游戏开始
     */
    public static void main(String[] args) {
    Game game = new Game();
    game.start(); }}
      

  2.   

    我把我的代码发给你看下 
    /*
     * 描述:制作飞行棋地图类
     * 
     * 作者:刘华升
     * 
     * 时间:第1次 写: 2008年8月10日
     *      第2次 写: 2008年8月11日
     *      第3次 写: 2008年8月12日
     */
    package CavalierFlyChess;
    public class Map {
    //建立数组:
    int[] map = new int[100]; //地图有100格子
    int[] luckyturn = {14,35,55,85,95}; //幸运轮盘的 位子
    int[] dead = {7,24,53,68,75,83,97}; //地雷的 位子
    int[] pause = {9,18,26,32,46,57,65,88,94}; //暂停的 位子
    int[] turn = {10,15,58,67,73,88,92}; //时空穿梭的 位子                     
    public void creatMap(){
    int i = 0 ;
    //生成地图 
    for(i=0;i<luckyturn.length;i++){
    map[luckyturn[i]] = 1 ;
    }
    for(i=0;i<dead.length;i++){
    map[dead[i]] = 2 ;
    }
    for(i=0;i<pause.length;i++){
    map[pause[i]] = 3 ;
    }
    for(i=0;i<turn.length;i++){
    map[turn[i]] = 4 ;
    }
        }
    /*
     * 显示地图:
     *   设置幸运转盘、地雷、暂停、时空穿梭、 普通格的图象。 
     *   编写1.3行的地图
     *   编写2行的地图 
     *   编写右边行的地图
     *   编写左边行的地图
     *   i为关卡代号;
     *   index为当前地图编号
     *   playerPos1为玩家1的地图编号
     *   playerPos2为玩家2的地图编号
     *    
     *
     */
      public String getGraph(int i ,  int index , int playerPos1, int playerPos2){
        String graph = " ";
        //显示地图
        //当2个人在一起的时候显示@@
          if(index == playerPos1 && index== playerPos2){
            graph = "@@";
          }//玩家一显示A
          else if(index == playerPos1){  
            graph = "A";
            }//玩家二显示B
          else if(index == playerPos2){
              graph = "B";
            }else{
              switch(i){
             case 1:    //幸运轮盘
               graph = "¤";
                 break;         
             case 2:    //地雷
               graph = "★";
               break;
             case 3:    //暂停
               graph = "■";
               break;
             case 4:    //时空隧道
               graph = "〓";
               break;
             default:
               graph = "∷"; //普通格子
              }
            }
          return graph;
      }
      //第一行 和第三行 地图
      public void showLine1(int start, int end , int playerPos1,int playerPos2){
      for(int i = start; i < end ; i++){
      System.out.print(getGraph(map[i], i, playerPos1, playerPos2));
          }
      }
      //第二行 地图
      public void showLine2(int start, int end, int playerPos1, int playerPos2){    
          for(int i = end - 1; i > start -1 ; i-- ){  
            System.out.print(getGraph(map[i], i,playerPos1, playerPos2));
          }
      }
      //右边的地图
     public void showLineR(int start,int end , int playerPos1,int playerPos2){
     for (int i = start ; i < end ; i++) {
    for (int j = 29 ;  j > 0; j-- ) {
    System.out.print(" ");
    }
    System.out.println(getGraph(map[i], i, playerPos1, playerPos2));
    }
    }
      //左边的地图
      public void showLineL(int start, int end, int playerPos1, int playerPos2){
          for(int i = start; i < end; i++){
            System.out.println(getGraph(map[i], i ,playerPos1, playerPos2));
          }   
      }
      //调用 前面4个地图,生成总的地图。
        public void showMap(int playerPos1, int playerPos2){
            showLine1(0, 30, playerPos1, playerPos2);   //显示地图第一行
            System.out.println();
            showLineR(30,35, playerPos1, playerPos2);   //显示地图右竖行
            showLine2(35,65, playerPos1, playerPos2);  //显示地图第二行
            System.out.println(); 
            showLineL(65,70, playerPos1, playerPos2);  //显示地图左竖行
            showLine1(70,100, playerPos1, playerPos2); //显示地图第3行
          }  

      

  3.   

    /*
    *测试地图类
    */package CavalierFlyChess;public class TestMap {
      public static void main(String[] args) {
     String[] goAndStop = new String[2];   
     String[] playerName = new String[2]; 
     Map map = new Map();
     map.creatMap();
     map.showMap(36,35);
      }
    }
      

  4.   

    package CavalierFlyChess;
    import java.util.*;
    public class Game {
    Scanner input = new Scanner(System.in);
    //用map对象调入map类
    Map map = new Map();
    int playerPos1;
    int playerPos2;
    String[] playerName = new String[2]; //建立数组玩家名称
    String[] goAndStop = new String[2]; //建立数组玩家走或者停
    //  建立类玩家走或者停
    public void init(){
    map.creatMap(); //生成地图
    int playerPos1 = 0;
    int playerPos2 = 0;
    goAndStop[0] = "on"; //玩家行状态开
    goAndStop[1] = "on";
    }
    //建立选择人物类
    public void setRole(int no,int role){
    switch(role){
    case 1:
    playerName[no-1] = "戴高乐" ;
    break;
    case 2:
    playerName[no-1] = "艾森豪威尔";
    break;
    case 3:
    playerName[no-1] = "麦克阿瑟";
    break;
    case 4:
    playerName[no-1] = "巴顿";
    break;
    }
    }
    //建立游戏开始类
    public void start(){
    //调入对象的初始属性
    init();
    Scanner input = new Scanner(System.in);
    System.out.println("*************************************************************************");
    System.out.println("//                                                                     //");
    System.out.println("//                                                                     //");
    System.out.println("//                    骑士飞行棋                                                       //");
    System.out.println("//                                                                     //");
    System.out.println("//                                                                     //");
    System.out.println("*************************************************************************");
    System.out.println("\n\n\n\n\n");
    System.out.println("***********************两人对战********************************************");
    System.out.println("请选择角色:1、戴高乐 2、艾森豪威尔 3、麦克阿瑟 4、巴顿");
    int choice1 = 0 ;
    int choice2 = 0 ;
    System.out.print("\n请玩家1选择:");
    choice1 = input.nextInt();
    //判断玩家2是否和 玩家1重复选择
    do{
    System.out.print("请玩家2选择:");
    choice2 = input.nextInt();
    }while(choice2 == choice1);
    setRole(1, choice1);
    setRole(2, choice2);
    play(); 
    }
    //建立游戏  中的类
    public void play(){

    System.out.println("\n\n\n\n");
    System.out.println("*******************************************************************************");
    System.out.println("//                                                                           //");
    System.out.println("//                          Game Start                                       //");
    System.out.println("//                                                                           //");
    System.out.println("********************************************************************************\n\n");
    System.out.println("^_^" +playerName[0] + "的士兵: A ");
    System.out.println("^_^" +playerName[1] + "的士兵: B \n ");
    System.out.println("\n图例:"+ "暂停 幸运轮盘 地雷 时空隧道");
    map.showMap(playerPos1, playerPos2);
    int step;
    //当玩家都没有到99格的时候
    while(playerPos1 < 99 && playerPos2 < 99){
    //当玩家1开始走棋的时候
    if(goAndStop[0].equals("on")){
    step = throwShifter(' ');
    System.out.println("\n -------------------");
    System.out.println("骰子数" + step);
    playerPos1 =getCurPos(1,playerPos1,step);
    System.out.println("\n 当前你的位子:" + playerPos1);
    System.out.println("\n 当前对方的位子:" + playerPos2);
    System.out.println("-----------------------\n");
    map.showMap(playerPos1, playerPos2);
    //如果玩家1 到了终点
    if(playerPos1 == 99){
    gameOver();
      break;
    }
    }//如果玩家1没有到终点 
    else{
    System.out.println("\n" + playerName[0] + "休息!! \n");
    goAndStop[0] = "on";
    }
    System.out.println("\n\n\n\n");
    //当玩家2开始走棋的时候
    if(goAndStop[1].equals("on"));
    step = throwShifter(' ');
    System.out.println("\n -----------------------");
    System.out.println("骰子数: " + step);
    playerPos2=getCurPos(2,playerPos2,step);

    System.out.println("\n 当前你的位子:" +playerPos2);
    System.out.println("\n 当前对方的位子:" + playerPos1);
    map.showMap(playerPos1, playerPos2);
    if(playerPos2 == 99){
    gameOver();
      break;
    }else{
      System.out.println(" \n" + playerName[1] + " 休息一次!!! \n");
      goAndStop[1] = "on" ;
    }
    }
    System.out.println("\n\n\n\n");
    } //建立丢骰子类
    public int throwShifter(char no){
    Scanner input = new Scanner(System.in);
    System.out.println();
    System.out.println("请丢骰子");
    no = input.next().charAt(0);
    int step = (int)(Math.random()*10%6+1);
    return step;
    }
    //建立玩家在游戏过程中碰到的情况的类
    public int getCurPos(int no,int position,int step){
    position = position + step ;
    if(position > 99){
    return 99 ;
    }
    //当相互碰到一起的情况
    switch(map.map[position]){
    //在普通格子里
    case 0 :
    //如果2人碰到一起了
    //玩家2 碰到玩家1 玩家1回家
     if(no ==  1 && playerPos2 == position){

    System.out.println("哈哈 踩到你了!!" + playerName[no] + ":-D");
    playerPos2 = 0 ;
     }
    //玩家1 碰到玩家2 玩家2回家
     else if(no ==  2 && playerPos1 == position){
    playerPos1 = 0;
    System.out.println("哈哈 踩到你了!!" + playerName[no - 1] + ":-D");
     }
    break;
    //玩家碰到幸运轮盘的情况
    case 1:
    System.out.println("欢迎进入幸运轮盘!!");
    System.out.println("请选择:\n  1.交换位子\t 2.轰炸");
    int choice = input.nextInt();
    int temp  ; 
    switch(choice){
    //当玩家选择交换位子
    case 1 :
    if(no == 1){
     temp = position ; 
     position = playerPos2 ;
     playerPos2 = temp ;
    }else if(no == 2){
     temp = position ; 
     position = playerPos1 ;
     playerPos1 = temp ;
    }
    break;
    //当玩家选择轰炸 这另一个玩家退后6格
    case 2 :
    if( no == 1 &&  playerPos2 < 6 ){
    playerPos2 = 0 ;
    }else if( no == 1 &&  playerPos2 >6 ){
    playerPos2 -= 6 ;
    }else if(no == 2 && playerPos1 <  6 ){
    playerPos1 = 0 ;
    }else{
    playerPos1 -= 6 ;
    }
    break;
    }
    break;
    //踩到地雷的情况
    case 2:
    position = position - 6 ;
    System.out.println("踩到地雷了,气死了!!!");
    break;
    //遇到暂停的情况
    case 3:
    goAndStop[no-1] = "off" ;
    System.out.println("休息,休息一会!!!");
    break;
    //遇到时空穿梭的情况
    case 4:
    position = position + 10 ;
    System.out.println("坐飞机就是爽啊!!!");
    break;
    }
    if(position <0){
     return 0;
    }else if(position>99){
    return 99 ;
    }else{
    return position;
    }

    }
    //游戏结束的时候
    public void judge(){
    //如果玩家1 到了终点
    if(playerPos1 > playerPos2){
    System.out.println("恭喜" + playerName[0] + "你赢的了比赛!!");
    }else if(playerPos2 > playerPos1){
    System.out.println("恭喜" + playerName[1] + "你赢的了比赛!!");

    } public void gameOver(){
     System.out.println("\n************************************************************************");
     System.out.println("//                                                                    //");
     System.out.println("//                    Game       Over                                 //");
     System.out.println("//                                                                    //");
     System.out.println("************************************************************************");  
      judge();
    }
    }