控制台的小游戏,没事情的可以做做玩耍
仅供参
><
><
输入正确,您的级别是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);
}
}