需求分析:
1、随着等级的增加,输入字符数增加,时间不断减少,每一次答对的得分增加。
2、在规定时间内完成当前等级的输入次数,正确率达标后,则升级。六个级别
3、用户错误输入一次,游戏结束。

该练习需要创建四个类(玩家:play 游戏:game 级别:level 工具类:levelutils)

player类
属性:
玩家当前等级(levelNo)
玩家当前积分(currScore)
当前等级开始时间(startTime)
当前等级已用时间(elapsedTime)

方法:
玩游戏(play)
上面四个属性(get和set方法)

代码如下:

public class Player {//当前玩家的等级号(默认等级:1)private int levelNo=1;//玩家当前积分private int currScore;//当前等级开始时间private long startTime;//当前等级已用的时间private int elapsedTime;Game game=new Game(this);Scanner input=new Scanner(System.in);//玩游戏方法public void play() {//外层循环:按照等级循环for (int i = 0; i <LevelUtils.levels.length ; i++) {if (levelNo>1){System.out.println("恭喜你成功升级,当前级别:" + levelNo);}//升级后,清理上一等级的积分currScore=0;//获取当前系统时间startTime=System.currentTimeMillis();//内部循环:该级别输出字符串的次数for (int j = 0; j <LevelUtils.levels[levelNo-1].getInputTimes() ; j++) {//程序产生的随机字符串String out=game.printStr();//控制台输入字符串String in=input.next();//传入game的到结果game.printResult(in,out);}//增加等级levelNo++;}}//玩家属性get和set方法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;}}

game类
属性:
当前玩家:play
方法:
随机产生字符(printStr)
1.获取当前玩家等级
2.随机字符串
3.创建Stringbuffer
4.创建Random
5.随机产生与当前等级一样的字符串

代码如下:

public class Game {//设置游戏玩家private  Player player;public Game(Player player) {this.player = player;}//产生随机字符串public String printStr(){//获取当前玩家等级(默认等级为1)数组下标从0开始Level level01=LevelUtils.levels[player.getLevelNo()-1] ;//字符串String str="abcdefghijklmnopqrstuvwxyz1234567890~!";//创建StringbufferStringBuffer sb= new StringBuffer();//产生当前等级的字符串Random random=new Random();for (int i = 0; i <level01.getStrLength() ; i++) {//随机产生char ch= str.charAt(random.nextInt(str.length()));sb.append(ch);}System.out.println(sb);return sb.toString();}//匹配字符串public  void  printResult(String in , String out){//获取当前等级(等级从0开始)Level nowLevel=LevelUtils.levels[player.getLevelNo()-1];//判断程序输出的字符串与控制台输入的字符串是否匹配if (in.equals(out)){//输入和输出匹配//判断是否超时long endTime=System.currentTimeMillis();//获取当前等级限制时间int timeLimit=nowLevel.getPerTimeLimit();//转换单位为:秒player.setElapsedTime((int)(endTime-player.getStartTime())/1000);if (player.getElapsedTime()<=timeLimit){//没有超时//获取当前等级答对一次所获得的积分int perScore=nowLevel.getPerScore();//增加积分(获取当前积分,加上每一次答对的积分)player.setCurrScore(player.getCurrScore()+perScore);System.out.println("输入正确,当前级别:" + player.getLevelNo() + ",您的积分:" + player.getCurrScore() + ",已经用时:" + player.getElapsedTime());//是否通过当前关卡//当前等级答对的总积分(总分=当前等级答对一次的积分*当前等级答对多少次才能通过的次数)int sumScore=nowLevel.getPerScore()*nowLevel.getInputTimes();//等级大于等于level的长度并且当前的分数大于当前等级的总分if (player.getLevelNo()>=LevelUtils.levels.length&&player.getCurrScore()>=sumScore){//通关System.out.println("恭喜你,已经成为绝世高手,成功通关!");//正常退出程序System.exit(0);}}else {//超时System.out.println("您输入太慢了,已经超时,程序退出!");//退出程序(非正常退出,状态为:1)System.exit(1);}}else {//输入错误System.out.println("输入错误,游戏退出!");//退出程序(非正常退出,状态为:1)System.exit(1);}}//玩家属性的get和set方法public Player getPlayer() {return player;}public void setPlayer(Player player) {this.player = player;}
}

玩家输入的字符串,与电脑随机产生的字符串进行匹配(printResult)
玩家属性的get和set方法

level类
属性:
级别号(levelNo)
不同等级的字符串长度(strLength)
不同等级输入字符串的次数(inputTimes)
不同级别的时间限制( perTimeLimit)
不同等级答对一次得分(perScore)

方法:
带参数的构造方法(用于LevelUtils)
以上属性get和set方法
代码如下:

public class Level {//等级号private int levelNo;//每个等级的字符串长度private int strLength;//每个等级输入字符串的次数private  int inputTimes;//每个等级的限制时间private  int  perTimeLimit;//当前等级答对一次得分private  int perScore;//带参数的构造方法public Level(int levelNo, int strLength, int inputTimes, int perTimeLimit, int perScore) {this.levelNo = levelNo;this.strLength = strLength;this.inputTimes = inputTimes;this.perTimeLimit = perTimeLimit;this.perScore = perScore;}//game属性的get和set方法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 getInputTimes() {return inputTimes;}public void setInputTimes(int inputTimes) {this.inputTimes = inputTimes;}public int getPerTimeLimit() {return perTimeLimit;}public void setPerTimeLimit(int perTimeLimit) {this.perTimeLimit = perTimeLimit;}public int getPerScore() {return perScore;}public void setPerScore(int perScore) {this.perScore = perScore;}
}

levelutils类

主要功能是存放,不同等级的等级号、该等级字符串的长度、该等级回答题的次数、该等级的限制时间、答对一次所获取的分数。
代码如下:

public class LevelUtils {//设置等级列表public static final  Level[] levels={//从左到右的参数,依次是等级号、该等级字符串的长度、该等级回答题的次数、该等级的限制时间、答对一次所获取的分数new Level(1,3,6,40,2),new Level(2,4,6,35,3),new Level(3,5,7,30,4),new Level(4,6,7,25,5),new Level(5,7,8,25,6),new Level(6,8,8,20,7)};
}

Java小型综合型练习——打字小游戏相关推荐

