目录

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

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

计算机输出字符串,玩家根据计算输出的内容重复输入,如果输入正确,进入一下关的练习
该过程记录玩家的积分,定义游戏的关卡,定义游戏的规则
游戏的关卡          1关
     每关字符串的长度    如果是2个长度
     每关字符串出现的次数   5次     ab  cd  ef  de  er
     每关时间限制        20s时间
     每输入正确一次的积分          10个积分   玩5次如果我通关 可以获取 50个积分
     
     抽象关卡的类Level
     属性第几关字符串长度次数时间限制s),积分
     属性levelNo,strLength,strTimes,timeLimit,score,
 规定游戏到底有多少关 加入我有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级  》》 通关第一关 游戏玩家的级别自然升入第二级    
 属性  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.打印结果计算输出字符玩家输入字符

       循环结束后判断是否已经通关
    			玩家的级别是否是最一关玩家的积分= 游戏定义的该关卡玩的次数*每次获取的积分
   
     
	/**
	 * 测试打印出所有关卡的数据
	 */
	public void printAllLevelData()


		/**
	 * 测试自动产生的随机字符串
	 */
	public  void testAutomaticProducecString()


	/**
	 * 测试玩法
	 */
	public void testPlay()

主要成员有:

//第几关

private int levelNum;

//字符的长度

private int strLength;

//玩几次

private int gameNum;

//当前关卡的时间限制

private int timeLimit;

//当前关卡当前等级的积分

private int score;

主要成员有:

static Level levels[]=null;

主要成员有:

//级别

private int level;

//积分

private int score;

//开始游戏时间(秒)

private long startTime;

//剩余时间

private int leftTime;

主要成员有:

//游戏玩家

private Player player;

主要成员有:

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+"]";
	}
	
	
	
	
}
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)
					};
	}
}
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+"]";
	}
	
	
	
	
	
}
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("恭喜你,成功通关!");
		}
	}


	
}
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