QuickHit小游戏代码实现

2023-11-18

首先先明确下这个小游戏的需求

1.根据输入速率和正确率将玩家分为不同级别

2.级别越高,一次显示的字符数越多,玩家正确输入一次的得分也越高

3.规定时间内完成规定次数的输入,正确率达到规定要求,则升级 (玩家最高级别为6级、初始级别一律为1级 )

5.用户错误输入一次,游戏结束

看到这些需求很多刚接触的小伙伴一定懵了吧,不知道该如何下手了。没事跟着我,慢慢来。

首先我们先创造几个类:玩家(Player)类   

                                        游戏(Game)类   

                                        级别(Level)类

级别类(Level)里的属性 :

各级别号(levelNo)

各级别一次输出字符串的长度(strLength)

各级别输出字符串的次数(strTimes)

各级别闯关的时间限制(timeLimit)

各级别正确输入一次的得分(perScore)

public class Level {
	private int levelNo; // 级别号
	private int strLength; // 各级别一次输出字符串的长度
	private int strTimes; // 各级别输出字符串的次数
	private int timeLimit; // 各级别闯关的时间限制
	private int perScore; // 各级别成功输入一次字符串后增加的分值
	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;
	}
	public Level() {
		super();
	}
	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;
	}
	
}

再创个新类(LevelParam),初始化一下信息

public class LevelParam {
	public static final 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);
	}
	
}

游戏类(Game)的方法

String printStr()  输出字符串,返回字符串用于和玩家输入比较

void printResult(String out,String in) 比较游戏输出out和玩家输入in,根据比较结果输出相应信息

import java.util.Random;

public class Game {
	private Player player;

	public Game(Player player) {
		super();
		this.player = player;
	}

	public Game() {
		super();
	}

	public Player getPlayer() {
		return player;
	}

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

	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(strLength); // 产生随机数
			// 根据随机数拼接字符串
			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;
			}	
			
		}
		System.out.println(buffer);
        return buffer.toString();
	}
	
	public void printResult(String out, String in) {
		boolean flag;
		if(out.equals(in)){
			flag=true;
		}else{
			flag=false;
		}
		if(flag){
			long currentTime = System.currentTimeMillis();
			//超时
			if((currentTime- player.getStartTime())/1000>LevelParam.levels[player.getLevelNo()-1].getTimeLimit()){
				System.out.println("你输入的太慢了,已经超时了,退出!");
				System.exit(1);
			}else{  
				//没有超时
				//计算积分
				player.setCurScore(player.getCurScore()+LevelParam.levels[player.getLevelNo()-1].getPerScore());
				//计算已用时
				player.setElapsedTime((int)((currentTime- player.getStartTime())/1000));
				//输出
				System.out.println("输入正确,您的级别:"+player.getLevelNo()+",您的积分:"+player.getCurScore()+",您所用时:"+player.getElapsedTime()+"秒");	
				//是否通过最后一关
				if(player.getLevelNo()==6){
                    //计算他的分数
                    int score=LevelParam.levels[player.getLevelNo()-1].getPerScore()*LevelParam.levels[player.getLevelNo()-1].getStrTimes();
                    if (score==player.getCurScore()){
                        System.out.println("恭喜你闯关成功,你已经成为绝世高手了");
                        System.exit(0);

                    }
                }
			}		
		}else{
			System.out.println("输入错误,退出!");
			System.exit(1);
		}
		
	}
}

玩家类(Player)的方法

玩游戏play()

import java.util.Scanner;


public class Player {
	private int levelNo; // 级别号
	private int curScore; // 当前积分
	private long startTime = 0; // 各级别开始时间
	private int elapsedTime; // 各级别已用时间
	public Player(int levelNo, int curScore, long startTime, int elapsedTime) {
		super();
		this.levelNo = levelNo;
		this.curScore = curScore;
		this.startTime = startTime;
		this.elapsedTime = elapsedTime;
	}
	public Player() {
		super();
	}
	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 void play(){
		Scanner sc = new Scanner(System.in);
		Game game = new Game(this);
		for(int i =0;i<LevelParam.levels.length;i++){
			this.levelNo+=1;
			this.startTime=System.currentTimeMillis();
			this.curScore= 0;
			for (int j = 0; j < LevelParam.levels[levelNo-1].getStrTimes(); j++) {
                // 游戏字符串
                String outStr = game.printStr();
                // 用户输入
                String inStr = sc.next();
                // 游戏判断玩家输入是否正确,并输出相应结果信息
                game.printResult(outStr, inStr);
            }

		}
	}
}

最后建一个Test类进行游戏

public class Test {

	public static void main(String[] args) {
		System.out.println("开始游戏");
		Player player = new Player();
		player.play();

	}

}

这样就可以开始玩这个小游戏了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QuickHit小游戏代码实现 的相关文章

