十六、综合练习,QuickHit

控制台的小游戏,没事情的可以做做玩耍
仅供参

><
><
输入正确,您的级别是1,您的积分是1.已经用时三秒

首先我们根据控制台的显示我们可以分析出几个类了
1.游戏类Game
里面没有属性
方法是:
一、生成当前关卡的字符串
生成固定的长度的随机字符串
固定长度:这个固定长度其实是来源于当前等级的字符串长度的属性,每次要随机出一个字符串,所以根据字符串的长度属性编写指定次数的循环
随机字符串:我们定义了几个符号,当长度是2,从前2个取,当长度是3时,从前3个取
<>*&^%
我们可以用switch选择结构来进行选取字符
我们也可以使用字符数组的方式,(将字符数组存在字符数组中,随机生成指定区间的一个数值,<区间采用字符数组的下标>,然后借用下标,取出字符,拼接到字符串中)
②输出字符串
③返回字符串
二、游戏的结算功能
1.判断玩家是否输入的正确
2.判断玩家是否超时
3.判断玩家是否已经达到顶级
4.如果没有达到满级,输出当前的玩家的等级,积分。已用时间,信息
2.玩家类Player
属性:当前的级别
当前的积分
当前级别开始时间
当前级别医用时间
方法:玩游戏
· 一共有六级,每一级别是固定次数的关卡。(利用双重循环)

			外层循环是:遍历游戏的等级
					升级++
					积分和时间清零

			内层循环:当前级别的关卡次数
					游戏生成随机字符串
					玩家输入字符串
					游戏结算

3.等级类Level

属性:
	级别的编号
	当前级别需要的次数
	当前级别输入正确所加的分数
	当前级别的时间限制
	字符串的长度

以下是参考代码

import java.util.Random;

import cn.kgc.quickhit.util.LevelUtil;

/**
 * 游戏类
 * @author 9212632
 * 2019年2月20日 下午2:05:50
 */
public class Game {

	/** 当前玩家的信息(在生成关卡难度和结算时都需要玩家的信息) */
	private Player player;
	
	public Game() {
		
	}
	
	public Game(Player player) {
		this.player = player;
	}
	
	
	/*
	 * 字符串是不可变的!如果你改变了字符串的长度/内容,那么其实已经不再是之前的字符串了!
	 * 每一次你的改变都将会导致新的字符串被创建。String 是引用数据类型
	 * 
	 * StringBuffer(缓冲)
	 * 
	 */
	/**
	 *  生成当前关卡字符串
	 *  1.生成字符串   2.输出字符串  3.返回字符串
	 *  	要求:生成的字符串是固定长度的随机字符串 
	 * @return
	 */
	public String printStr() {
		// String str = "";
		// 只要是遇到频繁修改字符串的场景  不要使用+号拼接 使用StringBuffer StringBuilder
		StringBuffer sb = new StringBuffer();
		
		// 获取当前玩家的等级信息
		int levelNo = player.getLevelNo();
		Level level = LevelUtil.levels[levelNo - 1];
		Random random = new Random();
		// 如果字符串要求是长度为2  则表示要生成2个字符(2次)  
		for(int i = 0; i < level.getStrLength(); i++) {
			// 随机数  [0,长度) int value between zero (inclusive) and bound (exclusive) 
			int randInt = random.nextInt(level.getStrLength());
			switch (randInt) {
				case 0:
					// str += "<";
					// 向后追加字符串
					sb.append("<");
					break;
				case 1:
					// str += ">";
					sb.append(">");
					break;
				case 2:
					// str += "*";
					sb.append("*");
					break;
				case 3:
					// str += "&";
					sb.append("&");
					break;
				case 4:
					// str += "#";
					sb.append("#");
					break;
				case 5:
					// str += "%";
					sb.append("%");
					break;
				case 6:
					// str += "^";
					sb.append("^");
					break;
				default:
					break;
			}
		}
		System.out.println(sb);
		// 将StringBuffer的内容以字符串展示出来
		return sb.toString();
	}
	
	/**
	 * 游戏结算和结果输出
	 * @param playInput 玩家输入的
	 * @param gameOutput 游戏生成的
	 */
	public void printResult(String playInput,String gameOutput) {
		// 1.判断是否正确
		if(playInput.equals(gameOutput)) {
			// 2.输入是否超时
			// 当前时间  - 开始时间  <  当前等级的时间限制
			long currentTime = System.currentTimeMillis();
			int elapsedTime = (int) ((currentTime - player.getStartTime()) / 1000);
			// 获取当前等级信息
			Level level = LevelUtil.levels[player.getLevelNo() - 1];
			// 判断
			if(elapsedTime < level.getTimeLimit()) {
				// 累加积分
				player.setCurScore(player.getCurScore() + level.getPerScore());
				// 3.输出前判断是否已经登峰造极 (当前的等级是不是已经到达最高级   当前的等级积分是否已经达到最大值)
				Level[] levels = LevelUtil.levels;
				Level topLevel = levels[levels.length - 1];
				if((player.getLevelNo()  == levels.length) 
						&& (player.getCurScore() == topLevel.getPerScore() * topLevel.getStrTimes())) {
					System.out.println("感谢您的支持!您已经甄至巅峰!本服没有人能再超越你了!");
					System.exit(0);
				}else {
					System.out.println("输入正确!您的级别:"+player.getLevelNo()+" 积分:"+player.getCurScore()+ " 已用时间:"+elapsedTime+"s");
				}
			}else {
				System.out.println("你手残吧!输的怎么这么慢!超时结束!");
				System.exit(0);
			}
		}else {
			System.out.println("输入错误!程序结束!");
			System.exit(0);
		}
	}

