当前位置 : 主页 > 编程语言 > java >

QuickHit 项目

来源:互联网 收集:自由互联 发布时间:2022-08-15
一 、项目需求 根据输入速率和正确率将玩家分为不同级别,级别越高,一次显示的字符数越多,玩家正确输入一次的得分也越高.如果玩家在规定时间内完成规定次数的输入,正确率达到规定


一 、项目需求
根据输入速率和正确率将玩家分为不同级别,级别越高,一次显示的字符数越多,玩家正确输入一次的得分也越高.如果玩家在规定时间内完成规定次数的输入,正确率达到规定要求,则玩家升级(为了简单起见,规定用户只要错误输出一次,则游戏结束).玩家最高级别为6级,初始级别一律为一级.

二、项目所覆盖的知识点:
①面向对象设计的思想.
②使用类图理解类的关系
③类的封装
④构造方法的使用
⑤this和static关键字的使用

运行效果图:

<<
<<
输入正确,您的级别:1您的积分:1已用时间:2秒
<>
<>
输入正确,您的级别:1您的积分:2已用时间:5秒
<>
<>
输入正确,您的级别:1您的积分:3已用时间:6秒
><
><
输入正确,您的级别:1您的积分:4已用时间:8秒
<>
<>
输入正确,您的级别:1您的积分:5已用时间:10秒
<<
<<
输入正确,您的级别:1您的积分:6已用时间:11秒
>*>
>*>
输入正确,您的级别:2您的积分:2已用时间:5秒
*<<
*<<
输入正确,您的级别:2您的积分:4已用时间:8秒
***
***
输入正确,您的级别:2您的积分:6已用时间:10秒
>*>
>*>
输入正确,您的级别:2您的积分:8已用时间:17秒
<>>
<>>
输入正确,您的级别:2您的积分:10已用时间:19秒
><>
><>
输入正确,您的级别:2您的积分:12已用时间:23秒
>#>*
>#>*
输入正确,您的级别:3您的积分:5已用时间:5秒
<<>>
<<>>
输入正确,您的级别:3您的积分:10已用时间:10秒
>*><
>*><
输入正确,您的级别:3您的积分:15已用时间:16秒
<*#*
<*#*
输入正确,您的级别:3您的积分:20已用时间:21秒
<<<#
<<<#
你输入太慢了,已经超时,退出。

玩家类

在玩家类中要用到currentTimeMillis()方法
public static long currentTimeMillis()
* 返回以毫秒为单位的当前时间。
* 注意,当返回值的时间单位是毫秒时,值的粒度取决于底层操作系统,并且粒度可能更大。
* 例如,许多操作系统以几十毫秒为单位测量时间。
返回值:
当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。

import java.util.Random;
import java.util.Scanner;

public class Player {
public int levelNo; // 级别号
public int currScore; // 当前积分
public long startTime; // 各级别开始时间
public int 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 int getElapsedTime() {
return elapsedTime;
}

public void setElapsedTime(int elapsedTime) {
this.elapsedTime = elapsedTime;
}

// 玩家玩游戏的方法
public void play() {
// 调用游戏类带参数的构造传入玩家对象
Game game = new Game(this);
Scanner input = new Scanner(System.in);
// 外层循环,循环一次级别晋级
for (int i = 0; i < LevelParam.levels.length; i++) {
// 晋级
this.levelNo += 1;
// 晋级后计时清零
//currentTimeMillis
this.startTime = System.currentTimeMillis();
this.currScore = 0;
if (this.levelNo == 6) {
System.out.println("恭喜过关!");
break;
}
// 内层循环,循环一次完成一次字符串的输入输出比较
for (int j = 0; j < LevelParam.levels.length; j++) {
// 输出游戏字符串
String outstr = game.printStr();
// 接受玩家输入
String instr = input.next();
// 游戏判断玩家输入是否正确
game.printResult(outstr, instr);
}
}
}

游戏类

import java.util.Random;

public class Game {

public Player player;

public Game(Player player2) {
// TODO Auto-generated constructor stub
this.player = player2;
}

public String printStr() {

int strLength = LevelParam.levels[player.getLevelNo() - 1]
.getStrLength();
StringBuffer buffer = new StringBuffer();
Random random = new Random();
// 通过循环生成要输出的字符串
for (int i = 0; i < strLength; i++) {
// 产生随机数
int rand = random.nextInt(strLength);
// 根据随机数拼接字符串
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;
case 5:
buffer.append("%");
break;
}
}
// 输出字符串
System.out.println(buffer);
// 返回该字符串的值,用于比较
return buffer.toString();
}

// 系统给的字符串与玩家输入的字符串进行对比
// out 系统输出的字符串
// in 玩家输入的字符串
public void printResult(String out, String in) {
boolean flag = false;
if (out.equals(in)) {
// 系统输出与玩家输入一致
flag = true;
} else {
System.out.println("输入错误,退出。");
System.exit(0);
}

/**
* 如果输入正确: 1.若超时,退出 2.若不超时,计算玩家时间、积分,输出玩家当前级别、积分、已用时间 并判断是否闯关成功
*/
if (flag) {
long currentTime = System.currentTimeMillis();
// 如果超时
if ((currentTime - player.getStartTime()) / 1000 > LevelParam.levels[player
.getLevelNo() - 1].getTimeLimit()) {
System.out.println("你输入太慢了,已经超时,退出。");
System.exit(1);
}else{
//计算玩家已用时间
player.setElapsedTime((int)(currentTime-player.getStartTime()) / 1000);
// 计算玩家当前积分
player.setCurrScore(player.getCurrScore()
+ LevelParam.levels[player.getLevelNo() - 1]
.getPerScore());
//输出玩家当前级别,当前积分和已用时间
System.out.println("输入正确,您的级别:"+player.levelNo+"您的积分:"+player.currScore+"已用时间:"+player.elapsedTime+"秒");

}
}
}
}

等级类

public class Level {

// 各级别号
private int levelno;
// 各级别一次输出字符串的长度
private int strLength;
// 各级别输出字符串的次数
private int strTimes;
// 各级别闯关时间的限制
private int timeLimit;
// 各级别一次输入正确的得分
private int 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;
}
public Level() {
super();
// TODO Auto-generated constructor stub
}
public Level(int levelno, int strLength, int strTimes, int timeLimit,) {
super();
this.levelno = levelno;
this.strLength = strLength;
this.strTimes = strTimes;
this.timeLimit = timeLimit;
this.perScore = perScore;
}
}

级别

static{
//代码块
}

见 ​​java.面向对象.static关键字​​

public class LevelParam {
//创建数组对应六个级别
public final static Level levels[] = new Level[6];
static{
levels[0] = new Level(1,2,10,30,1);
levels[1] = new Level(2,3,9,26,2);
levels[2] = new Level(3,4,8,22,5);
levels[3] = new Level(4,5,7,18,8);
levels[4] = new Level(5,6,6,15,10);
levels[5] = new Level(6,7,5,12,15);
}
}

测试类

public class Test {

public static void main(String[]) {

//实例化玩家对象
Player player=new Player();
//调用玩家玩游戏的方法
player.play();
}
}


【文章原创作者:阿里云代理 http://www.558idc.com/aliyun.html 复制请保留原URL】
上一篇:java基础之运算符升级版之一
下一篇:没有了
网友评论