打字游戏
一、需求概述
二、主要类
1.玩家类(Player)
2.游戏类(Game )
3.级别类(Level)
次要类:
4.规则接口
5.测试类
三、具体步骤
1、玩家类
成员变量:
private String name; //玩家名称
private int currScore; //玩家当前级别积分(currScore)
private long startTime; //当前级别开始时间(startTime)
private long uesdTime ; //当前级别已用时间(elapsedTime)
private int curlevel =1; //当前级别
成员方法:
玩游戏:play()
2、游戏类
成员变量:
private Player p; //玩家对象
成员方法:
随机生成指定长度字符串:showStr()
正常玩游戏:run()
3、等级类
成员变量:
private int levelNo; //级别编号
private int strLength; //字符串长度
private int strTimes; //输入次数
private int timeLimit; //限制时间
private int perScore; //每次输入正确的积分
成员方法:
无
四、代码实现
1.玩家类:
public class Player {
private String name; //玩家名称
private int currScore; //玩家当前级别积分(currScore)
private long startTime = System.currentTimeMillis(); //当前级别开始时间(startTime)
private long uesdTime ; //当前级别已用时间(elapsedTime)
private int curlevel =1; //当前级别
public void play(){
Game g = new Game();
g.setP(this);
g.run();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getCurrScore() {
return currScore;
}
public void setCurrScore(int currScore) {
this.currScore = currScore;
}
public long getStartTime() {
return startTime;
}
public void setStartTime(long startTime) {
this.startTime = startTime;
}
public long getUesdTime() {
return uesdTime;
}
public void setUesdTime(long uesdTime) {
this.uesdTime = uesdTime;
}
public int getCurlevel() {
return curlevel;
}
public void setCurlevel(int curlevel) {
this.curlevel = curlevel;
}
}
2.游戏类
public class Game {
private Player p;
private Scanner sc = new Scanner(System.in);
public Player getP() {
return p;
}
public void setP(Player p) {
this.p = p;
}
public String showStr(){ //随机生成一串字符串,根据用户等级生成不同长度的字符串
int curlevel = p.getCurlevel();
int lvellength = LevelParm.levels[curlevel-1].getStrLength();
String str = "";
for(int i =0 ;i<lvellength;i++){
//全部小写97~122
int a = (int)(97+(Math.random()*26));
char ch = (char)a;
str+=ch;
}
System.out.println(str);
return str;
}
/**
* 基本功能已实现
* */
public void run(){
System.out.println("欢迎来到打字通!");
System.out.println("请输入您的姓名");
String name = sc.next();
p.setName(name);
for (int j = 0; j < 6; j++) {
int curlevel = p.getCurlevel(); //获取用户当前等级
int cnt = LevelParm.levels[curlevel-1].getStrTimes(); //每轮多少次
int limit = LevelParm.levels[curlevel-1].getTimeLimit(); //每个等级要到多少轮
int perScore = LevelParm.levels[curlevel-1].getPerScore();//每次获得的积分
for (int i = 0; i < cnt; i++) {
System.out.println("实例:");
String s = showStr(); //获取随机生成字符串
long curTime = System.currentTimeMillis();
long useTime = curTime - p.getStartTime();
p.setUesdTime(useTime);
System.out.println("请输入:");
String input = sc.next(); //接收用户输入的字符串
if(!s.equals(input)){ //匹配字符串
System.out.println("输入错误,游戏结束");
System.exit(-1);
}else if(useTime>limit*1000){
System.out.println("输入时间超时,游戏结束");
System.exit(-2);
}
p.setCurrScore(p.getCurrScore()+perScore);
System.out.println("您的目前积分:"+p.getCurrScore()+"\t您的级别:"+p.getCurlevel()+"\t已用时间"+useTime/1000);
}
if(p.getCurlevel()==6){ //等级为6则通关,否则会出现7级情况
System.out.println("恭喜通关");
System.exit(1);
}
p.setCurlevel(p.getCurlevel()+1);
System.out.println("恭喜升级!");
p.setStartTime(System.currentTimeMillis()); //重新设置开始时间
}
}
}
3.等级类
public class Level {
private int levelNo; //级别编号
private int strLength; //字符串长度
private int strTimes; //输入次数
private int timeLimit; //限制时间
private int perScore; //每次输入正确的积分
public Level(int levelNo, int strLength, int strTimes, int timeLimit, int perScore) {
this.levelNo = levelNo;
this.strLength = strLength;
this.strTimes = strTimes;
this.timeLimit = timeLimit;
this.perScore = perScore;
}
public int getLevelNo() {
return levelNo;
}
public void setLevelNo(int levelNo) {
this.levelNo = levelNo;
}
public int getStrLength() {
return strLength;
}
public void setStrLength(int strLength) {
this.strLength = strLength;
}
public int getStrTimes() {
return strTimes;
}
public void setStrTimes(int strTimes) {
this.strTimes = strTimes;
}
public int getTimeLimit() {
return timeLimit;
}
public void setTimeLimit(int timeLimit) {
this.timeLimit = timeLimit;
}
public int getPerScore() {
return perScore;
}
public void setPerScore(int perScore) {
this.perScore = perScore;
}
}
4.规则接口
public interface LevelParm {
Level[] levels = {
new Level(1,10,3,50,3),
new Level(2,20,3,40,5),
new Level(3,20,3,30,6),
new Level(4,30,3,30,7),
new Level(5,30,3,30,8),
new Level(6,40,3,40,9),
};
}
5.测试类
public class Plantform {
public static void main(String[] args) {
Player p = new Player();
p.play();
}
}
实际效果