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

小游戏面向对象

一,问题分析
计算机输出字符串,玩家根据计算输出的内容重复输入,如果输入正确,进入一下关的练习
该过程记录玩家的积分,定义游戏的关卡,定义游戏的规则
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();
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "[ 当前的关卡是:"+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();
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "["+"当前玩家等级:"+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 stub
		TestGame4 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,加好友时请备注说明,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值