使用Java代码编写QuickHit小游戏

小游戏分析:

1.主要分成5个类,游戏类(Game),玩家级别(Level),级别参数(LevelParam),玩家类(Player),测试类(Test)

package cn.jbit.quickhit;

import java.util.Random;
/**
 * 游戏类。
 * @author 
 */
public class Game {
	private Player player;// 玩家
		
	/**
	 * 构造方法,传入玩家信息。
	 * @param player 玩家
	 */
	public Game(Player player) {
		this.player = player;
	}
	/**
	 * 输出指定级别规定长度的字符串。
	 * @return 输出的字符串,用于和用户输入比较
	 */
	public String printStr() {
		int strLength = LevelParam.levels[player.getLevelNo() - 1].getStrLength();
		StringBuffer buffer = new StringBuffer();
		Random random = new Random();
		// 1、通过循环生成要输出的字符串
		for (int i = 0; i < strLength; i++) {
			// 1.1、产生随机数
			int rand = random.nextInt(strLength);
			// 1.2、根据随机数拼接字符串
			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;
			}
		}
		// 2、输出字符串
		System.out.println(buffer);
		// 3、返回字符串用于和玩家输入相比较
		return buffer.toString();
	}
	/**
	 * 判断玩家输入是否正确,并输出相应结果信息。
	 * @param out 游戏输出的字符串
	 * @param in 玩家输入的字符串
	 */
	public void printResult(String out, String in) {
		boolean flag;
		if (out.equals(in)) {
			flag=true;
		} else {
			flag=false;
		}
		// 1、 如果输入正确
		if (flag) {
			long currentTime = System.currentTimeMillis();
			// 1.1、 如果超时
			if ((currentTime - player.getStartTime()) / 1000 
					>LevelParam.levels[player.getLevelNo() - 1].getTimeLimit()) {
				System.out.println("你输入太慢了,已经超时,退出!");
				System.exit(1);
				// 1.2、 如果没有超时
			} else {				
				// 1.2.1、 计算当前积分
				player.setCurScore(player.getCurScore()
						+ LevelParam.levels[player.getLevelNo() - 1].getPerScore());
				// 1.2.2、 计算已用时间
				player.setElapsedTime((int) ((currentTime - player
						.getStartTime()) / 1000));
				// 1.2.3、输出当前积分、当前级别、已用时间
				System.out.println("输入正确,您的级别"+ player.getLevelNo()+" ,您的积分" + player.getCurScore() + ",已用时间"	+ player.getElapsedTime() + "秒。");
				// 1.2.4、判断用户是否已经闯过最后一关
				if (player.getLevelNo() == 6) {
					int score=LevelParam.levels[player.getLevelNo() - 1].getPerScore() 
							* LevelParam.levels[player.getLevelNo() - 1].getStrTime();//计算闯关分数
					if (player.getCurScore() == score) {
						System.out.println("你已闯关成功,成为绝世高手,恭喜你!!!");
						System.exit(0);
					}
				}
			}
			// 2、如果输入错误
		} else {
			System.out.println("输入错误,退出!");
			System.exit(1);
		}
	}
}
package cn.jbit.quickhit;

/**
 * 玩家级别。
 * @author 
 */
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) {
		this.levelNo = levelNo;
		this.strLength = strLength;
		this.strTime = strTime;
		this.timeLimit = timeLimit;
		this.perScore = perScore;
	}
	public int getLevelNo() {
		return levelNo;
	}
	public int getStrLength() {
		return strLength;
	}
	public int getStrTime() {
		return strTime;
	}
	public int getTimeLimit() {
		return timeLimit;
	}
	public int getPerScore() {
		return perScore;
	}
}
package cn.jbit.quickhit;
/**
 * 级别参数类,配置各个级别参数。
 * @author 
 */
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);
	}
}
package cn.jbit.quickhit;

import java.util.Scanner;
/**
 * 玩家类。
 * @author 
 */
public class Player {

	private int levelNo; // 级别号
	private int curScore; // 当前积分
	private long startTime = 0; // 各级别开始时间
	private int elapsedTime; // 各级别已用时间

	public long getStartTime() {
		return startTime;
	}

	public void setStartTime(long startTime) {
		this.startTime = startTime;
	}

	public int getLevelNo() {
		return levelNo;
	}

	public void setLevelNo(int levelNo) {
		this.levelNo = levelNo;
	}

	public int getCurScore() {
		return curScore;
	}

	public void setCurScore(int curScore) {
		this.curScore = curScore;
	}

	public int getElapsedTime() {
		return elapsedTime;
	}

	public void setElapsedTime(int elapseTime) {
		this.elapsedTime = elapseTime;
	}

	/**
	 * 玩家玩游戏。
	 */
	public void play() {
		Game game = new Game(this);
		Scanner input = new Scanner(System.in);
		// 外层循环,循环一次级别晋一级
		for (int i = 0; i < LevelParam.levels.length; i++) {
			// 1、 晋级
			this.levelNo += 1;
			// 2、 晋级后计时清零,积分清零
			this.startTime = System.currentTimeMillis();
			this.curScore = 0;
			// 3、 内层循环,循环一次完成一次字符串的输出、输入、比较
			for (int j = 0; j < LevelParam.levels[levelNo-1].getStrTime(); j++) {
				// 3.1、游戏输出字符串
				String outStr = game.printStr();
				// 3.2、接收用户输入
				String inStr = input.next();
				// 3.3、游戏判断玩家输入是否正确,并输出相应结果信息
				game.printResult(outStr, inStr);
			}
		}
	}
}
package cn.jbit.quickhit;

/**
 * 玩家玩游戏。
 * @author 
 */
public class Test {
	public static void main(String[] args) {
		Player player = new Player();
		player.play();
	}
}

总结:

1.注意各个类之间的联系

2.要学会活用接口,继承,多态的基础

3.注重掌握this , static   两个关键字的用法




你可能感兴趣的:(使用Java代码编写QuickHit小游戏)