使用Java代码编写QuickHit小游戏

来源:互联网 发布:c语言打印文字图形 编辑:程序博客网 时间:2024/05/19 22:59

小游戏分析:

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   两个关键字的用法




2 0
原创粉丝点击