  1. java通过控制台实现打字小游戏

    目录 演示效果 实现功能步骤 1.创建随机的一串字符 随机获取字符串内的字符 实现文字匹对功能 你是否因为自己回消息速度慢,而导致平白无故花出几百大洋去哄女朋友?你是否因为打字速度慢在高强度对线的时候 ...

  2. JAVA实现打字小游戏

    目录 一.效果 二.教程 三.代码 一.效果 首先我们先看效果,左上角的分数是用来记录我们打对了多少字母.字母是从上面开始往下落.每打对一个字母,分数增加,增加到一定分数后,字母下落的速度也会增加.( ...

  3. java实验2总结心得,打字小游戏JAVA实验总结及心得体会

    篇一:扫雷游戏实验报告 课程设计 班 级: 姓 名: 学 号: 指导教师: 成 绩: 电子与信息工程学院信息与通信工程系 目录 1.任务概述------------------------------ ...

  4. Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第二篇)

    Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第二篇) 代码实现 窗口类 小车类 玩家类 电脑类 赛道类 小树类 打字类 Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第一篇) ...

  5. Python 打字小游戏开发,来体验不一样的打字游戏乐趣(完结篇)

    Python 打字小游戏开发,来体验不一样的打字游戏乐趣(完结篇) 资源下载 完整代码 Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第一篇) Python 打字小游戏开发,来体验不一样的 ...

  6. JavaScript-事件和事件对象、实现键盘打字小游戏

    JavaScript-事件和事件对象 一.事件介绍 事件一般是用于浏览器和用户操作进行交互.最早是IE和Netscape Navigator中出现,作为分担服务器端运算负载的一种手段.直到几乎所有的浏 ...

  7. Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第一篇)

    Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第一篇) 前言 游戏素材准备 游戏项目结构 项目里面的类说明 Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第二篇) Python ...

  8. 『小项目』打字小游戏

    打字小游戏源码 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <unis ...

  9. 原生js实现的金山打字小游戏

    首先先来看一下效果图 如果感兴趣的就来看一下Js源码吧 //计分板 var board = {dom: document.getElementById("score"),maxLo ...

最新文章

  1. 爱创课堂每日一题八十九天- CSS中link和@import的区别是:
  2. javaweb添加拦截器
  3. Redis+Nginx+设计模式+Spring全家桶+Dubbo+阿里P7技术精选文档
  4. 为程序员量身定做的目标
  5. PHP多进程编程初步
  6. 第三次学JAVA再学不好就吃翔(part65)--正则表达式
  7. 【系统知识点】linux入门基础命令
  8. 电路 第五版 第三章电阻电路的一般分析
  9. c# 创建委托 消息订阅_C#面向对象之委托和事件
  10. Linux学习资源汇总
  11. 让你更中立!腾讯微信进行灰度测试 “好看”变为“在看”
  12. 运行jar中某个类的main方法
  13. CodeForces-28C-Bath Queue-概率DP[ ICPC2016大连热身D]
  14. nodejs文件相关模块
  15. pr如何跳到关键帧_零基础自学剪辑第六天--效果控件与关键帧
  16. 分形艺术能让你感受上帝的力量——新锐100设计师风达专访
  17. 天津工业大学计算机保研,天津工业大学学生保研心得
  18. 解决警告Presenting view controllers on detached view controllers is discouraged 以及引申
  19. 最新解决谷歌浏览器崩溃的方法
  20. 浏览器打开任意可执行exe文件方法

热门文章

  1. 腾讯优图计算机招聘视觉大咖(2022届校招+实习)
  2. Wechaty 李卓桓:我想要某种功能,你没有?那我来一个
  3. SSD算法详解 及其 keras实现 (下)
  4. 局域网电脑设置固定ip
  5. ES-分片路由(routing)
  6. 玩转Elasticsearch routing功能
  7. IDE、SCSI接口区别
  8. 2019-6-2 第2套试卷中的生词(02)
  9. SIFT算法特征描述子构建---关键点定位原理及代码
  10. 问道服务器系统,《问道》全部服务器将正式更新至V1.351新版