一、项目分析

根据输入速率和正确率将玩家分为不同等级,级别越高,一次显示的字符数越多,玩家正确输入一次的得分也越高。如果玩家在规定时间内完成规定次数的输入,正确率达到规定要求,则玩家升级。玩家最高级别为6级,初始级别一律为一级!

二、掌握的技能点

①面向对象设计的思想

②使用类图理解类的关系

③类的封装

④构造方法的使用

⑤this和static关键字的使用

类的属性:

①玩家(Player)类的属性:当前级别号levelNo、当前级别积分currScore、当前级别开始时间startTime和当前级别已用时间elapsedTime

②级别(Level)类的属性:各级别编号levelNo、各级别一次输出字符串的长度strLength、各级别输出字符串的次数strTime、各级别闯关的时间限制timeLimit和各级别正确输入一次得分

类的方法:

游戏Game类的主要方法有2个:输出字符串、返回字符串用于和玩家的输入进行比较[String printStr]确认玩家输入是否正确[void printResult(String out,String in)],比较游戏输出out和玩家输入in

玩家Player类的方法:玩游戏play()

LevelParam类:定义一个长度为6的Level数组,用来存放各级别的具体参数信息

关键代码:

Player类:

package cn.happy;import java.util.Scanner;public class Player {public int levelNo;  //级别号public int curScore;  //积分public long startTime; //开始时间public int elapsedTime; //已用时间public int getLevelNo() {return levelNo;}public void setLevelNo(int levelNo) {this.levelNo = levelNo;}public int getCurScore() {return curScore;}public void setCurScore(int curScore) {this.curScore = curScore;}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 Player(){}public Player(int levelNo,int curScore,long startTime,int elapsedTime){this.levelNo=levelNo;this.curScore=curScore;this.startTime=startTime;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;//晋级后计时清零,积分清零this.startTime=System.currentTimeMillis();this.curScore=0;//内层循环 循环一次完成一次字符串的输入,输出,比较for (int j = 0; j < LevelParam.levels[levelNo-1].getStrTimes(); j++) {//游戏输出字符串String outstr=game.printStr();//接收用户输入String instr=input.next();//游戏判断玩家输入的是否正确
                game.printResult(outstr,instr);}}}}

Level类:

