java类与对象案例之打字游戏

 更新时间:2020年07月07日 08:40:32   作者:程序少年篮球king  
这篇文章主要为大家详细介绍了java类与对象案例之打字游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

类与对象案例-童年回忆之打字游戏

一、玩家类
二、等级类
三、游戏类
四、等级地图
五、测试类

这次要做的案例是一个打字游戏的案例,相信大家小时候都玩过金山打字通的警察抓小偷和飞机大战,这次的案例是类似的简易版。

首先对于这个案例,我们要解决的是如何生成随机的字符串,如何判断生成的字符串和输入的字符串是否相等。

一、玩家类

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();
 
 

 }
}

详细的解释都在代码的注释里了,大家细品。

更多有趣的经典小游戏实现专题,分享给大家:

C++经典小游戏汇总

python经典小游戏汇总

python俄罗斯方块游戏集合

JavaScript经典游戏 玩不停

java经典小游戏汇总

javascript经典小游戏汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • JDBC连接MYSQL分步详解

    JDBC连接MYSQL分步详解

    JDBC是指Java数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。从根本上来说,JDBC 是一种规范,它提供了一套完整的接口,允许便携式访问到底层数据库,本篇文章我们来了解MySQL连接JDBC的流程方法
    2022-03-03
  • 基于jvm-sandbox的imock开发指南详解

    基于jvm-sandbox的imock开发指南详解

    这篇文章主要为大家介绍了基于jvm-sandbox的imock开发指南详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • JAVA记住密码功能的实现代码

    JAVA记住密码功能的实现代码

    这篇文章主要介绍了JAVA记住密码功能的实现代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • Java使用Optional实现优雅避免空指针异常

    Java使用Optional实现优雅避免空指针异常

    空指针异常(NullPointerException)可以说是Java程序员最容易遇到的问题了。为了解决这个问题,Java 8 版本中推出了 Optional 类,本文就来讲讲如何使用Optional实现优雅避免空指针异常吧
    2023-03-03
  • 解决java maven项目找不到jconsole-1.8.0.jar和tools-1.8.0.jar包问题

    解决java maven项目找不到jconsole-1.8.0.jar和tools-1.8.0.jar包问题

    这篇文章主要介绍了解决java maven项目找不到jconsole-1.8.0.jar和tools-1.8.0.jar包问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 一次排查@CacheEvict注解失效的经历及解决

    一次排查@CacheEvict注解失效的经历及解决

    这篇文章主要介绍了一次排查@CacheEvict注解失效的经历及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java SpringBoot整合shiro-spring-boot-starterqi项目报错解决

    Java SpringBoot整合shiro-spring-boot-starterqi项目报错解决

    这篇文章主要介绍了Java SpringBoot整合shiro-spring-boot-starterqi项目报错解决,文章围绕主题展开详细的内容介绍,具有一定的参考一下
    2022-08-08
  • idea intellij快速修复if语句缺少大括号的问题

    idea intellij快速修复if语句缺少大括号的问题

    这篇文章主要介绍了idea intellij快速修复if语句缺少大括号的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 基于Java中的StringTokenizer类详解(推荐)

    基于Java中的StringTokenizer类详解(推荐)

    下面小编就为大家带来一篇基于Java中的StringTokenizer类详解(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • IntelliJ IDEAx导出安卓(Android)apk文件图文教程

    IntelliJ IDEAx导出安卓(Android)apk文件图文教程

    这篇文章主要为大家详细介绍了IntelliJ IDEAx导出安卓(Android)apk文件图文教程,文中步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10

最新评论