随机推荐

  • 数据库查询语句

    数据库查询语句无疑是所有语句中 最重要的语句 经常配合where一起使用 1 最基本的查询 公式1 select from 表名 查看aaa表中的所有数据 SELECT FROM aaa 你说 我不想查看表中所有的数据 我就想查看表中id字
  • Python进行大数据挖掘和分析

    大数据无处不在 在时下这个年代 不管你喜欢与否 在运营一个成功的商业的过程中都有可能会遇到它 什么是大数据 大数据就像它看起来那样 有大量的数据 单独而言 你能从单一的数据获取的洞见穷其有限 但是结合复杂数学模型以及强大计算能力的TB级数据
  • 中国大陆网站TOP100

    1 新浪新闻中心 包括即日的国内外不同类型的新闻与评论 人物专题 图库 BR www sina com cn 2 Baidu com 全球最大中文搜索引擎 向人们提供简单 可依赖的信息获取方式 BR www baidu com 3 搜狐 资
  • VMware Vsphere-下

    18 创建资源池和vAPPs 主机右击可以看到 新建资源池 资源池里可以指定资源池所消耗的物理的cpu和内存 份额 预留 限制 资源池里面可以放虚拟机 资源池的作用 可以将几台虚拟机放进一个池 限制资源 这样就不会出现一个虚拟机抢占过多资源
  • vue3知识点:Suspense组件

    文章目录 五 新的组件 3 Suspense 案例 完整代码 本人其他相关文章链接 五 新的组件 3 Suspense 等待异步组件时渲染一些额外内容 让应用有更好的用户体验 使用步骤 第1步 异步引入组件 import defineAsy
  • 记录移动开发初探——用uniApp+sqlite仿XyKey实现密码管理记事本

    写在前面 最近刚准备上手移动开发 本着想要多端可用的原则 了解到了uniApp 大致扫完一遍文档 基本可以算是vue 微信小程序原生 对我来说基本0难度可直接进入开发 因此想着索性做一款简单的app来做更加深入的了解 就在这时候 朋友给我推
  • 在vscode中做实验出现的bug......

    1 python如何调用opencv中的saliency模块 如果你已经安装了opencv python的库 但是调用cv2 saliency方法时出现了如下的报错 module cv2 saliency has no attribute
  • (数据库链接池)spring内容复习7月16日笔记

    2023 07 16数据库连接池 数据库连接池是个容器 负责分配 管理数据库连接对象 Connection 它允许应用程序重复使用一个现有的数据库链接 而不是在重新建立一个 而且释放空闲时间超过最大空闲时间的链接 来避免因为没有释放链接而引
  • unity 设置image透明度_Unity透明效果-透明度测试

    在之前的记录中已经知道了透明度测试的原理 本节主要就在Unity中通过透明度测试实现透明效果进行实践 原理回顾 透明度测试采用一种 非舍即留 的机制 即 若某片元的透明度不满足条件 通常小于某个阈值 则舍弃 否则就按照不透明物体去处理 也就
  • unity 多人同屏处理

    一 把fbx的Optimize GameObject勾选上 会优化你模块的面数 不过好像有可能会引起别的问题 优化后和代码上的mesh数据对不上造成bug 二 由于每个sinnedmesh会产生一个drawcall 所以多人同屏时就会卡 针
  • SED系列教程

    1 易百 Sed教程 http www yiibai com sed sed branches html
  • vi指令的基本使用

    一 vi的基本概念 基本上vi可以分为三种状态 分别是命令模式 command mode 插入模式 Insert mode 和底行模式 last line mode 各模式的功能区分如下 1 命令行模式command mode 控制屏幕光标
  • unexpected EOF while parsing是什么意思

    unexpected EOF while parsing 意思是在解析的过程中遇到了意外的文件结束符 这通常表示程序的代码有语法错误 导致程序无法正常运行 这个错误的具体原因可能有很多 比如 在字符串中使用了单引号或双引号 但没有正确地将它
  • Linux 搭建 JumpServer 堡垒机

    跳板机概述 跳板机就是一台服务器 开发或运维人员在维护过程中首先要统一登录到这台服务器 然后再登录到目标设备进行维护和操作 跳板机缺点 没有实现对运维人员操作行为的控制和审计 使用跳板机的过程中还是会出现误操作 违规操作导致的事故 一旦出现
  • python下载文件暂停恢复_新技能 get —— Python 断点续传下载文件

    原博文 2017 03 24 12 44 from urllib request import urlretrieve import sys import os prev reported download percent None 首先定
  • Java复习-25-单例设计模式

    单例设计模式 目的 使用场景 在实际开发下 会存在一种情况 某一种类在程序的整个生命周期中 只需要实例化一次就足够了 例如 系统数据类 由于操作系统只有一个 因此在程序初始化时该类只需要实例化一次 之后的系统数据更改都是在这一个实例化对象中
  • sha256是什么算法,sha256的安全性,sha256算法详解

    一些朋友对密码学方面的知识不是很了解 什么sha1 sha256 sha512等等 这么多算法类似的算法可能会有一点混淆 尤其是对sha256不是很理解 本文整合了一些关于sha256的相关资料 针对sha256是什么算法 它的安全性如何
  • SSM商城项目实战:订单管理

    SSM商城项目实战 订单管理 在SSM商城项目中 订单管理是一个非常重要的功能模块 本文将详细介绍订单管理的实现思路和步骤代码 实现SSM商城项目中订单管理功能的思路如下 设计数据库表结构 根据订单管理的需求 设计订单表和订单明细表的结构
  • 5种IO流

    在 Unix网络编程 一书中提到了五种IO模型 分别是 阻塞IO 非阻塞IO 多路复用IO 信号驱动IO以及异步IO 下面就分别来介绍一下这5种IO模型的异同 1 阻塞IO模型 最传统的一种IO模型 即在读写数据过程中会发生阻塞现象 当用户
  • QuickHit小游戏代码实现

    首先先明确下这个小游戏的需求 1 根据输入速率和正确率将玩家分为不同级别 2 级别越高 一次显示的字符数越多 玩家正确输入一次的得分也越高 3 规定时间内完成规定次数的输入 正确率达到规定要求 则升级 玩家最高级别为6级 初始级别一律为1级