JAVA经典案例之QuickHit打字游戏
作者:互联网
JAVA经典案例之QuickHit打字游戏
又是充满学习动力的一天,今天小星星来讲述一下由本人今天做的一个打字游戏的打开过程和解题思路吧!
具体功能实现和案例项目需求如下:
项目分析:项目大概需要3个类,分别是玩家类,游戏类和级别类
项目需要
除以上介绍到的类之后,这里还需要创建额外的级别属性数组类:
主要的功能效果图如下:
好了说了这么多,想必等不及了吧,开始上实现代码:
import java.util.Random;
//游戏类
public class Game {
public Player player;
public Player getPlayer() {
return player;
}
public void setPlayer(Player player) {
this.player = player;
}
// 带参方法
public Game(Player player) {
this.player=player;
}
//无参方法
public Game() {
}
//定义一个int类型对应的各级别对应输出的字符串长度的方法
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(6);//产生随机数
//根据随机数拼接字符串
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;
}
}
//输出
String str=buffer.toString();
System.out.println(str);
return str;
}
//进行判断
public void printResult(String out,String in) {
//判断随机产生的与输入的是否一致
if(out.equals(in)) {
//判断是否超时
long currentTime=System.currentTimeMillis();
if((currentTime-player.getStartTime())/1000>LevelParam.levels[player.getLevelNo()-1].getTimeLimit()){
System.out.println("菜鸟输入速度太慢了吧!游戏超时,闯关失败!!!");
System.exit(0);
}else {
//计算当前积分
player.setCurrScore(player.getCurrScore()+LevelParam.levels[player.getLevelNo()-1].getPerScore());
//计算时间
player.setElapsedTime((int) ((currentTime-player.getStartTime())/1000));
//输出级别,积分和时间
System.out.println("输入正确,您的级别:"+player.getLevelNo()+"积分:"+player.getCurrScore()+"已用时间:"+(currentTime-player.getStartTime())/1000+"秒<");
if(player.getLevelNo()==6){
int score=LevelParam.levels[player.getLevelNo()-1].getPerScore()*LevelParam.levels[player.getLevelNo()-1].getStrTime();
if(player.getCurrScore()==score){
System.out.println("闯关成功!!!");
System.exit(0);
}
}
}
}else {
System.out.println("菜鸟输入错误!!!");
System.exit(1);
}
}
}
//级别类
public class Level {
public int levelNo;//各级别的编号
public int strLength;//各级别一次输入字符串的长度
public int strTime;//各级别输入字符串的次数
public int timeLimit;//各级别闯关的时间限制
public int perScore;//各级别正确输入一次的得分
//带参方法
public Level(int levelNo,int strLength,int strTime,int timeLimit,int perScore) {
this.levelNo=levelNo;
this.strLength=strLength;
this.strTime=strTime;
this.timeLimit=timeLimit;
this.perScore=perScore;
}
//无参方法
public Level() {
}
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 getStrTime() {
return strTime;
}
public void setStrTime(int strTime) {
this.strTime = strTime;
}
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 class LevelParam {
public final static Level levels[]=new Level[6];//以对象为数组类型
static {
//级别、各级别字符串的长度、每个级别输出字符串的次数、各级别每次输出字符串的时间限制、各级别正确一轮的分数
levels[0]=new Level(1,1,2,15,1);
levels[1]=new Level(2,2,2,18,2);
levels[2]=new Level(3,3,2,20,5);
levels[3]=new Level(4,4,2,22,8);
levels[4]=new Level(5,5,2,24,10);
levels[5]=new Level(6,6,2,26,15);
}
}
//玩家类
import java.util.Scanner;
public class Player {
private int levelNo;//玩家当前级别号
private int currScore;//玩家当前级别积分
private long startTime;//当前级别开始时间
private int elapsedTime;//当前级别已用时间
private int setElapsedTime;
//带参构造方法
public Player(int levelNo,int currScore,long startTime,int elapsedTime) {
this.levelNo=levelNo;
this.currScore=currScore;
this.startTime=startTime;
this.elapsedTime=elapsedTime;
}
//无参构造方法
public Player() {
}
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;
}
//玩游戏的play方法
public void play() {
//调用game的带参.this代表属性
Game game=new Game(this);
Scanner input=new Scanner(System.in);
for(int i=0;i<LevelParam.levels.length;i++) {
//晋级
levelNo=levelNo+1;
//晋级后计时清零
startTime=System.currentTimeMillis();
currScore=0;
//内层循环代表每个级别所需要玩的次数
for(int j=0;j<LevelParam.levels[i].getStrTime();j++) {
//输出随机产生的字符串
String outStr=game.printStr();
//接收用户输入的字符串
String inStr=input.next();
//调用game的printtResult方法,对比
game.printResult(outStr, inStr);
}
}
}
}
//测试类
public class test {
public static void main(String[] args) {
Player player=new Player();
player.play();
}
}
实现效果图:
好了,到此就结束本次项目的完成,如果有小星星没发现的bug,欢迎大家评论来言~~~~~
标签:QuickHit,JAVA,int,void,打字,levelNo,player,new,public 来源: https://blog.csdn.net/m0_45201772/article/details/107028565