劲舞团

 /*
 * 游戏类
 */
package accp;
import java.util.Random;
public class GameData {
 String[] direction = new String[]{"↑","→","↓","←"};
 //游戏级别(难度)
 int level = 1;
 //标记每关的输入次数
 int dataIndex = 0;
 
 public String nextOutput(int lv){
  Random random = new Random();
  String output = "";
  for(int i = 0;i < lv;i++){
   int r = random.nextInt(4);
   output += direction[r];
  }
  return output;
 }
 /**
  * 下一关
  */
 public void nextLevel(){
  level += 1;
  System.out.println("/n----第[" + "]关----/n");
 }
 /**
  * @param lv 游戏关卡;1.2...
  * @return
  */
 public String nextRow(){
  String output = nextOutput(level);
  if(dataIndex >= 4){
   dataIndex = 0;
   return "lever_pass";
  }else{
   dataIndex += 1;
   return output;
  }
 }
}

/*
 * 裁判类
 */
package accp;

public class Judge {
 String[] resultString = new String[]{"太好了","加油","要小心了"};
 //结果级别,resultString的索引
 int resultLevel = 0;
 //当前时间
 long curTime = System.currentTimeMillis();
 //命中次数
 int hitCount = 0;
 //错误次数
 int missCount = 0;
 //总共次数
 int totalCount = 0;
 //每关的时间限制
 int MAX_SEC = 10;
 //所有关一共允许的失败次数
 int MAX_MISS_COUNT = 4;
 
 /**
  * 判断输入是否正确,是否超过限制次数,是否超时
  * @param curData 游戏要求的输入内容
  * @param curInput 玩家实际的输入内容
  * @return
  */
 public String judge(String curData,String curInput){
  String ret = "";
  if(null != curInput&&!"".equals(curInput)){
   /*如果输入不为空,也不为空字符串*/
   curInput = curInput.replaceAll("w","↑");
   curInput = curInput.replaceAll("s","↓" );
   curInput = curInput.replaceAll("a", "←");
   curInput = curInput.replaceAll("d", "→");
   if(curData.equals(curInput)){
    /*如果输入正确,增加一次命中次数*/
    ret = "[正确]";
    hitCount += 1;
   }else{
    /*如果输入错误,增加一次错误次数*/
    ret = "[错误]";
    hitCount += 1;
   }
  }else{
   /*如果输入为空或为空字符串,增加一次错误次数*/
   ret = "[错误]";
   hitCount += 1;
  }
  totalCount += 1;
  /*判断是否 超过次数*/
  if(missCount > MAX_MISS_COUNT){
   //超过限制次数则放回失败信息,游戏停止
   System.out.println("/n你失败了!你错了" + missCount + "次(最多" + MAX_MISS_COUNT + "次)");
   return "fail";
  }
  /*计算已用时间,并判断是否超时*/
  long secPassed = (System.currentTimeMillis()-curTime)/1000;
  if(secPassed > MAX_SEC){
   //超时则放回失败信息,游戏停止
   System.out.println("/n你失败了!你错了" + secPassed + "秒过去了(最多" + MAX_SEC + "秒)");
   return "fail";
  }
  //返回【正确】或【错误】信息
  return ret;
 }
 /**
  * 得到结果
  * @return
  */
 public String getResult(){
  resultLevel = missCount;
  resultLevel = (resultLevel > 2)?2:resultLevel;
  return "总共:" + totalCount + "/t命中:" + hitCount + "/t[" + resultString[resultLevel] + "]";
 }
 
 
}
/*
 * 游戏运行类
 */
package accp;
import java.util.Scanner;
public class QuickHit{
 //游戏数据对象
 GameData gdata = new GameData();
 //评判对象
 Judge judge = new Judge();
 //键盘输入对象
 Scanner input = new Scanner(System.in);
 //当前数据
 String curData = "";
 //当前输入
 String curInput = "";
 
 /**
  * 运行游戏
  */
 public void run(){
  boolean gaming = true;
  do{
   gaming = step();
   
  }while(gaming);
 }
 /**
  * 运行一步
  * @return 游戏是否结束
  */
 public boolean step(){
  //显示一行字符
  curData = gdata.nextRow();
  if(curData.equals("lever_pass")){
   //过关,打印结果
   System.out.println("/n恭喜过关," + judge.getResult());
   gdata.nextLevel();
   curData = gdata.nextRow();
   //过关后重设当前时间
   judge.curTime = System.currentTimeMillis();
  }
  System.out.println(curData);
  //获得输入
  curInput = input.nextLine();
  /*显示该步结果*/
  String result = judge.judge(curData,curInput);
  if(result.equals("fail")){
   return false;
  }else{
   System.out.println();
   return true;
  }
 }
 /**
  * 程序入口
  * @param args
  */
 public static void main(String[] args){
  System.out.println("游戏:《劲舞团》");
  System.out.println("游戏说明:每关限时30秒,有3次机会,↑:w,→:d,↓:s,←:a");
  System.out.println("/n----第[1]关----/n");
  QuickHit qh = new QuickHit();
  qh.run();
  
  
  
 }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值