	public Player getPlayer() {
		return player;
	}

	public void setPlayer(Player player) {
		this.player = player;
	}
	
}

package cn.kgc.quickhit.entity;
/**
 * 游戏等级
 * @author 9212632
 * 2019年2月20日 下午2:13:35
 */
public class Level {

	/** 等级编号 */
	private int levelNo;
	/** 当前等级字符串的长度 */
	private int strLength;
	/** 当前等级字符串输出次数 */
	private int strTimes;
	/** 当前等级时间限制 */
	private int timeLimit;
	/** 当前等级 输入正确所加分数 */
	private int perScore;
	
	public int getLevelNo() {
		return levelNo;
	}
	public void setLevelNo(int levelNo) {
		this.levelNo = levelNo;
	}
	public int getStrLength() {
		return strLength;
	}
	public void setStrLength(int strLength) {
		this.strLength = strLength;
	}
	public int getStrTimes() {
		return strTimes;
	}
	public void setStrTimes(int strTimes) {
		this.strTimes = 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 Level() {
		super();
	}
	public Level(int levelNo, int strLength, int strTimes, int timeLimit, int perScore) {
		super();
		this.levelNo = levelNo;
		this.strLength = strLength;
		this.strTimes = strTimes;
		this.timeLimit = timeLimit;
		this.perScore = perScore;
	}
	
}

package cn.kgc.quickhit.entity;

import java.util.Scanner;

import cn.kgc.quickhit.util.LevelUtil;

/**
 * 玩家类
 * @author 9212632
 * 2019年2月20日 下午2:07:42
 */
public class Player {

	/** 当前等级 */
	private int levelNo;
	/** 当前等级积分 */
	private int curScore;
	/** 当前等级开始时间  单位:毫秒 */
	private long startTime;
	/** 当前等级已用时间  单位:秒 */
	private int elapsedTime;
	
	/**
	 * 玩游戏
	 */
	public void play() {
		Game game = new Game(this);
		Scanner input = new Scanner(System.in);
		// 双重循环
		Level[] levels = LevelUtil.levels;
		// 外层循环:所有的级别
		for(int i = 0; i < levels.length; i++) {
			// 升级
			this.levelNo ++; 
			// 积分清零
			this.curScore = 0;
			// 时间清零
			this.elapsedTime = 0;
			// 开始时间重置
			this.startTime = System.currentTimeMillis();
			// 内层循环:每个级别的关卡
			for(int j = 0; j < levels[i].getStrTimes(); j++) {
				// 游戏方产生字符串
				String gameOutput = game.printStr();
				// 玩家输入字符串
				String playerInput = input.next();
				// 结算
				game.printResult(playerInput, gameOutput);
			}
		}
	}

	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 long getStartTime() {
		return startTime;
	}

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

	public int getElapsedTime() {
		return elapsedTime;
	}

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

	public Player() {
		super();
	}
	
}

package cn.kgc.quickhit.main;

import cn.kgc.quickhit.entity.Player;

/**
 * 程序入口
 * @author 9212632
 * 2019年2月20日 下午2:14:04
 */
public class GameMain {

	public static void main(String[] args) {

		new Player().play();
	}

}

package cn.kgc.quickhit.test;

import cn.kgc.quickhit.entity.Game;
import cn.kgc.quickhit.entity.Player;

public class Test {

	public static void main(String[] args) {
		
		Player player = new Player();
		player.setLevelNo(4);
		
		Game game = new Game(player);
		game.printStr();
	}

}

package cn.kgc.quickhit.util;

import cn.kgc.quickhit.entity.Level;

/**
 * 等级工具类  存储了等级信息
 * @author92126322
 * 2019年2月20日 下午2:21:57
 */
public class LevelUtil {
	public final static Level[] levels = new Level[6];//对应六个级别
	static {
		// 1级别  字符串长度为2  需要通10关  用时不能超过30s  每通关一次增加1分
		levels[0]=new Level(1, 2, 10, 20,1);
		levels[1]=new Level(2, 3, 9, 10,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);
	}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值