根据项目的要求分别建出几个类

有游戏类

玩家类

测试类

等级类

等级时间类

一以下类图:

游戏类:

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的更多相关文章

  1. 【小程序分享篇 二 】web在线踢人小程序,维持用户只能在一个台电脑持登录状态

    最近离职了, 突然记起来还一个小功能没做, 想想也挺简单,留下代码和思路给同事做个参考. 换工作心里挺忐忑, 对未来也充满了憧憬与担忧.(虽然已是老人, 换了N次工作了,但每次心里都和忐忑). 写写代 ...

  2. 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

    有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...

  3. jQuery实践-网页版2048小游戏

    ▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...

  4. 微信小程序开发心得

    微信小程序也已出来有一段时间了,最近写了几款微信小程序项目,今天来说说感受. 首先开发一款微信小程序,最主要的就是针对于公司来运营的,因为,在申请appid(微信小程序ID号)时候,需要填写相关的公司 ...

  5. 前端网络、JavaScript优化以及开发小技巧

    一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...

  6. 微信应用号(小程序)开发IDE配置(第一篇)

    2016年9月22日凌晨,微信宣布“小程序”问世,当然只是开始内测了,微信公众平台对200个服务号发送了小程序内测邀请.那么什么是“小程序”呢,来看微信之父怎么说 看完之后,相信大家大概都有些明白了吧 ...

  7. Chrome出了个小bug:论如何在Chrome下劫持原生只读对象

    Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...

  8. TODO:小程序开发过程之体验者

    TODO:小程序开发过程之体验者 1. 小程序开发过程,先下载开发者并安装开发者工具,现在腾讯开放测试了,普通用户也可以登录开发者工具,如图普通用户登录为调试类型,但是只能建立无AppID的项目 如果 ...

  9. TODO:即将开发的第一个小程序

    TODO:即将开发的第一个小程序 微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验.个人理解小程序是寄宿在微信平台上的一个前端框架,具有跨平台功能, ...

随机推荐

  1. MySQL日期类型和毫秒值相互转换

    有时需要将日期类型值转换成毫秒值,有时也要将毫秒值转换成日期,为了更方便,满足查询的需要. 现在,新建一张数据库表t_stu_info,并向表里插入数据 use test; show tables; ...

  2. 复制粘贴之插件(clipboard.min.js)不需要安装flash

    <!DOCTYPE html> <html> <head> <title>ZeroClipboard Test</title> <me ...

  3. json省市县数据源

    {cityData,"Code":""},{"Name":"牡丹江市",","Code": ...

  4. python根据索引删除内容并写入文本

    在python中,有个好用的模块linecache,该模块允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读取多行.linecache.getline(filename,li ...

  5. JS中ptototype和__proto__的关系

    学到原型的时候感觉头都大了/(ㄒoㄒ)/~~ 尤其是ptototype和__proto__ 傻傻分不清  通过多番查找资料,根据自己的理解,总结如下: 一.构造函数: 构造函数:通过new关键字可以用 ...

  6. [SDOI2010]粟粟的书架

    题目大意: 网址:https://daniu.luogu.org/problemnew/show/2468 大意:本题有两问: [1] 给定一个\(R*C\)的带权矩阵,询问\(2×10^5\)次在一 ...

  7. 【WC2001】【cogs358】高性能计算机(动态规划)

    [WC2001][cogs358]高性能计算机(动态规划) ##题面 [问题描述] 现在有一项时间紧迫的工程计算任务要交给你--国家高性能并行计算机的主管工程师--来完成.为了尽可能充分发挥并行计算机 ...

  8. sharepoint 2013实践

    之前在一篇文章中说过了SharePoint环境的安装.那么如何使用SharePoint开发一个站点呢?这就是本篇所要阐述的问题. 在如何具体操作之前,我们先来普及下SharePoint基础知识.Far ...

  9. 笔记-JS高级程序设计-基本概念篇

    1:JS中的一切(变量,函数名和操作符)都是区分大小写的 2:标识符(变量,函数,属性的名字,以及函数的参数),第一个字符必须是字母,下划线,或者美元$,书写方式采用驼峰式,不能将关键字作为标识符. ...

  10. UML 中extend和include的区别

    在UML用例图中有两种关系——包含和扩展,容易混淆,下面通过一张表来区别一下这两种关系.