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经典小游戏汇总

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

(0)

相关推荐

  • java实现快速打字游戏

    本文实例为大家分享了java实现打字游戏的具体代码,供大家参考,具体内容如下 import java.util.Random; import java.util.Scanner; public class Game { public Game(Player player) { } public Game() { } public String printStr(Player player) { StringBuffer a=new StringBuffer(); for(int i=0;i<Le

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

    类与对象案例-童年回忆之打字游戏 一.玩家类 二.等级类 三.游戏类 四.等级地图 五.测试类 这次要做的案例是一个打字游戏的案例,相信大家小时候都玩过金山打字通的警察抓小偷和飞机大战,这次的案例是类似的简易版. 首先对于这个案例,我们要解决的是如何生成随机的字符串,如何判断生成的字符串和输入的字符串是否相等. 一.玩家类 package com.yc.oop6.hc0705; public class Player { private int score; //积分 private long

  • Java 类与对象详细

    目录 1.类 2.对象 3.练习 4.练习答案 前言: 早期的Java语言,是面对过程的语言(面向过程指把一个场景分割成一个个的步骤研究),如今的Java已经是面对对象的语言(面向对象指把一个场景分割成一个个的对象研究).面向对象是相比面向过程有很多便利的地方,以后读者会慢慢感受到~ 那么,何谓对象呢?小编正在使用的电脑是一个对象,读者手中的手机是一个对象--对象,指[一个][具体的]物品或者事物(注意对象可以是抽象的东西). 每个对象都有其特征和用途,不同类型的对象特征和用途有所不同.我们把具

  • Java 类与对象超基础讲解

    目录 什么是面向对象 面向过程与面向对象 类与对象的使用 类与对象的使用与说明 对象的初始化 this的使用 构造方法 this可以调用本类的构造方法 什么是面向对象 Java语言是一个纯面向对象的语言,面向对象的语言不仅只有Java,包括C++,PHP等 面向对象的编程思想简称 OOP(Object Oriented Programming),其基本特点就是封装,继承和多态. 面向过程与面向对象 想要弄清楚什么是面向对象,首先需要知道两者的区别 面向过程更注重程序的每一个步骤,用相应的函数来实

  • 全面理解Java类和对象

    面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分.在面向对象程序设计(OOP)中,不必关心对象的具体实现.在传统的结构化程序设计中,算法是第一位的,数据结构是第二位的,即首先确定如何操作数,再考虑如何组织数据,以方便操作.而OOP则颠倒了这种次序,将数据放在第一位,然后再考虑操作数据的算法. 一.类 类是构造对象的模板和蓝图.通俗地说,类相当于建筑的图纸,而对象相当于建筑物.由类构造对象的过程称为创建对象的实例. Java中通过关键字class定义"类"

  • java类和对象原理与用法分析

    本文实例讲述了java类和对象原理与用法.分享给大家供大家参考,具体如下: 面向对象编程OOP 类:相似对象的集合. 对象 对象:实体.一切可以被描述的事物. 属性:特征. 方法:动作,行为. 类和对象的区别 [1]类时抽象的,对象是具体的. [2]类是一个模板,创建出来的对象具备共同的属性和方法. [3]类是一种数据烈性.引用数据类型. 语法 public classs 类名{ //定义属性部分 属性1的类型 属性1: 属性2的类型 属性2: ... 属性3的类型 属性n; //定义方法部分

  • Java 类与对象重难点详解

    目录 什么是类.对象? 类和类的实例化 字段的初始化 类当中实现方法 static 静态关键字 封装 private 实现封装 setter 和 getter 方法 构造方法 this 关键字 匿名对象 什么是类.对象? 因为计算机并不能像我们人这样去理解世界上的东西,所以为了更好的编辑,就抽象出了类和对象.类就是把功能放在一起,然后由一个人去调用这个功能,然后再编辑对应的功能.调用者就是对象的实现者 类和类的实例化 类是一类对象的统称,对象就是这一类具体化的实例 创建类的关键字:class 举

  • 深入浅出分析Java 类和对象

    目录 一.什么是类 二.Java的类和C语言的结构体异同 三.类和类的实例化 类的声明 实例化的对象,成员遵循默认值规则 类的实例化 静态属性(静态成员变量) 四.构造方法 创建构造方法 this 一.什么是类 类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础.类是一种用户自定义的引用数据类型,也称类类型.每个类包含数据说明和一组操作数据或传递消息的函数,类的实例称为对象 类的实质是一种引用数据类型,类似于 byte,shor

  • 浅谈java类和对象

    目录 一.面向对象的描述 二.类和对象的基本概念 三.类定义和使用 1.简单认识类 2.类的定义 3.实例化对象 4.类的三大特性 封装 继承 多态 一.面向对象的描述 面向对象是一种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象的概念实际上是由IBM提出的,在70年代的Smaltalk语言之中进行了应用,后来根据面向对象的设计思路,才形成C++,而由C++产生了Java这门面向对象的编程语言. 但是在面向对象设计之前,广泛采用的是面向过程,面向过程只是针对于自

  • Java类和对象的设计原理

    目录 一.实验目的 二.实验代码 1.定义一个类MyProgram,包含两个属性: 2. 在Vehicle类的基础上创建一个Tractor(拖拉机)类 3. 组合实现汽车类 5. USB接口程序设计 6.this关键字主要有三个应用: 7.请简述static关键字的作用 8.请简述super关键字的作用 9.请简述final关键字的作用 一.实验目的 1. 掌握面向对象的编程思想.类与对象: 2. 掌握类的封装性.继承性和多态性的作用: 3. 掌握成员变量和成员方法的特性.构造方法.toStri

  • 解析Java的JVM以及类与对象的概念

    Java虚拟机(JVM)以及跨平台原理 相信大家已经了解到Java具有跨平台的特性,可以"一次编译,到处运行",在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的. 那么,跨平台是怎样实现的呢?这就要谈及Java虚拟机(Java Virtual Machine,简称 JVM). JVM也是一个软件,不同的平台有不同的版本.我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件.Java虚拟机就是负责将字节码文件翻译成特定平

随机推荐