我们现在要做一个项目
一个小小的程序
叫做快速击键
很明了的目的
就是在规定时间内,每次出现一组字母的组合,这个字母只能在DFJK中生成
然后输入相应的文字,按回车 自动判断输入的是否正确
在规定时间内输入完要求的组合数的字符串可以晋级
一共有六个等级
首先等级类
public class Level { private int levelNo; //等级编号 private int steLength; //当前等级字符串的长度 private int strTimes; //当前等级字符串的出现次数 private int timeLimit; //当前等级的总时间 private int perScore; //每一个键的积分 public Level(int levelNo, int steLength, int strTimes, int timeLimit, int perScore) { super(); this.levelNo = levelNo; this.steLength = steLength; this.strTimes = strTimes; this.timeLimit = timeLimit; this.perScore = perScore; }
然后使用一个静态类初始化一个等级类的数组
public class LevelPara { //一个静态常量Level对象数组,保存每一级的初始化信息 public final static Level[] lv; static{ lv=new Level[6]; lv[0]=new Level(1, 2, 10, 30, 1); lv[1]=new Level(2, 3, 9, 28, 2); lv[2]=new Level(3, 4, 8, 26, 4); lv[3]=new Level(4, 5, 8, 24, 8); lv[4]=new Level(5, 6, 9, 22, 16); lv[5]=new Level(6, 8, 8, 20, 32); }
然后呢 还有两个类
一个是玩家类 一个是游戏类 玩家调用游戏类的方法,游戏类中保存当前玩家类的对象
import java.util.Scanner; public class Player { private int levelNo; //等级名称 private int score; //当前分数 private long startTime; //开始时间 private int elapsedTime;//已经过去的时间 public void play(){ //新建一个游戏,游戏玩家是自己 Game game=new Game(); game.setPlayer(this); Scanner sc=new Scanner(System.in); //循环6个难度等级 for(int i=0;i<6;i++){ levelNo=i+1; score=0; startTime=System.currentTimeMillis(); //进行每一级的游戏 for(int j=0;j<LevelPara.lv[i].getStrTimes();j++){ String str=game.printStr(LevelPara.lv[i].getSteLength()); System.out.println(str); String input=sc.next(); //判断是否输入正确 if(str.equalsIgnoreCase(input)){ game.printResualt(); } else{ System.out.println("输入错误,游戏结束!"); System.exit(1); } } System.out.println(" 晋级! "); } System.out.println("你太NB了,全过关了!!!"); }
玩家类中有一个play方法进行游戏 利用双重循环
接下来我们看游戏类Game类的方法
public class Game { private Player player; //保存一个玩家对象 //打印出下一个字符串 public String printStr(int length) { StringBuffer sb=new StringBuffer(); Random rd=new Random(); //循环产生随机数 for(int i=0;i<length;i++){ int rand=rd.nextInt(4); switch(rand){ case 0: sb.append("D"); break; case 1: sb.append("F"); break; case 2: sb.append("J"); break; case 3: sb.append("K"); break; } } return sb.toString(); } public void printResualt() { //判断是否超时 long current=System.currentTimeMillis(); if((current-player.getStartTime())/1000 >LevelPara.lv[player.getLevelNo()-1].getTimeLimit()){ System.out.println("你输入太慢了,已经超时,自动退出!"); System.exit(1); } //计算当前积分 player.setScore(player.getScore()+ LevelPara.lv[player.getLevelNo()-1].getPerScore()); //获取已用时间 int time=(int)(current-player.getStartTime())/1000; System.out.println("输入正确,您的级别为"+player.getLevelNo() +"您的积分为"+player.getScore()+"已经用时"+time+"秒."); }
Test类中new一个Player类对象
然后调用Play方法开始游戏
效果如下