使用Java代码编写QuickHit小游戏

原创 2017年01月03日 10:03:41

小游戏分析:

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




QuickHit项目源代码及小总结

package com.QuickHit; import java.util.Random; public class Game {     Player player;     public Gam...
  • javanewber
  • javanewber
  • 2016年12月04日 22:39
  • 1634

Java代码编写规范

原文出处:http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html,译文出处:http://morningspace.51.net/,mo...
  • JavaEETeacher
  • JavaEETeacher
  • 2007年09月28日 16:50
  • 4377

QuickHit游戏开发项目总结

在此之前已经学过了面向对象的三大特性,即封装,继承,多态,学习了接口的应用,下面是完成的一个游戏项目,这个QuickHit游戏考验的是你的键盘输入速度和准确性,根据输入速度和正确率将玩家分为不同的等级...
  • LS1910831673
  • LS1910831673
  • 2016年12月03日 10:57
  • 521

QuickHit

/* 总结 如果自己分析的话,估计要弄很久才会理清思路,感觉代码的运行顺序不是很理解,一种到达瓶颈的感觉,方法的调用不是很理解,关键是做的题以及看的题不够多。 */ import java.util...
  • Clever_feng
  • Clever_feng
  • 2016年12月02日 20:24
  • 103

Quickhit

import java.util.*; public class Test { public static void main(String[] args) { Player p = new Play...
  • Q2016
  • Q2016
  • 2016年12月01日 19:14
  • 105

Java多线程-小游戏方块赛跑

在一个图形界面上构造两个位于同一起跑线方块,起跑线位于界面靠左位置, A 方块先开始运动,向右移动 50 像素后停止,B 方块开始运动,向右移动 100 像素后停 止,A 方块继续向右运动 100 像...
  • u013084907
  • u013084907
  • 2016年06月20日 16:28
  • 875

java初级阶段quickhit游戏

package Quickhit; import java.util.Random; public class Game { private Player player; pr...
  • Vectorsql
  • Vectorsql
  • 2017年09月28日 08:23
  • 124

《Java小游戏实现》:贪吃蛇

《Java小游戏实现》:贪吃蛇在完成坦克大战之后,就想到了贪吃蛇这个小游戏,因为这两个游戏太像了,因此,就决定把这个游戏来尝试的写下。接下来的几篇博文就是来记录这个小游戏实现的全过程。突然,想起,一年...
  • u010412719
  • u010412719
  • 2016年07月01日 21:35
  • 10620

纪念自己编写的第一个java小游戏,飞翔小鸟

我是一名Java初学者 这是我写的第一个小游戏,特此纪念下 -------------------------------------------------------- 效果图: ...
  • vertexqq
  • vertexqq
  • 2015年01月21日 00:42
  • 3396

java小游戏第一弹 简易俄罗斯

简易俄罗斯方块
  • jrdgogo
  • jrdgogo
  • 2016年03月02日 14:51
  • 4058
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Java代码编写QuickHit小游戏
举报原因:
原因补充:

(最多只允许输入30个字)