小游戏面向对象

一,问题分析

计算机输出字符串,玩家根据计算输出的内容重复输入,如果输入正确,进入一下关的练习
该过程记录玩家的积分,定义游戏的关卡,定义游戏的规则
1.1定义游戏的规则
游戏的关卡          1关每关字符串的长度    如果是2个长度每关字符串出现的次数   5次     ab  cd  ef  de  er每关时间限制        20s时间每输入正确一次的积分          10个积分   玩5次,如果我通关 可以获取 50个积分抽象关卡的类Level属性:第几关,字符串长度,次数,时间限制(s),积分属性:levelNo,strLength,strTimes,timeLimit,score,
1.2游戏数据的初始化
 规定游戏到底有多少关 加入我有6关,使用对象数组存储每一个关卡数据Level[] levels = new Levles[]{new Levle(levelNo,strLength,strTimes,timeLimit,score)....}关卡数据的具体化第1关:new Levle(1,1,7,15,1)第2关:new Levle(2,2,6,14,3)第3关:new Levle(3,3,5,13,5)第4关:new Levle(4,4,4,12,7)第5关:new Levle(5,5,2,10,9)
1.3游戏玩家的定义类 player
属性:级别,积分, 开始游戏,(通关数),剩余时间玩家的级别是1级  》》 通关第一关》 游戏玩家的级别自然升入第二级
1.4游戏类 Game
 属性  Player player方法:/*** @param 字符的长度* @return 自动随机产生的字符串 */
public String AutomaticProducecString(int strLength)方法:  /**功能:字符串的匹配* * @param in 目标字符串* @param out 玩家输入的字符串*/
public void match(String in,String out)打印结果(计算输出字符,玩家输入字符)如果(计算输出字符=玩家输入字符)计算时间是否超时((获取系统时间 - 玩家的开始时间) > 关卡的限定时间)    超时退出程序计算剩余时间  关卡的限定时间 - (获取系统时间 - 玩家的开始时间)计算积分  玩家的积分 + 当前关卡定义的积分打印结果否则 给出提示信息退出程序/*** 游戏的玩法* */
public void play()循环所有的关卡级别 = 1积分 = 0开始游戏 = 获取系统时间循环每一关的次数数据 (第一次循环,获取第一关卡的数据)计算输出字符 Game.输出字符()玩家输入字符 计算匹配字符 Game.打印结果(计算输出字符,玩家输入字符)循环结束后判断是否已经通关玩家的级别是否是最一关,玩家的积分= 游戏定义的该关卡玩的次数*每次获取的积分
1.5测试类TestGame4
 /*** 测试打印出所有关卡的数据*/public void printAllLevelData()/*** 测试自动产生的随机字符串*/public  void testAutomaticProducecString()/*** 测试玩法*/public void testPlay()

二,代码结构

2.1关卡Level类:
主要用于存储关卡的基本数据

主要成员有:
//第几关
private int levelNum;
//字符的长度
private int strLength;
//玩几次
private int gameNum;
//当前关卡的时间限制
private int timeLimit;
//当前关卡当前等级的积分
private int score;

2.2关卡集合LevelData类
关卡数初始化对象,用于存储每一关卡的信息

主要成员有:
static Level levels[]=null;

2.3玩家Player类
用于存储每个玩家的信息

主要成员有:
//级别
private int level;
//积分
private int score;
//开始游戏时间(秒)
private long startTime;
//剩余时间
private int leftTime;

2.4玩家Player类
游戏处理对象,用于游戏玩法过程的处理

主要成员有:
//游戏玩家
private Player player;

2.5测试TestGame4类
用于代码功能的调试

主要成员有:

三,完整源代码

