ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JAVA经典案例之QuickHit打字游戏

2020-06-30 19:44:02  阅读:342  来源: 互联网

标签:QuickHit JAVA int void 打字 levelNo player new public


JAVA经典案例之QuickHit打字游戏

又是充满学习动力的一天,今天小星星来讲述一下由本人今天做的一个打字游戏的打开过程和解题思路吧!

具体功能实现和案例项目需求如下:在这里插入图片描述
项目分析:项目大概需要3个类,分别是玩家类,游戏类和级别类

在这里插入图片描述
项目需要在这里插入图片描述
在这里插入图片描述
除以上介绍到的类之后,这里还需要创建额外的级别属性数组类:
在这里插入图片描述
主要的功能效果图如下:
在这里插入图片描述
好了说了这么多,想必等不及了吧,开始上实现代码:
import java.util.Random;
//游戏类
public class Game {

public Player player;
public Player getPlayer() {
	return player;
}
public void setPlayer(Player player) {
	this.player = player;
}
// 带参方法
public Game(Player player) {
	this.player=player;
}
//无参方法
public Game() {
	
}
//定义一个int类型对应的各级别对应输出的字符串长度的方法
public String printStr() {
	int strLength=LevelParam.levels[player.getLevelNo()-1].getStrLength();
	StringBuffer buffer=new StringBuffer();
	Random random=new Random();
	//通过循环生成要输出的字符串
	for(int i=0;i<strLength;i++) {
		int rand=random.nextInt(6);//产生随机数
		//根据随机数拼接字符串
		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;
		}
	}
	//输出
	String str=buffer.toString();
	System.out.println(str);
	return str;
}
//进行判断
public void printResult(String out,String in) {
	//判断随机产生的与输入的是否一致
	if(out.equals(in)) {
		//判断是否超时
		long currentTime=System.currentTimeMillis();

		if((currentTime-player.getStartTime())/1000>LevelParam.levels[player.getLevelNo()-1].getTimeLimit()){
			System.out.println("菜鸟输入速度太慢了吧!游戏超时,闯关失败!!!");
			System.exit(0);
		}else {
			//计算当前积分
			player.setCurrScore(player.getCurrScore()+LevelParam.levels[player.getLevelNo()-1].getPerScore());
			//计算时间
			player.setElapsedTime((int) ((currentTime-player.getStartTime())/1000));
			//输出级别,积分和时间
			System.out.println("输入正确,您的级别:"+player.getLevelNo()+"积分:"+player.getCurrScore()+"已用时间:"+(currentTime-player.getStartTime())/1000+"秒<");			
			if(player.getLevelNo()==6){
                int score=LevelParam.levels[player.getLevelNo()-1].getPerScore()*LevelParam.levels[player.getLevelNo()-1].getStrTime();
                if(player.getCurrScore()==score){
                    System.out.println("闯关成功!!!");
                    System.exit(0);
                }
            }
        }
    }else {
		System.out.println("菜鸟输入错误!!!");
		System.exit(1);
	}
}

}
//级别类
public class Level {

public int levelNo;//各级别的编号
public int strLength;//各级别一次输入字符串的长度
public int strTime;//各级别输入字符串的次数
public int timeLimit;//各级别闯关的时间限制
public 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 Level() {
	
}
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 getStrTime() {
	return strTime;
}
public void setStrTime(int strTime) {
	this.strTime = strTime;
}
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 class LevelParam {

public final static Level levels[]=new Level[6];//以对象为数组类型
static {
	
	//级别、各级别字符串的长度、每个级别输出字符串的次数、各级别每次输出字符串的时间限制、各级别正确一轮的分数
	levels[0]=new Level(1,1,2,15,1);
	levels[1]=new Level(2,2,2,18,2);
	levels[2]=new Level(3,3,2,20,5);
	levels[3]=new Level(4,4,2,22,8);
	levels[4]=new Level(5,5,2,24,10);
	levels[5]=new Level(6,6,2,26,15);

}

}
//玩家类
import java.util.Scanner;

public class Player {

 private int levelNo;//玩家当前级别号
 private int currScore;//玩家当前级别积分
 private long startTime;//当前级别开始时间
 private int elapsedTime;//当前级别已用时间
 private int setElapsedTime;

//带参构造方法
 public Player(int levelNo,int currScore,long startTime,int elapsedTime) {
	 this.levelNo=levelNo;
	 this.currScore=currScore;
	 this.startTime=startTime;
	 this.elapsedTime=elapsedTime;
 }
 //无参构造方法
 public Player() {
	 
 }
 
public int getLevelNo() {
	return levelNo;
}
public void setLevelNo(int levelNo) {
	this.levelNo = levelNo;
}
public int getCurrScore() {
	return currScore;
}
public void setCurrScore(int currScore) {
	this.currScore = currScore;
}
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;
}

//玩游戏的play方法
public void play() {
	//调用game的带参.this代表属性
	Game game=new Game(this);
	Scanner input=new Scanner(System.in);
	for(int i=0;i<LevelParam.levels.length;i++) {
		//晋级
		levelNo=levelNo+1;
		//晋级后计时清零
		startTime=System.currentTimeMillis();
		currScore=0;
		//内层循环代表每个级别所需要玩的次数
		for(int j=0;j<LevelParam.levels[i].getStrTime();j++) {
			//输出随机产生的字符串
			String outStr=game.printStr();
			//接收用户输入的字符串
			String inStr=input.next();
			//调用game的printtResult方法,对比
			game.printResult(outStr, inStr);
		}
	}
}

}
//测试类
public class test {

public static void main(String[] args) {
	
	Player player=new Player();
	player.play();
}

}

实现效果图:在这里插入图片描述

好了,到此就结束本次项目的完成,如果有小星星没发现的bug,欢迎大家评论来言~~~~~

标签:QuickHit,JAVA,int,void,打字,levelNo,player,new,public
来源: https://blog.csdn.net/m0_45201772/article/details/107028565

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有