文章目录
0 前言
1 绪论
1.1 研究背景与意义
本项目功能简单,代码较少,采用面向过程的思想可能更容易实现。此处的关键时锻炼大家面向对象的程序设计能力,分析隔断功能代码放到什么位置更合理,为大型项目的设计打好基础。
1.2 基本开发技术
开发工具:IDEA JDK1.8
开发语言:java
1.3 相关技术分析
项目覆盖的技能点如下:
面向对象程序设计的思想
使用类图理解类的关系
类的封装
构造方法的使用
this和static关键字的使用
2 需求分析
2.1 界面分析
如果玩家输入正确且未超时,则输出玩家输入的正确信息,并输出玩家当前级别、当前积分和已用时间。
如果玩家输入正确但超时,则输出玩家超时信息,并退出系统。
如果玩家输入错误,则输出“输入错误,退出!”的信息,并退出系统。
如果在规定时间内完成相应级别任务,则晋级。
2.2 主要功能分析
游戏输出字符串:生成长度固定但内容随机的字符串,同时向控制台输出并将值返回给后台。
比较字符串:根据玩家的输入和控制台输出得到相应的结果
玩家玩游戏:得到当前玩家的等级、分数、时间。
3 系统设计
3.1 初始化各个级别的具体参数
//定义常量 指定六个关卡中每个关卡的游戏规则
public static final Level[] levels = new Level[6];
//static{} 表示静态,作用:类加载的时候只加载一次
static {
levels[0] = new Level(1,2,10,30,1);
levels[1] = new Level(2,3,9,30,2);
levels[2] = new Level(3,4,8,30,5);
levels[3] = new Level(4,5,7,30,8);
levels[4] = new Level(5,6,6,30,10);
levels[5] = new Level(6,7,5,30,15);
}
3.2 输出字符串
/*游戏输出的字符串*/
public String printStr(){
//获取用户当前级别号对应的字符串长度(角标从0开始,所以要减一)
int strLength = LevelParam.levels[player.getLevelNo()-1].getStrLength();
//创建一个可以编辑的字符串对象StringBuffer(String对象是不可编辑的字符串对象)
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;
case 6:
buffer.append("%");
break;
}
}
//输出字符串
System.out.println(buffer);
return buffer.toString();
}
3.3 比较字符串
/*对比字符串是否相同方法*/
public void printResult(String out,String in){
boolean flag;
//比对输出的字符串和输入的字符串
if(out.equals(in)){
flag = true;
}else {
flag = false;
}
//1.如果输入正确的话
if(flag){
//获取当前的时间
long currentTime = System.currentTimeMillis();
if(((currentTime - player.getStartTime())/1000) > (LevelParam.levels[player.getLevelNo()-1].getTimeLimit())){
//1.如果超时
System.out.println("您输入的太慢了");
System.exit(0);
}else {
//2.如果没有超时
//2.1计算分数
player.setCurScore(player.getCurScore()+LevelParam.levels[player.getLevelNo()-1].getPerScore());
//2.2计算时间
player.setElapsed(((int)(currentTime-player.getStartTime())/1000));
//2.3输出积分,级别,时间
System.out.println("您的级别是"+player.getLevelNo()+",您的积分是"+player.getCurScore()+",已用时间"+player.getElapsed()+"秒");
//2.4判断用户是否已经闯入最后一关
if(player.getLevelNo() == 6){
int score = LevelParam.levels[player.getLevelNo()-1].getPerScore() * LevelParam.levels[player.getLevelNo()-1].getStrTime();
if(player.getCurScore() == score){
System.out.println("闯关成功");
System.exit(0);
}
}
}
}else {
System.out.println("输入错误");
System.exit(0);
}
}
3.4 玩家玩游戏
//玩家玩游戏
public void play(){
Game game = new Game(this);
Scanner scanner = new Scanner(System.in);
for(int i = 0;i<LevelParam.levels.length;i++){
//1.晋级
this.levelNo += 1;
//2.计时清零
this.startTime = System.currentTimeMillis();
//3.积分清零
this.curScore = 0;
for(int j = 0;j<LevelParam.levels[levelNo-1].getStrTime();j++){
//输出字符串
String outStr = game.printStr();
//输入字符串
String inStr = scanner.next();
//判断是否相同,并输出结果
game.printResult(outStr,inStr);
}
}
}