1、需求概述

根据输入速率和正确率将玩家分为不同级别

级别越高,一次显示的字符数越多,玩家正确输入一次的得分也越高

规定时间内完成规定次数的输入,正确率达到规定要求,则升级

l玩家最高级别为6级、初始级别一律为1级用户错误输入一次,游戏结束

2根据需求,可以分为玩家(Player)类,游戏类(Game);级别(Level)类

3类的属性

玩家类(Player)的属性

玩家当前的级别号(levelNo)

玩家当前级别的分数(Score)

玩家级别开始时间(startTime)

玩家已使用时间(usedTime)

玩家总用时常(totalTime)

级别类(Level)的属性

级别号(levelNo)

每次输入字符串的长度(strLength)

输入字符串的次数(typeCnt)

闯关的时间限制 (lvlTime)

每次打字的积分(perScore)

4、实现程序的运行

玩家类(Player)

public class Player{String name;int lvlNo=1;long startTime=System.currentTimeMillis();long usedTime;long totalUsedTime;int scores=0;public void play(){Game g=new Game();g.run(p.this);
}
}

级别类(Level)

public class Level{int lvlNo;int typeCnt;int strLength;int lvlTime;int perScore;public Level(int lvlNo,int typeCnt,int strLength,int lvlTime,int perScore){this.lvlNo=lvlNo;this.typeCnt=typeCnt;this.strLength=strLength;this.lvlTime=lvlTime;this.perScore=perScore;
}
}

游戏类(Games)

public class Game implements Printer {private Scanner input = new Scanner(System.in);public final Level[] LEVELS = {new Level(1, 1, 2, 20,1),new Level(2, 1, 3, 30, 2),new Level(3, 2, 4, 40, 3),new Level(4, 3, 5, 50, 4),new Level(5, 3, 5, 60, 5),new Level(6, 3, 6, 70, 6)};public String print(int levelNo){ //生成级别字符串int length =LEVELS[levelNo-1].strLength;String rst="";char[] c =new char[length];for(int i=0;i<c.length;i++)//每次都是全小写字母(97-122)和全大写字母(65-90)int chose = (int) (Math.random() * 2);c[i]=(char)(Math.random()*26+(chose==0?65:97));}rst = new String(c);return rst;}//每一轮的比较方法public void round(Player p) {Level level = LEVELS[p.lvlNo - 1];System.out.println(p.name + ",当前级别:" + level.lvlNo + ",要输入" + level.typeCnt+ "次,每次长度时:" + level.strLength + ",时常限时" + level.lvlTime+ "秒,当前积分为:" + p.scores);for (int i = 0; i < level.typeCnt; i++) {String s=print(p.lvlNo);System.out.println("请输入:" + s);String in = input.next();long now = System.currentTimeMillis();if (!s.equals(in)) {throw new GameErrException("输入错误,退出游戏");}long used = (now - p.startTime) / 1000;p.usedTime = used;if (used > level.lvlTime) {throw new GameErrException("输入超时,退出游戏!");}p.scores += level.perScore;}long left = level.lvlTime - p.usedTime;p.scores += left * level.perScore;p.totalUsedTime+=p.usedTime;System.out.println("恭喜升级,当前等级已用时常"+p.usedTime);System.out.println("获得额外的附加分:"+left*level.perScore);
}//    public static void main(String[] args) {
//        Player p=new Player();
//        p.name="";
//        Game g=new Game();
//        g.round(p);
//    }public void run(Player p) {if (p == null) {p = new Player();System.out.print("欢迎新用户");}if (p.name == null) {p = new Player();System.out.print("请输入您的姓名:");p.name = input.next();}System.out.println("尊敬的"+p.name+"游戏已经开始了,请准备!");do {//控制升级过程round(p);p.lvlNo++;}while (p.lvlNo<=LEVELS.length);// lvlNo<=6System.out.println("恭喜"+p.name+"选手通关!您的总积分为:"+p.scores+",总时常"+p.totalUsedTime);}//    public static void main(String[] args) {
//        Game g=new Game();
//        Player p=null;
//        g.run(p);
//    }}

5、游戏类应用一个打印方法,可以用接口来实现

public interface Printer {String print(int a);
}

6、测试类遇到问题需要抛出,所有建一个抛出异常类

public class GameErrException extends RuntimeException {public GameErrException(String message) {super(message);}
}

7、测试类

public class GameZone {public static void main(String[] args) {Player p=new Player();p.name="大力水手";try {Game g = new Game();p.play();}catch (GameErrException e){System.out.println(e.getMessage());}finally {System.out.println(p.name+"您最终的积分为:"+p.scores);}}
}

8、运行结果

项目二:实现简单的金山打字通相关推荐