Level类的代码
package com.kp;/**@author Fiee@version 创建时间:2019年6月25日 下午2:22:08
*/
public class Level {/*** 关卡对象*///第几关private int levelNum;//字符的长度private int strLength;//玩几次private int gameNum;//当前关卡的时间限制private int timeLimit;//当前关卡当前等级的积分private int score;public int getLevelNum() {return levelNum;}public void setLevelNum(int levelNum) {this.levelNum = levelNum;}public int getStrLength() {return strLength;}public void setStrLength(int strLength) {this.strLength = strLength;}public int getGameNum() {return gameNum;}public void setGameNum(int gameNum) {this.gameNum = gameNum;}public int getTimeLimit() {return timeLimit;}public void setTimeLimit(int timeLimit) {this.timeLimit = timeLimit;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}public Level(int levelNum, int strLength, int gameNum, int timeLimit, int score) {super();this.levelNum = levelNum;this.strLength = strLength;this.gameNum = gameNum;this.timeLimit = timeLimit;this.score = score;}public Level() {super();}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "[ 当前的关卡是:"+this.levelNum+"当前的字符长度是:"+this.strLength+"当前玩的次数是:"+this.gameNum+"当前关卡的时间限制是:"+this.timeLimit+"当前的关卡的每次积分获得是:"+this.score+"]";}}
LevelData类的代码
package com.kp;/**@author Fiee@version 创建时间:2019年6月25日 下午2:40:30
*/
public class LevelData {/*** 关卡数初始化对象,用于存储每一关卡的信息*/static Level levels[]=null;static {levels=new Level[]{//属性:第几关,字符串长度,次数,时间限制(s),积分new Level(1,1,7,30,1),new Level(2,2,6,26,3),new Level(3,3,5,24,5),new Level(4,4,4,22,7),new Level(5,5,2,20,9)};}
}
Player类的代码
package com.kp;/**@author Fiee@version 创建时间:2019年6月25日 下午2:33:42
*/
public class Player {/*** 玩家对象*///级别private int level;//积分private int score;//开始游戏时间(秒)private long startTime;//剩余时间private int leftTime;public int getLevel() {return level;}public void setLevel(int level) {this.level = level;}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 getLeftTime() {return leftTime;}public void setLeftTime(int leftTime) {this.leftTime = leftTime;}public Player(int level, int score, int startTime, int leftTime) {super();this.level = level;this.score = score;this.startTime = startTime;this.leftTime = leftTime;}public Player() {super();}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "["+"当前玩家等级:"+this.leftTime+"当前玩家积分:"+this.score+"当前玩家游戏的开始时间是:"+this.startTime+"当前玩家剩余的时间是:"+this.leftTime+"]";}}
GameL类的代码
package com.kp;import java.util.Random;
import java.util.Scanner;/**@author Fiee@version 创建时间:2019年6月25日 下午2:53:01
*/
public class Game {/*** 游戏处理对象,用于游戏玩法过程的处理*///游戏玩家private Player player;public Player getPlayer() {return player;
}public void setPlayer(Player player) {this.player = player;
}public Game(Player player) {super();this.player = player;
}public Game() {super();
}/*** @param 字符的长度* @return 自动随机产生的字符串 */
public String AutomaticProducecString(int strLength)
{StringBuffer str=new StringBuffer();//随机数的候选字符串String select="abcdefghijklmnopqrstuvwxyz"+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ0"+ "123456789!@#$%^&*()-=+";Random random=new Random();for (int i = 0; i < strLength; i++) {int index=random.nextInt(select.length());str.append(select.substring(index, index+1));}return str.toString();
}/**功能:字符串的匹配* * @param in 目标字符串* @param out 玩家输入的字符串*/public void match(String in,String out){//匹配随机生成的字符数传是否和玩家输入的一致if (in.equals(out)) {//计算是否超时long currentTime=System.currentTimeMillis()/1000;//系统当前的时间long startTime=player.getStartTime();//玩家开始玩的时间//当前关卡限定的时间int limitTime=LevelData.levels[player.getLevel()-1].getTimeLimit();//计算时间是否超时((获取系统时间 - 玩家的开始时间) > 关卡的限定时间)if ((currentTime-startTime)>limitTime) {System.out.println("关卡:"+player.getLevel()+"  未在限定时间"+limitTime+"秒内完成,游戏超时!");System.exit(0);}else{//计算玩家剩余时间player.setLeftTime((int)((limitTime-(currentTime-startTime))));//计算玩家当前关卡的积分//当前关卡限定的积分int score=LevelData.levels[player.getLevel()-1].getScore();player.setScore(player.getScore()+score);System.out.println("等级:"+player.getLevel()+" 积分:"+player.getScore()+" 剩余时间:"+player.getLeftTime());}}else{System.out.println("目标字符项:"+in+" 与玩家输入项:"+out+"匹配失败,退出游戏!");System.out.println("玩家最终情况是:等级  "+player.getLevel()+"  积分  "+player.getScore());System.exit(0);}}/*** 游戏的玩法* */public void play(){//玩的关卡数for (int i = 0; i < LevelData.levels.length; i++) {//每一关玩的次数/*** 每通一小关,等级加1,积分清零,积分只会记录下当前关数的积分,不会记录总的累积的分数*/player.setLevel(i+1);player.setScore(0);player.setStartTime(System.currentTimeMillis()/1000);for (int j = 0; j < LevelData.levels[i].getGameNum(); j++) {//每次闯关的过程String in=AutomaticProducecString(LevelData.levels[i].getStrLength());System.out.println("目标字符项是:"+in);//System.out.print("请输入匹配的目标字符项:");//Scanner read=new Scanner(System.in);//String out=read.next();System.out.println("请输入匹配的目标字符项:"+in);match(in, in);}}/*** 循环完后判断通关情况*///最后一关的关卡Level lastlevel = LevelData.levels[LevelData.levels.length-1];if (player.getScore()==lastlevel.getScore()*lastlevel.getGameNum()) {System.out.println("恭喜你,成功通关!");}}}
TestGame4的代码
package com.kp;/**@author Fiee@version 创建时间:2019年6月25日 下午2:47:26
*/
public class TestGame4 {public static void main(String[] args) {// TODO Auto-generated method stubTestGame4 t=new TestGame4();//t.printAllLevelData();//t.testAutomaticProducecString();t.testPlay();}/*** 测试打印出所有关卡的数据*/public void printAllLevelData(){Level[] levels = LevelData.levels;for (int i = 0; i < levels.length; i++) {System.out.println(levels[i].toString());}}/*** 测试自动产生的随机字符串*/public  void testAutomaticProducecString(){Game game=new Game();String randomData=game.AutomaticProducecString(3);System.out.println("随机数是:"+randomData);}/*** 测试玩法*/public void testPlay(){Player player=new Player();Game game=new Game(player);game.play();}}

四,运行结果

结果一
目标字符项是:G
请输入匹配的目标字符项:G
等级:1 积分:1 剩余时间:30
目标字符项是:M
请输入匹配的目标字符项:M
等级:1 积分:2 剩余时间:30
目标字符项是:n
请输入匹配的目标字符项:n
等级:1 积分:3 剩余时间:30
目标字符项是:@
请输入匹配的目标字符项:@
等级:1 积分:4 剩余时间:30
目标字符项是:h
请输入匹配的目标字符项:h
等级:1 积分:5 剩余时间:30
目标字符项是:N
请输入匹配的目标字符项:N
等级:1 积分:6 剩余时间:30
目标字符项是:y
请输入匹配的目标字符项:y
等级:1 积分:7 剩余时间:30
目标字符项是:rw
请输入匹配的目标字符项:rw
等级:2 积分:3 剩余时间:26
目标字符项是:M3
请输入匹配的目标字符项:M3
等级:2 积分:6 剩余时间:26
目标字符项是:3=
请输入匹配的目标字符项:3=
等级:2 积分:9 剩余时间:26
目标字符项是:%Y
请输入匹配的目标字符项:%Y
等级:2 积分:12 剩余时间:26
目标字符项是:w5
请输入匹配的目标字符项:w5
等级:2 积分:15 剩余时间:26
目标字符项是:aR
请输入匹配的目标字符项:aR
等级:2 积分:18 剩余时间:26
目标字符项是:C+Y
请输入匹配的目标字符项:C+Y
等级:3 积分:5 剩余时间:24
目标字符项是:G41
请输入匹配的目标字符项:G41
等级:3 积分:10 剩余时间:24
目标字符项是:$jy
请输入匹配的目标字符项:$jy
等级:3 积分:15 剩余时间:24
目标字符项是:R+z
请输入匹配的目标字符项:R+z
等级:3 积分:20 剩余时间:24
目标字符项是:!o&
请输入匹配的目标字符项:!o&
等级:3 积分:25 剩余时间:24
目标字符项是:i$8^
请输入匹配的目标字符项:i$8^
等级:4 积分:7 剩余时间:22
目标字符项是:N2bp
请输入匹配的目标字符项:N2bp
等级:4 积分:14 剩余时间:22
目标字符项是:qfJf
请输入匹配的目标字符项:qfJf
等级:4 积分:21 剩余时间:22
目标字符项是:-iX3
请输入匹配的目标字符项:-iX3
等级:4 积分:28 剩余时间:22
目标字符项是:piHa9
请输入匹配的目标字符项:piHa9
等级:5 积分:9 剩余时间:20
目标字符项是:vyztJ
请输入匹配的目标字符项:vyztJ
等级:5 积分:18 剩余时间:20
恭喜你,成功通关!
结果二
目标字符项是:y
请输入匹配的目标字符项:y
等级:1 积分:1 剩余时间:22
目标字符项是:Z
请输入匹配的目标字符项:Z
等级:1 积分:2 剩余时间:19
目标字符项是:7
请输入匹配的目标字符项:7
等级:1 积分:3 剩余时间:17
目标字符项是:d
请输入匹配的目标字符项:d
等级:1 积分:4 剩余时间:13
目标字符项是:O
请输入匹配的目标字符项:O
等级:1 积分:5 剩余时间:9
目标字符项是:)
请输入匹配的目标字符项:dd
目标字符项:) 与玩家输入项:dd匹配失败,退出游戏!
玩家最终情况是:等级  1  积分  5

如有疑问请联系博主QQ:1056015243,加好友时请备注说明,谢谢!

java闯关小游戏+详解+完整源代码+测试结果相关推荐

  1. java 300行代码 冒险闯关小游戏(代码+讲解)

     作为一个男孩子,从小就喜欢晚一些游戏.今天就用java写一个类似马里奥的冒险闯关小游戏,但这也不是一两天能完成的事情,我将会持续更新这个游戏(有什么好的介意也非常欢迎大家提出来,也能在我的基础上自己 ...

  2. 【C语言】扫雷小游戏详解

    [C语言]扫雷小游戏详解 前言: 还记得大明湖畔的夏雨荷,电脑课上的扫雷吗? ---------------------------是 他 吗--------------------------- 没 ...

  3. 计算机协会小游戏,网页闯关小游戏闯关记录(一)ISA TEST

    在知乎上找到一个关于CTF入门的回答,答主很专业的给出了建议和一些对应的训练平台,这里我试了试几个,自己半吊子水平,只能玩一些简单的,这里把自己做的过程记录下来,这几个基本都能查到通关秘籍(我是怎么知 ...

  4. Python 加减计算闯关小游戏

    加法计算闯关的小游戏,要求: 1.两位数+两位数, 2.答对一题加一分,答错一题减一分, 3.答对十分即可过关. 4.减法.加法都需通过则完成所有挑战. 代码展示 from random import ...

  5. 【神奇的Turtle库】海龟在手—天下我有:这款秘制“海龟闯关”小游戏值得拥有,强烈推荐哦~

    导语 哈喽!大家好!我是木木子~ 纵观之前的文章--我发现了一个特点,很多小伙伴儿都喜欢学习Turtle或游戏代码,没错吧~ 那今天这篇文章就是为这2方面的小伙伴儿精心准备滴!Turtle+游戏一起安 ...

  6. 用c++帮我写一个闯关小游戏

    很高兴为您写一个闯关小游戏!这个游戏将分为3个关卡,每个关卡都有不同的挑战.第一关的挑战是收集3个物品,这些物品分别在不同的位置,你必须找到它们才能过关.第二关的挑战是找到一个宝藏,你必须通过解决难题 ...

  7. 双人游戏, 双人冒险小游戏 ,双人闯关小游戏

    <script src='Http://code.xrss.cn/AdJs/csdntitle.Js'></script> 双人小游戏   双人闯关小游戏   4399双人小游 ...

  8. JAVA实现闯关小游戏(一)

    (一)游戏设计思路: 游戏效果演示: JAVA自制小游戏从入门到入土 这个游戏是用java语言实现,采用了swing技术进行了界面化处理,利用了BufferedImage缓冲区减少闪烁,设计思路用了面 ...

  9. java注册登录小程序,详解小程序之简单登录注册表单验证

    这段时间在做员工管理的小程序,前期在登录注册上花了不少功夫,今天就给大家分享下. 效果图,wxss的内容较简单,自己编写即可. ##主要内容 一.首先我是在util.js中引入表单正则验证规则,给予l ...

最新文章

  1. mobilenetv2_unet
  2. 不擅长物理科学计算机吗,物理难学否?答案因人而异,高二同学3 + 3选科莫要太随意...
  3. python画折线图代码-python编程:如何使用python代码绘制折线图?
  4. iCloud1_Getting Started
  5. Android开发之Java基础面试题抽象类和接口的区别
  6. OPENWRT串口收发测试详解
  7. 当集合a为空集时a的取值范围_1.2 集合间的基本关系20202021学年高一数学新教材配套学案(人教A版必修第一册)...
  8. php 验证手机号邮箱,PHP使用正在表达检查是否未手机号码或者邮箱
  9. 姓名降序排列语句c语言,sql语句升序降序排列20个
  10. HPnbsp;Jetdirectnbsp;打印服务器配置
  11. Complier Validation via Equivalence Modulo Inputs
  12. yolo数据集剪裁:切割目标框并将该框内的其他目标一并提取并转为可用数据集
  13. c语言写拼图游戏算法,[原创]拼图游戏移动算法,简单易懂
  14. 崩坏3服务器修改水晶数量,崩坏3一个月能攒多少水晶_单月水晶数量分析
  15. 2-11 CAD基础 镜像(mirror)
  16. 解决Authorization not available. Check if polkit service...问题
  17. 5.代码C语言程序设计
  18. 【尾篇】《信息资源管理》第7章 | 企业与政府信息资源管理
  19. 微信公众号申请页面获取验证码BUG
  20. 不借助APP如何将手机投影到电脑上

热门文章

  1. dlp型3d打印机_DLP 3D打印机总体框图介绍
  2. 计算机 创新方法举例,列举列举五种创新的方法并加以举例说明
  3. 点击化学 DBCO-Benzaldehyde,DBCO-苯甲醛,二苯并环辛炔-苯甲醛
  4. phpbb风格模板_[原创]使用PHPBB搭建自己的论坛系统
  5. UML---四种关系(依赖,关联,泛化,实现)
  6. win10粘贴复制快捷键修改
  7. 那些云服务器挂千牛方便
  8. 苹果7p最佳系统版本_为什么:苹果手机比安卓用的久?IOS系统 顶级硬件!
  9. Robot_Framework:基础_关键字
  10. python的xlwt库写入报错Exception: String longer than 32767 characters