• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
小不点儿大的由我做主!
流年似水!
博客园    首页    新随笔    联系   管理    订阅  订阅

java示例之--骑士飞行棋实例

今天终于完成了“骑士飞行棋”的程序,虽然大部分的程序已经给出,并且高试也是在原程序的基础上改正的,不过收获还是挺多的。下面的完整的代码!

(1)地图类 Map.java

Code
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 == playerPos2){
       graph 
= "@@";
   }
else if(index == playerPos1){
       graph 
= "A";
   }
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="∷";break;
       }
    }
    
    
return graph;
    }
    
    
/**
     * 输出地图的奇数行(第1、3行)
     * 
@param start 输出的起始点在地图上的位置
     * 
@param end 输出的结束点在地图上的位置
     * 
@param playerPos1 玩家1的当前位置
     * 
@param playerPos2 玩家2的当前位置
     
*/

    
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));
    }
    
    }
    
    
/**
     * 输出地图的偶数行(第2行)
     * 
@param start 输出的起始点在地图上的位置
     * 
@param end 输出的结束点在地图上的位置
     * 
@param playerPos1 玩家1的当前位置
     * 
@param playerPos2 玩家2的当前位置
     
*/
    
public void showLine2(int start, int end, int playerPos1, int playerPos2){    
    
for(int i = end-1; i >= start; i-- ){ 
       System.out.print(getGraph(map[i], i,playerPos1, playerPos2));
    }
    }
    
    
/**
     * 输出地图的右竖列
     * 
@param start 输出的起始点在地图上的位置
     * 
@param end 输出的结束点在地图上的位置
     * 
@param playerPos1 玩家1的当前位置
     * 
@param playerPos2 玩家2的当前位置
     
*/
    
public void showRLine(int start, int end, int playerPos1, int playerPos2){
    
for(int i = start; i< end; i++){
        
for(int j = 28; j > 0; j--){ //输出29个空格
         System.out.print(" ");
        }
        System.out.print(getGraph(map[i], i,playerPos1, playerPos2));
        System.out.println();
    }
    }
    
    
/**
     * 输出地图的左竖列
     * 
@param start 输出的起始点在地图上的位置
     * 
@param end 输出的结束点在地图上的位置
     * 
@param playerPos1 玩家1的当前位置
     * 
@param playerPos2 玩家2的当前位置
     
*/
    
public void showLLine(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();
    }
    
    }

    
/**
     * 显示对战地图
     * 
@param playerPos1 玩家1的当前位置
     * 
@param playerPos2 玩家2的当前位置
     
*/
    
public void showMap(int playerPos1, int playerPos2){
    
//显示地图第一行
    showLine1(0,31,playerPos1,playerPos2);
    
//换行
    System.out.println();
    
//显示地图右竖行
    showRLine(31,35,playerPos1,playerPos2);
    
//显示地图第二行
    showLine2(35,66,playerPos1,playerPos2);
    
//换行
    System.out.println();
    
//显示地图左竖行
    showLLine(66,69,playerPos1,playerPos2);
        
//显示地图第3行
    showLine1(69,100,playerPos1,playerPos2);
    } 

 

(2)游戏类 Game.java

Code
package s1java.xmal1;

import java.util.*;
public class Game {
    Map map; 
//地图
    int playerPos1; //对战中玩家1的当前位置
    int playerPos2; //对战中玩家2的当前位置
    String[] goAndStop = new String[2];   //走或停标识设置
    String[] playerName = new String[2]; //对战角色
    
    
/**
     * 初始化游戏的一局
     
*/
    
public void init(){   
       map 
= new Map();
       map.createMap(); 
//生成地图
         playerPos1 = 0;   //设置玩家1起始位置
         playerPos2 = 0;   //设置玩家2起始位置
         goAndStop[0] = "on"; //记录玩家1下一次走或停
         goAndStop[1] = "on"; //设置玩家2下一次走或停
    }
      
    
    
/**
     * 开始游戏
     
*/
      
public void start(){
       
//调用初始化方法
       init();
         
//显示游戏界面
       System.out.println("******************************");
       System.out.println(
"//                           //");
       System.out.println(
"//                           //");
       System.out.println(
"//        骑 士 飞 行 棋     //");
       System.out.println(
"//                           //");
       System.out.println(
"//                           //");
       System.out.println(
"******************************");
       System.out.println();
       System.out.println();
       System.out.println();
       System.out.println();
       System.out.println(
"---------------两 人 对 战---------------");
       System.out.println(
"请选择角色:1.桂琳 2.刘迎迎 3.李景 4.霍婷");

    Scanner input 
= new Scanner(System.in);
          System.out.print(
"请玩家1选择角色: ");
          
int role1 = input.nextInt();
          
int role2;
          
do{
            System.out.print(
"请玩家2选择角色: ");
            role2 
= input.nextInt(); //双方选择角色代号
           }while(role2==role1); //不允许角色重复
          setRole(1, role1);   //设置玩家1代表的角色
          setRole(2, role2);   //设置玩家2代表的角色     
          play();   //开始两人对战
      }

//       System.out.print("请玩家1选择角色:");
//       BufferedReader reader1 = new BufferedReader(new InputStreamReader(System.in));
//     int role1 = Integer.parseInt(reader1.readLine());
//     System.out.print("请玩家2选择角色:");
//     BufferedReader reader2 = new BufferedReader(new InputStreamReader(System.in));
//    int role2 = Integer.parseInt(reader2.readLine());
//       
//       //角色设置
//     setRole(1,role1);//设置玩家1的角色
//     setRole(2,role2);//设置玩家2的角色
//     
//       //开始游戏
//          play();
      
      
      
/**
       * 设置对战角色
       * 
@param no 玩家次序 1:玩家1 2:玩家2
       * 
@param role 角色代号
       
*/
      
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;
        
default: 
         
break;
       }
      }
      
      
      
/**
       * 两人对战玩法
       
*/
     
public void play(){    
          System.out.println(
"\n\n\n\n");
          
        System.out.print(
"\n\n****************************************************\n");
        System.out.print(
"                     Game Start                    \n");
        System.out.print(
"****************************************************\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("骰子数: "+ step);
              playerPos1 
= getCurPos(1, playerPos1, step);   //计算这一次移动后的当前位置
              System.out.println("\n您当前位置: "+ playerPos1);
              System.out.println(
"对方当前位置:"+ playerPos2);
              System.out.println(
"-----------------\n");
              map.showMap(playerPos1, playerPos2); 
//显示当前地图
              if(playerPos1 == 99){ //如果走到终点
                  break;   //退出
                }
          }
else{
            System.out.println(
"\n" + playerName[0] +"停掷一次!\n");   //显示此次暂停信息
            goAndStop[0] = "on";   //设置下次可掷状态 

 

 & ...

posted @ 2008-09-17 11:13  小不点儿大的由我做主!  阅读(681)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3