  1. 解决金山打字通不能缩小窗口问题

    前段时间,在学五笔, 用的是金山打字通, 但是金山打字通只能全屏显示,这个本没有什么的, 但是我又想在练习的同时看电影,所以这样缩小窗口就显得很重要了 在网上搜索了一下发现金山打字通本身就不能全屏. ...

  2. Dev-C++游戏创作之金山打字通(附带音乐)

    Hi!大家好!我是你们的编程小王子 最近一直拖着没更新,因为实在是没什么游戏思路.但是终于搞出来一个 金山打字通相信很多小伙伴们都认识,所以东西我就不多介绍,今天主要讲解音乐的播放(超级简单的)! / ...

  3. 金山打字通2011+免升级

    1,金山打字通2011下载地址:http://pan.baidu.com/s/1pKKLxrl ~everything和editplus在百度一搜就可以下载. 2,工具:everything + 金山 ...

  4. 普通域账户不能运行金山打字通的解决方案

    普通域账户不能运行金山打字通 发现用本地管理员账户和域管理员账户能运行 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-c ...

  5. 官方金山打字通2009

    官方金山打字通2009 软件类别:国产软件/教育教学 运行环境: Win98/2000/XP/2003/Vista 软件语言:简体中文 开发作者: 金山软件公司 官方网站:http://www.syy ...

  6. 金山打字通2008完整版包含金山打字游戏,网上唯一的

    金山打字通2008 官方正式完整版,网上唯一的,其他都是不完整的.2007,2009版为虚假,官方未出此版. [概括介绍] 金山打字通是一款学习打字软件具有英文打字.拼音打字.五笔打字.打字游戏等功能 ...

  7. PlayOnLinux 安装 金山打字通2016

    2019独角兽企业重金招聘Python工程师标准>>> 安装一个程序 安装未在列表中的程序 您想做什么? 选择新建虚拟盘安装程序,点击下一步. 请输入您应用程序的虚拟盘的名称 输入 ...

  8. 小白练打字:金山打字通

    对于小白来说,首先肯定练打字,那么打字软件就很必要了,比如金山打字通 打开界面是这样 如果是完全小白,先用新手入门熟悉键盘 稍有基础则选英文打字进一步熟悉 最后当然练中文 除此之外还有打字 这就是打字 ...

  9. 金山打字通语句练习的文本

    金山打字通语句练习的文本 the with more could seem leave follow fact war company nothing near love often car diff ...

最新文章

  1. springboot自动装配原理笔记一
  2. ACM寒假训练第一周总结
  3. 让 windows 的桌面 干净。。。再干净点。。。
  4. oracle经典增删该查,oracle基本语法(增删改查
  5. 工作132:页面布局
  6. linux apache jk,Linux下Apache+Tomcat+JK实现负载均衡和群集的完整过程
  7. 直接在安装了redis的Linux机器上操作redis数据存储类型--hash类型
  8. android-async-http取消请求
  9. OpenCV-Python实战(12)——一文详解AR增强现实
  10. 《Linux》美轮美奂的Arch, 详解Arch虚拟机安装
  11. mysql基础以优化
  12. 国脉信息学院计算机网络,福建工程学院国脉信息学院《计算机网络模拟题》
  13. C语言_4 循环结构;一些例题
  14. 1153: 简易版最长序列 C语言
  15. 制作7Z格式可安装程序包
  16. Java版俄罗斯方块
  17. 全美航班停飞原因曝光/ 米哈游辟谣年终奖108薪/ 苹果正开发触摸屏Mac…今日更多新鲜事在此...
  18. electron 主进程和渲染进程的通信
  19. Linux系统的atop监控工具
  20. 双色球的简单逻辑!不中五百万天理难容!

热门文章

  1. 20200225使用老毛桃写入WIN10专业版到U盘
  2. 计算机毕业设计时间修改代码程序软件安装运行问题题目汇总送开题送文档先代码
  3. 怎么用光功率计测试两台光端机间的传输距离
  4. 美国名校毕业的CEO,为什么坚持与一线工人同吃同住?
  5. 自定义控件,闪动文字FlickeringTextView
  6. 3ds模型在OpenGL中的读取和重绘
  7. 用pycharm写飞机大战
  8. 飞机大战java_java版飞机大战 实战项目详细步骤.md
  9. Flarum常用插件extensions
  10. 智能天线技术改善频谱使用效率