如何编辑简单打字游戏
先来简单看一下要求
一,我们可以先编写Player类,先把属性定义好,然后进行封装
public class Player { private String name; //定义姓名 private int lvlNo=1; //定义级别编号为1 private long startTime=System.currentTimeMillis(); //定义开始时间 private long usedTime; //定义已用时间 private int totalScores=0; //定义初始积分为0 public void play(Game g){//传参进来,传入当前对象 g.run(this);//注释1:this是本类对象 } public Player(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getLvlNo() { return lvlNo; } public void setLvlNo(int lvlNo) { this.lvlNo = lvlNo; } public long getStartTime() { return startTime; } public void setStartTime(long startTime) { this.startTime = startTime; } public long getUsedTime() { return usedTime; } public void setUsedTime(long usedTime) { this.usedTime = usedTime; } public int getTotalScores() { return totalScores; } public void setTotalScores(int totalScores) { this.totalScores = totalScores; } }
二,咱们可以编写级别类,接下来把级别编号等定义好,仍然进行封装
public class Level { private int lvlNo;//级别编号 private int charNum;//每次要匹配的字符数 private int perScore;//每次匹配成功获得的积分 private int limitTime;//每个级别限制的时间,单位为秒数 private int typeCnt;//每个级别要匹配的次数 public Level(int lvlNo, int charNum, int perScore, int limitTime, int typeCnt) { this.lvlNo = lvlNo; this.charNum = charNum; this.perScore = perScore; this.limitTime = limitTime; this.typeCnt = typeCnt; } public int getLvlNo() { return lvlNo; } public void setLvlNo(int lvlNo) { this.lvlNo = lvlNo; } public int getCharNum() { return charNum; } public void setCharNum(int charNum) { this.charNum = charNum; } public int getPerScore() { return perScore; } public void setPerScore(int perScore) { this.perScore = perScore; } public int getLimitTime() { return limitTime; } public void setLimitTime(int limitTime) { this.limitTime = limitTime; } public int getTypeCnt() { return typeCnt; } public void setTypeCnt(int typeCnt) { this.typeCnt = typeCnt; } }
三,接着咱们要配置好接口,建立好对象数组
public interface LevelParms { Level[] LEVELS={ new Level(1,2,2,20,3), new Level(2,3,3,35,4), new Level(3,4,4,50,5), new Level(4,5,5,60,5), new Level(5,5,6,60,6), new Level(6,6,7,50,5), }; }
四,设置好两个后面将要抛出的异常,分别是超时和打错字
public class InputTypeMismatchException extends RuntimeException{ public InputTypeMismatchException(String message) { super(message); } }
public class InputOutOfTimeException extends RuntimeException{ public InputOutOfTimeException(String message) { super(message); } // public InputOutOfTimeException(String message) { // super(message); } 五,最后开始编辑Game类
public class Game { private Scanner s = new Scanner(System.in); private Level[] levels = LevelParms.LEVELS; int a=0; long used; public void run(Player p) {//注释1:这里是把玩家看成属性,传参进来 //欢迎词 //开始游戏 int lvlNo = p.getLvlNo();//获取当前级别 if (lvlNo>6){//递归的退出时间 System.out.println("恭喜"+p.getName()+"成功通关"); return; } int cnt = levels[lvlNo - 1].getTypeCnt();//当前级别需要有多少个字符串相匹配 int charNum = levels[lvlNo - 1].getCharNum();//当前级别每次要匹配的字符数 //根据级别来打印当前的字符串,同时匹配 for (int i = 1; i <= cnt; i++) {//输入 ; String prinStr = randomString(charNum);//定义随机字符串 System.out.println("要匹配的字符串为:" + prinStr); boolean rst=isCorrect(prinStr); long now=System.currentTimeMillis();//系统当前的时间赋值 if (!rst){ // throw new InputTypeMismatchException("输入错误!游戏结束"); a=levels[i-1].getCharNum()+a; } used=now-p.getStartTime();//已经使用的时间 // p.setUsedTime(used); // int timeLimit=levels[lvlNo-1].getLimitTime();//现在的限定时间 // if(used>timeLimit*1000){//系统自带的时间是毫秒,我们前面定义的是秒 // throw new InputOutOfTimeException("输入超时,游戏结束!"); // } int score = p.getTotalScores() + levels[lvlNo - 1].getPerScore();//把积分塞给客户 p.setTotalScores(score); } p.setLvlNo(lvlNo+1);//升级操作 // p.setStartTime(System.currentTimeMillis());//把开始的时间设置为现在的时间,重置时间 run(p); } public String randomString(int charNum) { String str = ""; for (int i = 0; i < charNum; i++) { int num = (int) (Math.random() * 2); // char c=(char)(int)(Math.random()*26+96); char c = (char) (int) (Math.random() * 26 + (num == 0 ? 65 : 97)); str = str + c; } return str; } //输入并且匹配 public boolean isCorrect(String str) { boolean result = false; System.out.println("请输入:"); String input = s.next(); if (str.equals(input)) { return true; } return result; } public void text(){ int c=a; int b; int d=0; int p; int k; for (int j = 0; j < levels.length; j++) { d=levels[j].getCharNum()*levels[j].getTypeCnt()+d; k=levels[j].getTypeCnt(); if (j==levels.length-1){ b=100-(a*100)/k; p=((int)(d*60*60))/((int)(used/1000)); System.out.println("正确率为:"+b+"%"+"\t"+"打字速度为:"+p+"个字/小时"); } } } }