QuickHik小游戏项目

package package1;
import java.util.*;
public class Level {//定义一个积分类
private int levelNo;//编号
private int strlength;//级别对应字符段长度
private int timeLimit;//当前级别时间限制
private int strTime;//输入次数
private int perScore;//分数
public Level(int levelNo,int strlength,int timeLimit,int strTime,int perScore){
this.levelNo=levelNo;
this.strlength=strlength;
this.timeLimit=timeLimit;
this.strTime=strTime;
this.perScore=perScore;
}
//因为属性都是private修饰的,所以用getter去调属性
public int getlevelNo(){
return levelNo;
}
public int getstrlength(){
return strlength;
}
public int gettimeLimit(){
return timeLimit;
}
public int getstrTime(){
return strTime;
}
public int getperScore(){
return perScore;
}


}

public class Game {
/*
定义一个Game类,调用Player的对象


*/
private Player player;
public Game(Player player){
this.player = player;

}
public String printStr(){//定义一个输出字符串的方法
int LevelNo = player.getLevelNo()-1;//把player中的索引传给编号LevelNo
int strlen = LevelInilial.levelsArr[LevelNo].getstrlength();//定义一个字符串的长度strlen,字符串的长度与级别数有关
Random random = new Random();//创建一个随机数的对象
StringBuffer buffer= new StringBuffer();
for(int i=0;i<strlen;i++){//定义输出的随机的字符串

int rand = random.nextInt(strlen);
switch(rand){
case 0:
buffer.append("a");
break;
case 1:
buffer.append("b");
break;
case 2:
buffer.append("c");
break;
case 3:
buffer.append("d");
break;
case 4:
buffer.append("e");
break;
case 5:
buffer.append("f");
break;
case 6:
buffer.append("g");
break;
case 7:
buffer.append("h");
break;


}
}
System.out.println(buffer);//输出随机组合的字符串
return buffer.toString();//返回一个随机的玩家需要输入的字符串
}

public void result(String out,String in){

//定义一个用于比较玩家的输入和系统输出作比较的方法

if(out.equals(in)){//判断输入的和输出的是否相等

long currentTime=System.currentTimeMillis();

//如果输入的和输出的相等,再判断玩家所用的时间是否少于规定时间

//因为是时间戳,单位为毫秒,所以要除以1000,转化为秒
if((currentTime-player.getstrTime())/1000 <= LevelInilial.levelsArr[player.getLevelNo() -1].gettimeLimit()){
/*
如果玩家输入正确并且不超时,再应用规定的当前等级的奖励分数 来计算玩家当前的总分
当玩家升级进入下一关时,玩家当前分数 = 通过当前关所得的分数 的总和  + 玩家所处关卡的前一关的分数
*/
int newScore=player.getScore()+ LevelInilial.levelsArr[player.getLevelNo() -1].getperScore();
player.setScore(newScore);
long time = (currentTime-player.getstrTime()/1000);
System.out.println("输入正确,您的等级是:"+player.getLevelNo() + ", 您的积分是:" + player.getScore() + ", 您的用时为:" + player.getelapseTime() + "秒");
if(player.getLevelNo() == 6){
int sum = 0;//定义一个sum,用来存放玩家最后得分
for(int j = 0; j < LevelInilial.levelsArr.length; j++ ){
int currentScore = LevelInilial.levelsArr[j].getperScore() * LevelInilial.levelsArr[j].getstrTime();
sum += currentScore;

}

if(player.getScore() == sum){//如果玩家最后所得分数与系统规定通全关的分数相等,那么玩家就玩通关了

System.out.println("恭喜您通全关!!!!");
System.exit(0);
}
}

}else{
System.out.println("输入正确,但是时间超时,game over!!");
System.exit(1);
}
}else{
System.out.println("输入错误,game over!!");
System.exit(1);
}
}
}




public class LevelInilial {
public static Level[] levelsArr = new Level[6];
/*
静态static初始化块,初始化等级以及规定每个等级所对应的字符串长度、
通过每个级别的总时间和每关都必须输入正确的次数,并且规定通过每一级别所给的奖励分数。
*/
static{
//levelsArr[0]=new Level(编号,字符段长度,时间限制,次数,分数);
levelsArr[0]=new Level(1,4,30,8,2);
levelsArr[1]=new Level(2,5,26,8,3);
levelsArr[2]=new Level(3,6,21,8,4);
levelsArr[3]=new Level(4,7,18,8,5);
levelsArr[4]=new Level(5,8,18,8,6);
levelsArr[5]=new Level(6,8,15,8,7);
}
}


public class Player {
private int levelNo;//级别号
private long strTime;//开始时间
private int score;//积分
private long elapseTime;//持续时间
//因为是private修饰的属性,所以需要用setter和getter来调用
public void setLevelNo(int levelNo){
this.levelNo = levelNo;
}
public void setstartTime(long strTime){
this.strTime = strTime;
}
public void setScore(int score){
this.score = score;
}
public void setelapseTime(long elapseTime){
this.elapseTime = elapseTime;
}
public int getLevelNo(){
return levelNo;
}
public long getstrTime(){
return strTime;
}
public int getScore(){
return score;
}
public long getelapseTime(){
return elapseTime;
}
//定义玩家玩游戏的方法
public void play(){
Game game = new Game(this);//调用游戏类Game
Scanner input = new Scanner(System.in);//创建键盘录入
//定义一个i用来存放系统规定的6个关卡,并且每通关一次就自动进入下一个关卡
for(int i = 0;i<LevelInilial.levelsArr.length;i++){
levelNo+=1;
strTime=System.currentTimeMillis();//开始时间为系统所对应的时间
for(int j=0;j<LevelInilial.levelsArr[levelNo-1].getstrTime();j++){
String out = game.printStr();//把Game类的game对象的数据输出的字符串赋给变量out
String in = input.next();//变量in为玩家通过键盘录入的字符串
game.result(out,in);//返回随机输出的和玩家输入的字符串
}
}
}
}
//main方法的测试类
public class Test {
public static void main(String[]args){
Player p = new Player();//创建玩家类的对象,调用玩家的play方法
p.play();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值