java学习之路——类与对象案例之打字游戏
2020-07-18 04:33
627 查看
类与对象案例-童年回忆之打字游戏
这次要做的案例是一个打字游戏的案例,相信大家小时候都玩过金山打字通的警察抓小偷和飞机大战,这次的案例是类似的简易版。
首先对于这个案例,我们要解决的是如何生成随机的字符串,如何判断生成的字符串和输入的字符串是否相等。
一、玩家类
package com.yc.oop6.hc0705; public class Player { private int score; //积分 private long startTime; //各级别的开始时间 private long dis; //每次闯关剩余时间 private int levelNo; //级别号码 public int getScore() { return score; } public void setScore(int score) { this.score = score; } public long getStartTime() { return startTime; } public void setStartTime(long startTime) { this.startTime = startTime; } public int getLevelNo() { return levelNo; } public void setLevelNo(int levelNo) { this.levelNo = levelNo; } public Player(int score, long startTime, int levelNo) { super(); this.score = score; this.startTime = startTime; this.levelNo = levelNo; } public Player() { super(); } public long getDis() { return dis; } public void setDis(long dis) { this.dis = dis; } }
二、等级类
package com.yc.oop6.hc0705; public class Level { private int levelNo; //第几关 private int strLength; //字符串长度 private int strTime; //需要输入的次数 private int timeLimit; //时间限制 private int score; //答对一次获得的积分 public int getLevelNo() { return levelNo; } public int getStrLength() { return strLength; } public int getStrTime() { return strTime; } public int getTimeLimit() { return timeLimit; } public int getScore() { return score; } public Level(int levelNo, int strLength, int strTime, int timeLimit, int score) { super(); this.levelNo = levelNo; this.strLength = strLength; this.strTime = strTime; this.timeLimit = timeLimit; this.score = score; } public Level() { super(); } }
三、游戏类
package com.yc.oop6.hc0705; import java.util.Random; import java.util.Scanner; public class Game { private Player player; private Random r = new Random(); private Scanner sc = new Scanner(System.in) ; public Game(Player player) { this.player = player; } //开始游戏 public void startGame() { System.out.println("游戏开始"); //开始闯关 for(int i = 0; i < Levels.ls.length; i++) { System.out.println("开始进入第" + (i+1) + "关"); //每一关的开始在这里 player.setLevelNo(player.getLevelNo() + 1); player.setStartTime(System.currentTimeMillis()); //循环,这一关要输入多少次 for(int j = 0 ; j < Levels.ls[player.getLevelNo() - 1].getStrTime() ; j++ ) { String out = printStr(); System.out.println(out); String in = sc.nextLine(); boolean flag = result(in, out); if(flag == false) { System.exit(1);; } } //每剩下1s 增加20分 player.setScore(player.getScore() + (int)player.getDis() * 20); System.out.println("完成第" + (i+1) + "关,您现在的积分为:" + player.getScore()); System.out.println("进入下一关"); } } //随机字符串 public String printStr( ) { String str = ""; double rNum = 0; for(int i = 0; i < Levels.ls[player.getLevelNo()-1].getStrLength(); i++ ) { rNum = r.nextDouble(); if(rNum < 0.3333) { str += (r.nextInt(9)+1); }else if(rNum < 0.6667){ str += (char)(r.nextInt(26)+65); }else { str += (char)(r.nextInt(26)+97); } } return str; } //字符串对比 public boolean result(String in, String out) { //字符串判断 if(out.equals(in)) { //先获取一下当前的系统时间 long endTimes = System.currentTimeMillis(); long startTimes = player.getStartTime(); //获得下一关的时间 long dis = Levels.ls[player.getLevelNo() -1 ].getTimeLimit(); if((endTimes - startTimes)/1000 > dis) { System.out.println("游戏超时,游戏结束,您的最终得分为:" + player.getScore()); return false; }else { //输入正确,且没有超时 //加积分 int score = Levels.ls[player.getLevelNo()].getScore(); player.setDis(dis - (endTimes - startTimes)/1000); player.setScore(player.getScore() + score ); System.out.println("输入正确,您现在的积分为:"+ player.getScore() +" ,这一关您还有: " + player.getDis() + " 秒钟"); return true; } }else { System.out.println("输入错误,游戏结束,您的最终得分为:" + player.getScore()); return false;//输入错误 } } }
四、等级地图
package com.yc.oop6.hc0705; public class Levels { //定义一个静态的对象数组 public static Level ls[] = new Level[7]; static { ls[0] = new Level(1,2,5,20,10); ls[1] = new Level(2,3,5,18,20); ls[2] = new Level(3,4,4,16,30); ls[3] = new Level(4,5,4,15,40); ls[4] = new Level(5,6,4,15,50); ls[5] = new Level(6,7,3,15,60); ls[6] = new Level(7,8,3,15,70); } }
五、测试类
package com.yc.oop6.hc0705; public class Test { public static void main(String[] args) { Player p = new Player(); Game g = new Game(p); g.startGame(); } }
详细的解释都在代码的注释里了,大家细品~
相关文章推荐
- java学习之路---对象的多态
- java学习之路 之 面向对象编程-面向对象-对象的关联
- JAVA基础学习之流的简述及演示案例、用缓冲区方法buffer读写文件、File类对象的使用、Serializable标记接口(6)
- java学习之路 之 面向对象编程-面向对象特征之一(封装和隐藏)级类的成员之三(构造器、构造方法)
- java学习之路——对象的浅复制和深复制
- java学习之路 之 高级类特性1-面向对象特征之三:多态
- Java学习笔记----《head first java 》-第二章 数字游戏事例看类与对象,对象间互动。
- Logic Java阶段学习总结--猜拳游戏(面向对象实例)
- java学习之路 之 高级类特性1-面向对象特征之二:继承及方法重写(override)
- java学习之路--java对象(1)--重点String类的常用方法
- JAVA学习之路-简单的城堡游戏(一)
- JAVA 入门学习之路-注册登录案例。
- Java学习 第十九章 接口 / 多态 /对象的向上、向下转型 /instanceof关键字/笔记本USB接口案例
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
- 菜鸟的学习之路(3) —java 面向对象程序设计的封装、继承和多态
- java学习之路----java类库----Arrays对对象的排序---二叉树实现原理
- Java从基础到进阶学习之路----数独小游戏制作(一)
- 【Java学习之路之2】对象和类的关系
- java学习之路 之 面向对象编程-类的成员之属性、方法及对象的创建和使用
- java学习之路 之 高级类特性-四种权限修饰符、关键字super、子类对象的实例化过程