QuietHit小Game
根据项目的要求分别建出几个类
有游戏类
玩家类
测试类
等级类
等级时间类
一以下类图:
游戏类:
public class Game {
private Player player; public Game(Player player) {
super();
this.player = player;
} public String printStr(){
//对字符串进行增删改查
StringBuffer buffer = new StringBuffer();
//创建随机数对象
Random random = new Random();
//循环生成对应玩家等级长度的字符串
for (int i = 0;i < LevelParam.levels[player.getLevelNo() - 1].getStrLength();i++ )
{
//每次循环就产生一个随机数
int rand = random.nextInt(6);
//拼接产生随机数所对应的字符串
switch (rand)
{
case 0:{
buffer.append(">");
break;
}
case 1:{
buffer.append("<");
break;
}
case 2:{
buffer.append("*");
break;
}
case 3:{
buffer.append("&");
break;
}
case 4:{
buffer.append("%");
break;
}
case 5:{
buffer.append("#");
break;
}
}
}
//输出所生成的字符串,让玩家可以对应着输入
System.out.println(buffer.toString());
//返回生成的字符串
return buffer.toString();
}
//对比系统生成的字符串和玩家输入的字符串是否一样
public void printResult(String out,String in){ if(out.equals(in)){
long currentTime=System.currentTimeMillis();
//如果超时
if((currentTime-player.getStartTime())/1000>LevelParam.levels[player.getLevelNo()-1].getTimeLimit()){
System.out.print("你的速度连乌龟都比不上,已经超时,退出!");
System.exit(1);
//如果没有超时
}else {
//计算玩家当前积分
player.setCurrScore(player.getCurrScore()+LevelParam.levels[player.getLevelNo()-1].getPerScore());
//计算玩家以用时间
player.setElapsedTime((int) ((currentTime - player .getStartTime()) / 1000));
//输出玩家当前级别,当前积分和以用时间
System.out.println("输入正确,您的级别"+player.getLevelNo()+",您的积分"+player.getCurrScore()+",已用时间"+player.getElapsedTime()+"秒");
//判断用户是否已经闯过最后一关并处理
if(player.getLevelNo()==6){
int score=LevelParam.levels[player.getLevelNo() - 1].getPerScore() * LevelParam.levels[player.getLevelNo() - 1].getStrTime();
if(player.getCurrScore()==score){
System.out.println("恭喜您,你真是个人才!");
}else{
System.out.println("藤球你被淘汰了,退出!");
System.exit(0);
} }
}
}else{
System.out.println("输入错误");
System.out.println("正确的是"+out);
System.exit(0);
}
}
玩家类:
public class Player {
//当前级别号
private int levelNo;
//当前级别积分
private int currScore;
//当前级别开始时间
private long startTime=0;
//当前级别以用时间
private int elapsedTime;
public int getLevelNo() {
return levelNo;
}
public void setLevelNo(int levelNo) {
this.levelNo = levelNo;
}
public int getCurrScore() {
return currScore;
}
public void setCurrScore(int currScore) {
this.currScore = currScore;
}
public long getStartTime() {
return startTime;
}
public void setStartTime(long startTime) {
this.startTime = startTime;
}
public int getElapsedTime() {
return elapsedTime;
}
public void setElapsedTime(long l) {
this.elapsedTime = (int) l;
}
public Player(int levelNo, int currScore, long startTime, int elapsedTime) {
super();
this.levelNo = levelNo;
this.currScore = currScore;
this.startTime = startTime;
this.elapsedTime = elapsedTime;
}
public Player() {
super();
// TODO Auto-generated constructor stub
}
public void play(){
System.out.println("游戏开始请输入");
Game game=new Game(this);
// game.setPlayer(this);
Scanner scanner = new Scanner(System.in);
//外层循环代表着等级
for (int i = 0;i < LevelParam.levels.length ;i++ )
{
//玩家晋级
levelNo += 1;
//获得新的游戏开始时间
startTime = System.currentTimeMillis();
//每次晋级玩家积分清零
currScore = 0;
//内层循环代表着每个级别所需要玩的次数
for (int j = 0;j < LevelParam.levels[i].getStrTime() ;j++ )
{
//系统生成的字符串
String out = game.printStr();
//玩家输入的字符串
String in = scanner.next();
//比较,产生结果
game.printResult(out,in);
}
}
等级类:
public class Level {
private int levelNo; // 级别号
private int strLength; // 各级别一次输出字符串的长度
private int strTime; // 各级别输出字符 串的次数
private int timeLimit; // 各级别闯关的时间限制
private int perScore; // 各级别成功输入一次字符串后增加的分值
public Level(int levelNo, int strLength, int strTime, int timeLimit,
int perScore) {
super();
this.levelNo = levelNo;
this.strLength = strLength;
this.strTime = strTime;
this.timeLimit = timeLimit;
this.perScore = perScore;
}
public int getLevelNo() {
return levelNo;
}
public void setLevelNo(int levelNo) {
this.levelNo = levelNo;
}
public int getStrTime() {
return strTime;
}
public void setStrTime(int strTime) {
this.strTime = strTime;
}
public Level() {
super();
}
public int getLeveNo() {
return levelNo;
}
public void setLeveNo(int leveNo, int levelNo) {
this.levelNo = levelNo;
}
public int getStrLength() {
return strLength;
}
public void setStrLength(int strLength) {
this.strLength = strLength;
}
public int getStrTimes() {
return strTime;
}
public void setStrTimes(int strTimes) {
this.strTime = strTimes;
}
public int getTimeLimit() {
return timeLimit;
}
public void setTimeLimit(int timeLimit) {
this.timeLimit = timeLimit;
}
public int getPerScore() {
return perScore;
}
public void setPerScore(int perScore) {
this.perScore = perScore;
}
等级得分时间类:
public class LevelParam {
public final static Level levels[]=new Level[6];
//对应六个级别
static {
levels[0]=new Level(1, 2, 10, 30,1);
levels[1]=new Level(2, 3, 9, 26,2);
levels[2]=new Level(3, 4, 8, 22,5);
levels[3]=new Level(4, 5, 7, 18,8);
levels[4]=new Level(5, 6, 6, 15,10);
levels[5]=new Level(6, 7, 5, 12,15);
}
}
测试类:
public static void main(String[] args) {
// TODO Auto-generated method stub
Player player = new Player();
player.play();
}
QuietHit小Game的更多相关文章
- 【小程序分享篇 二 】web在线踢人小程序,维持用户只能在一个台电脑持登录状态
最近离职了, 突然记起来还一个小功能没做, 想想也挺简单,留下代码和思路给同事做个参考. 换工作心里挺忐忑, 对未来也充满了憧憬与担忧.(虽然已是老人, 换了N次工作了,但每次心里都和忐忑). 写写代 ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- jQuery实践-网页版2048小游戏
▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...
- 微信小程序开发心得
微信小程序也已出来有一段时间了,最近写了几款微信小程序项目,今天来说说感受. 首先开发一款微信小程序,最主要的就是针对于公司来运营的,因为,在申请appid(微信小程序ID号)时候,需要填写相关的公司 ...
- 前端网络、JavaScript优化以及开发小技巧
一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...
- 微信应用号(小程序)开发IDE配置(第一篇)
2016年9月22日凌晨,微信宣布“小程序”问世,当然只是开始内测了,微信公众平台对200个服务号发送了小程序内测邀请.那么什么是“小程序”呢,来看微信之父怎么说 看完之后,相信大家大概都有些明白了吧 ...
- Chrome出了个小bug:论如何在Chrome下劫持原生只读对象
Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...
- TODO:小程序开发过程之体验者
TODO:小程序开发过程之体验者 1. 小程序开发过程,先下载开发者并安装开发者工具,现在腾讯开放测试了,普通用户也可以登录开发者工具,如图普通用户登录为调试类型,但是只能建立无AppID的项目 如果 ...
- TODO:即将开发的第一个小程序
TODO:即将开发的第一个小程序 微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验.个人理解小程序是寄宿在微信平台上的一个前端框架,具有跨平台功能, ...
随机推荐
- 使用jQuery的一些建议
1.尽可能使用id选择器而不是类选择器 例如: //html <p id="chooseId">测试文本</p> //jQuery console.time ...
- 【原】eclipse创建maven工程时,如何修改默认JDK版本?
问题描述:eclipse建立maven项目时,JDK版本默认是1.5,想创建时默认版本设置为1.8,如何修改? 解决方案: 找到本机maven仓库存放位置,比如:${user.home}/.m2/路径 ...
- 芝麻HTTP:Python爬虫入门之正则表达式
1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来 ...
- ubuntu 更改默认亮度
chmod 777 /sys/class/backlight/intel_backlight/brightnes chmod 777 /sys/class/backlight/intel_backli ...
- SpringBoot特性
一.SpringBoot解决的问题 1.使编码变得简单 2.使配置变得简单 3.使部署变得简单 4.使监控变得简单 二.springboot主要特性 1.遵循习惯优于配置的原则.使用springboo ...
- [NOIP2017] 逛公园
[NOIP2017] 逛公园 题目大意: 给定一张图,询问长度 不超过1到n的最短路长度加k 的1到n的路径 有多少条. 数据范围: 点数\(n \le 10^5\) ,边数\(m \le 2*10^ ...
- [BZOJ1061] [Noi2008] 志愿者招募 (费用流)
Description 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难 题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能 ...
- [BZOJ1552] [Cerc2007] robotic sort (splay)
Description Input 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000.第二行为N个用空格隔开的正整数,表示N个物品最初排列的编号. Output ...
- 算法精解:DAG有向无环图
DAG是公认的下一代区块链的标志.本文从算法基础去研究分析DAG算法,以及它是如何运用到区块链中,解决了当前区块链的哪些问题. 关键字:DAG,有向无环图,算法,背包,深度优先搜索,栈,BlockCh ...
- Zabbix 监控 Docker容器
我们可以通过Python提供的模块docker来取各个docker容器的监控参数.参考文档:http://docker-py.readthedocs.io/en/stable/containers.h ...