package cn.happy;public class Level {public int levelNo; //各级别编号public int strLength;// 各级别一次输出字符串的长度public int strTimes;// 各级别输出字符串的次数public int timeLimit;// 各级别闯关的时间限制public 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(){}public Level(int levelNo,int strLength,int strTimes,int timeLimit,int perScore){this.levelNo=levelNo;this.strLength = strLength;this.strTimes = strTimes;this.timeLimit = timeLimit;this.perScore = perScore;}}

LevelParam类

package cn.happy;public class LevelParam {//级别参数类,配置各个级别参数//对应6个级别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);}}

Game类:

package cn.happy;import java.util.Random;public class Game {//玩家private Player player;public Game(){}public Game(Player player){this.player=player;}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();}//判断玩家输入的是否正确,并输出相应的结果public String printResult(String outstr,String instr){boolean flag=false;if(outstr.equals(instr)){flag=true;}else{System.out.println("输入错误!哈哈");System.exit(0);}if(flag){long currentTime=System.currentTimeMillis();//如果超时if((currentTime-player.getStartTime())/100>LevelParam.levels[player.getLevelNo()-1].getTimeLimit()){System.out.println("你输入的太慢了,已经超时,退出!");System.exit(1);}//计算玩家当前积分player.setCurScore(player.getCurScore()+LevelParam.levels[player.getLevelNo()-1].getPerScore());//计算玩家已用时间player.setElapsedTime((int)(currentTime-player.getStartTime())/1000);//输出玩家当前级别,当前积分,当前时间System.out.println("输入正确,您的级别是"+player.levelNo+",您的积分是"+player.curScore+",已用时间"+player.elapsedTime+"");}        return "hh";}}

测试Test类:

package cn.happy;public class Test {/*** @param args*/public static void main(String[] args) {Player player=new Player();player.play();}}

-------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------

转载于:https://www.cnblogs.com/Zhangmin123/p/5542602.html

Quickhit快速击键相关推荐

  1. 05章项目: QuickHit快速击键

    一.项目分析 根据输入速率和正确率将玩家分为不同等级,级别越高,一次显示的字符数越多,玩家正确输入一次的得分也越高.如果玩家在规定时间内完成规定次数的输入,正确率达到规定要求,则玩家升级.玩家最高级别 ...

  2. 掌握正确的指法---击键要领、雨儿五笔打字视频

    掌握正确的指法---击键要领.雨儿五笔打字(片长:1分钟9秒).雨儿指法实录-带耳机(片长:1分钟19秒) 十指分工,包键到指,能者多劳,各司其职         我们知道,要让电脑听您使唤,必须给电 ...

  3. 三年级计算机击键要领教案,闽教版信息技术三上《下行键操作》教案

    闽教版信息技术三上<下行键操作>教案 教学目标 [知识目标]:了解和掌握下行键的键位分布. [技能目标]:正确掌握下行键击键的姿势和指法. [情感目标]:培养学生养成正确的键盘操作习惯. ...

  4. 有谁用过sendinput摸拟一个鼠标击键?

    我想用,但定义了MOUSEINPUT和INPUT结构,编译是时出现这个错误:  E:\My document\VC++programs\13\13.cpp(152) : error C2065: 'M ...

  5. 在Linux中模拟击键和鼠标移动

    `你是否曾经拥有一个梦--你的计算机可以自动为你干活?或许,并非因为你刚看了终结者.然而,除此之外脚本和任务自动化是每个高级用户追寻的梦如果今天有许多的解决方案可以满足这个目标那么有时候就难以从那众多 ...

  6. 计算机的击键方法教学教案,2.2 敲击键盘 教案

    2.2 敲击键盘 教案 ==================资料简介====================== <第2节 敲击键盘>教学设计 教科书选材: 四川教育出版社 三年级上册 教 ...

  7. 计算机的击键方法教学教案,初中七年级信息技术上册教案:键盘操作与练习

    键盘操作与练习 教学任务: 1.了解键盘的分布,掌握八个基本间的功能. 2.培养学生正确的姿势和击键的方法与技巧 . 3.学会启动和关闭计算机的操作,培养学生的良好的操作习惯. 4.学会利用打字软件训 ...

  8. 基于声音的击键信号识别

    摘要 本文文章采用击键信号的短时能量及峰值片段的幅度及各个幅度对应的频率作为特征向量.采用声音搜集装置搜集敲击键盘产生的声音信号,并对声音信号进行巴特沃斯滤波方法进行滤波预处理:将上述经过滤波得到的信 ...

  9. Windows程序设计--击键消息和字符消息

    键盘消息分为击键消息和字符消息.而击键消息就是指当你按下一个键时它是哪个键. 一般有以下四个击键消息: WM_KEYDOWN.WM_SYSKEYDOWN.WM_KEYUP.WM_SYSKEYUP.这里 ...

最新文章

  1. 使用bootstrap标签页
  2. Dalvik内存管理
  3. c++大作业迷宫游戏 规定时间内完成_孩子写作业慢的7种原因及其解决对策
  4. eclipse maven 项目发布到tomcat 报错 Failed to scan JAR [file:/C:/xxxxx.jar] from WEB-INF/lib
  5. ubuntu14.04安装git
  6. 小程序 字号设置 slider滚动改变大小_SteerMouse for mac(鼠标设置工具) v5.4.3
  7. 转:Oracle物理文件
  8. 在阿里云容器服务上创建一个使用Redis的Python应用
  9. pku2352 Stars(线段树实现)
  10. Machine Learning ——Homework3
  11. sass-RGB颜色函数-RGB()颜色函数
  12. 宝软网java软件下载_手机游戏怎么下载
  13. CNDS-Markdown之公式编辑(二)
  14. Android手机模拟器旋转快捷键
  15. 前端单位px,pt,rem,逻辑像素,物理像素
  16. 腾讯面试--测试工程师职位
  17. 荣耀v40pro+参数配置 荣耀v40pro+价格
  18. 软件测试需要学什么,这几点一定要知道
  19. 微社区成为社交电商法宝的原因是什么?
  20. C#中 //TODO: 的用法

热门文章

  1. JAVA 线上故障排查完整套路!牛掰!
  2. Spring Boot+Redis+拦截器+自定义Annotation实现接口自动幂等
  3. 你想过 Controller 这些方法里的参数是如何工作的吗?
  4. Coggle加速计划:解决数据下载烦恼!
  5. 天池NLP中文预训练模型赛来了!
  6. 兰大本科生发31篇论文遭质疑,本人及校方回应!
  7. 自制机械臂,能给葡萄缝针的那种,成本1万块,网友:能把脑子开源一下?
  8. 最新!NLG顶会INLG2021最佳长论文出炉!一作华人学生代表出席今晚INLG
  9. 2W+好评,这个python数据分析课程免费开放3天!
  10. 华为正式宣布养猪,网友沸腾:支持华为自救!