文档章节

java学习之路——类与对象案例之打字游戏

o
 osc_gnljyuoo
发布于 07/07 17:13
字数 828
阅读 25
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

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


这次要做的案例是一个打字游戏的案例,相信大家小时候都玩过金山打字通的警察抓小偷和飞机大战,这次的案例是类似的简易版。
首先对于这个案例,我们要解决的是如何生成随机的字符串,如何判断生成的字符串和输入的字符串是否相等。

一、玩家类

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

	}
}

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


o
粉丝 0
博文 70
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.4K
6
Flappy Bird(安卓版)逆向分析(一)

更改每过一关的增长分数 反编译的步骤就不介绍了,我们直接来看反编译得到的文件夹 方法1:在smali目录下,我们看到org/andengine/,可以知晓游戏是由andengine引擎开发的。打开/res/raw/at...

enimey
2014/03/04
5.9K
18
浅入浅出Android(003):使用TextView类构造文本控件

基础: TextView是无法供编辑的。 当我们新建一个项目MyTextView时候,默认的布局(/res/layout/activity_main.xml)中已经有了一个TextView: <TextView 运行效果如下: 修改其文本内容...

樂天
2014/03/22
601
1
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
22

没有更多内容

加载失败,请刷新页面

加载更多

PHP实现RabbitMQ消息队列

先安装PHP对应的RabbitMQ,这里用的是 php_amqp 不同的扩展实现方式会有细微的差异. php扩展地址: http://pecl.php.net/package/amqp 具体以官网为准 http://www.rabbitmq.com/getstarted.htm...

PHP圈子
27分钟前
20
0
pdd笔试题

拼多多提前批的笔试没有报名,但昨天听伙伴们说很难,所以一共4道题,挑了2道会的,自己编了一下。 #include<iostream>#include<vector>#include<algorithm>using namespace std;int ma...

osc_tylqml9v
28分钟前
0
0
拓扑排序算法

/** * 拓扑排序算法,拓扑都是有向无环图 * 使用场景:编译的时候,比如,springboot启动的时候要读取docker系统环境变量,还要读取各配置文件按照顺序 * 还有比如,a的包依赖...

osc_94gn551r
29分钟前
0
0
巨微代理MS1581蓝牙无线收发器

上海巨微MS1581包含8位单片机和低功耗、低成本的BLE收发器,内部集成了发射机、接收机、GFSK调制解调器和BLE基带处理。遵循BLE广播通道通信,具有成本低、体积小、控制方便等优点。巨微代理英...

英尚微电子
30分钟前
12
0
链接测试(内部)

1、长链 https://chelun.eclicks.cn/web/information?info_tid=156984 - 文章test http://cjjl-h5-test.chelun.com/2020/big/index.html - 以小博大test 2、scheme : 钱包 supercoach://myw......

osc_hwc3munb
30分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部