测试类,测试类主要是用于引用,将我们进行引入
package com.ytzl.Project.work;
public class Test {
public static void main(String[] args) {
Player player = new Player();
player.play();
}
}
实体类1,该类主要用于输出系统随机字符,接收玩家打印字符,并传入game类进行判断
package com.ytzl.Project.work;
import java.util.Scanner;
public class Player {
private int levelNo;//当前级别号
private int currScore;//当前级别积分
private long startTime;//开始时间
private long elapsedTime;//已用时间
public Player() {
}
public Player(int levelNo, int currScore, long startTime, long elapsedTime) {
this.levelNo = levelNo;
this.currScore = currScore;
this.startTime = startTime;
this.elapsedTime = elapsedTime;
}
public int getLevelNo() {
return levelNo;
}
public void setLevelNo(int levelNo) {
this.levelNo = levelNo;
}
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 getElapsedTime() {
return elapsedTime;
}
public void setElapsedTime(long elapsedTime) {
this.elapsedTime = elapsedTime;
}
//玩游戏
public void play(){
Game game = new Game(this);
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < LevelParam.levels.length; i++) {
//晋级
this.levelNo+=1;
//2.时间开始计时
this.startTime = System.currentTimeMillis();
//3.积分清零
this.currScore = 0;
//4.内层循环 循环的是电脑输出,玩家输入,比较
for (int j = 0; j < LevelParam.levels[levelNo-1].getStrTimes(); j++) {
//4.1 电脑输出字符串
String out = game.printStr();
//4.2 接受用户输入
String in = scanner.next();
//4.3 比较,并判断结果
game.printResult(out,in);
}
}
}
}
实体类2,该类主要用于创造随机字符,根据玩家打印字符进行判断。
package com.ytzl.Project.work;
import java.util.Random;
public class Game {
/*
* 构造方法传入玩家信息
* */
private Player player;
public Game(Player player) {
this.player=player;
}
String printStr(){
//从创建好的player对象中获取级别号
//因为我们需要将Game中和player中的
//两个方法对应的级别统一
int strLength = LevelParam.
levels[player.
getLevelNo() -1].getStrLength();
//随机数
Random random = new Random();
// *** 作字符串
StringBuffer buffer = new StringBuffer();
//buffer.append() 字符串的连接
for (int i = 0; i < LevelParam.levels[player.getLevelNo()-1].getStrLength(); i++) {
//生成随机数
int rand=random.nextInt(4);
switch (rand){
case 0:
buffer.append(">");
break;
case 1:
buffer.append("<");
break;
case 2:
buffer.append("/");
break;
case 3:
buffer.append("%");
break;
case 4:
buffer.append("&");
break;
default:
break;
}
}
System.out.println(buffer.toString());
return buffer.toString();
}
public void printResult(String out,String in){
boolean flag;
if (out.equals(in)){
flag=true;
}else {
flag=false;
}
//第一层:是否输入正确
if (flag){
//第二层:是否超时
//currentTime :输入正确之后拿到的时间
long currentTime=System.currentTimeMillis();
if (
//currentTime : 160345678325
//getStartTime : 160345678330
(currentTime-player.getStartTime())/1000>LevelParam.levels[player.getLevelNo()-1].getTimeLimit()
){
System.out.println("你已超时,游戏结束!");
System.exit(1);
}else {
//没有超时
//计算当前积分
//当前积分 + 各级别给的积分
player.setCurrScore(player.getCurrScore()
+LevelParam.levels[player.getLevelNo()-1].getPerScore());
//当前所用时间,用每一次输入正确之后的
//时间减去初始进入游戏时间
player.setElapsedTime((currentTime-player.getStartTime())/1000);
//输出语句
System.out.println("输入正确,您的级别为:"+player.getLevelNo()+
",您的积分为:"+player.getCurrScore()+
",已用时间为:"+player.getElapsedTime()+
"秒");
//判断是否闯关成功
if (player.getLevelNo() == 6){
int scroe= LevelParam.levels[player.getLevelNo()-1].getStrTimes()
*LevelParam.levels[player.getLevelNo()-1].getPerScore();
System.out.println("闯关成功!");
System.out.println("总积分为:"+scroe);
System.exit(1);
}
}
}else {
System.out.println("输入错误!退出");
System.exit(1);
}
}
}
实体类3,该类用于存储游戏等级,字符长度,字符次数,时间限制,正确得分
package com.ytzl.Project.work;
public class Level {
private int levelNo;//各级别号
private int strLength;//各级输入字符长度
private int strTimes;//各级数输入字符次数
private int timeLimit;//各级闯关时间限制
private int perScore;//各级输入正确得分
public Level() {
}
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,该类为数组类,用来设置level中的数据
package com.ytzl.Project.work;
public class LevelParam {
public final static com.ytzl.Project.work.Level levels[]=new com.ytzl.Project.work.Level[6];//对应六个级别
static {
levels[0] = new Level(1,2,10,30,1);
levels[1] = new Level(2,3,26,26,2);
levels[2] = new Level(3,4,33,33,4);
levels[3] = new Level(4,5,18,18,6);
levels[4] = new Level(5,6,14,14,8);
levels[5] = new Level(6,7,13,12,10);
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)