温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java怎么实现QuickHit游戏

发布时间:2022-12-02 17:22:50 来源:亿速云 阅读:143 作者:iii 栏目:编程语言

这篇“Java怎么实现QuickHit游戏”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java怎么实现QuickHit游戏”文章吧。

项目需求

    (1)QuickHit游戏考验学员键盘输入内容的速度和准确性。
    (2)根据输入速率和正确性将玩家分为不同级别,级别越高,一次显示的字符数越多,玩家正确输入一次的得分也越高。
    (3)如果玩家在规定的时间内完成规定次数的输入,正确率达到规定要求,则玩家升级(为了简单起见,规定用户只要输入错误一次,则游戏结束)
    (4)玩家最高级别为6级,初始级别一律为一级。

项目环境准备

    完成“QuickHit”,对于开发环境的要求如下:
    (1)开发工具:MyEclipse 10
    (2)JDK1.7

案例覆盖的技能点

    (1)面向对象程序设计的思想
    (2)使用类图理解类的关系
    (3)类的封装
    (4)构造方法的使用
    (5)this和static关键字的使用

项目实现思路

1、先编写级别类Level:
    (1)定义属性:
        private int levelNo; // 级别号
        private int strLength; // 各级别一次输出字符串的长度
        private int strTimes; // 各级别输出字符串的次数
        private int timeLimit; // 各级别闯关的时间限制
        private int perScore; // 各级别成功输入一次字符串后增加的分值
    (2)添加包含所有参数的有参构造方法(无参构造方法后面不需要使用,可以不添加)
    
    (3)针对封装好的属性,添加getXxx()方法,不需要添加setXxx()方法(针对级别的属性是系统规定好的,不需要用户设置)
    
2、编写级别参数类LevelParam:
    (1)此项目会涉及到6个级别(每个级别是一个对象),所以先创建一个长度为6,类型为Level的数组,这个数组可以声明为静态常量值
    (2)使用有参构造方法创建6个Level类对象,并将这6个对象存储到第一步创建的数组中,可以将这个操作生命在静态代码块中
    
3、创建Play玩家类:
    (1)定义属性:    
        private int levelNo; // 级别号
        private int curScore; // 当前积分
        private long startTime = 0; // 各级别开始时间
        private int elapsedTime; // 各级别已用时间
    (2)添加无参构造方法、有参构造方法、getXxx()/setXxx()方法
    
    (3)定义玩家玩游戏的方法play():
        功能:用户由默认0级升级到1级,开始玩游戏(调用Game类里的printStr()方法和printResult())

4、创建游戏类Game:
    (1)定义属性:    
        private Player player;// 玩家
    (2)添加无参构造方法、有参构造方法
    
    (3)定义方法printStr()
            功能:根据用户级别输出指定长度的字符串(字符串的内容是随机产生的)
    (4)定义方法printResult()
            功能:判断用户输入的字符串与系统随机产生的字符串内容是否相同
                1)如果用户输入的字符串与系统产生的字符串相同:
                    --》用户输入字符串的时间>对应级别需要的时间:超时,退出游戏系统
                    --》用户输入字符串的时间<对应级别需要的时间:
                        计算用户完游戏的时间
                        用户玩游戏积累的积分
                        输出当前用户所处的级别,玩游戏时间、积累的积分
                        计算该游戏最后一个级别的总分并判断用户是否到达第六级别以及积累的积分是否等于最高级别的积分,如果满足,输出闯关成功
                2)如果用户输入的字符串与系统产生的字符串相同:
                    直接退出游戏系统
                    
5、定义测试类:
    在main()方法中创建Play类对象,调用play()方法,开始游戏
    

代码展示

1、初始属性:Level类(全部代码)

package cn.bdqn.demo09;

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;
  }
  
  //添加get方法
  public int getLevelNo() {
    return levelNo;
  }

  public int getStrLength() {
    return strLength;
  }

  public int getStrTimes() {
    return strTimes;
  }

  public int getTimeLimit() {
    return timeLimit;
  }

  public int getPerScore() {
    return perScore;
  }
  
}

2、初始类Level对象:LevelParam类(全部代码)

package cn.bdqn.demo09;

public class LevelParam {

  // 定义静态常量:Level数组
  public static final Level[] levels = new Level[6];

  // 用静态代码块初始化Level对象
  static {
    levels[0] = new Level(1, 2, 10, 30, 1);
    levels[1] = new Level(2, 3, 9, 27, 2);
    levels[2] = new Level(3, 4, 8, 24, 3);
    levels[3] = new Level(4, 5, 7, 21, 4);
    levels[4] = new Level(5, 6, 6, 16, 5);
    levels[5] = new Level(6, 7, 5, 12, 6);
  }
}

3、系统类:Game(全部代码)

package cn.bdqn.demo09;

import java.util.Random;
import java.util.Scanner;

public class Game {

  Scanner sc=new Scanner(System.in);
  // 定义属性
  private Player player;
  String str="";

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

  // 定义系统输入printStr方法
  public String printStr() {
    StringBuffer buffer = new StringBuffer();
    int strLength = LevelParam.levels[player.getLevelNo()-1].getStrLength();
    Random random = new Random();
//    System.out.println(strLength);
    // 通过循环生成要输出的字符串
    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;
      default:
        break;
      }
    }
      str=buffer.toString();
      System.out.println(str);
    return str;
  }

  // 定义printResult()方法
  public void printResult(String out,String in) {
    if(out.equals(in)){
      int currentTime=(int)System.currentTimeMillis()/1000;
      player.setElapsedTime(currentTime);
      //用户输入字符串的时间<对应级别需要的时间:
      if(player.getElapsedTime()-player.getStartTime()
          < LevelParam.levels[player.getLevelNo()-1].getTimeLimit()){
        //计算当前积分
        player.setCurScore(player.getCurScore()+ LevelParam.levels[player.getLevelNo()-1].getPerScore());
        //计算已用时间
        player.setElapsedTime(currentTime-(int)player.getStartTime());
        //输出当前积分、当前级别、已用时间
        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(player.getCurScore()==score){
            System.out.println("您已闯关成功,成为绝世高手,恭喜你!!!");
            System.exit(0);
          }
        }
      }else{
        System.out.println("你输入太慢了,已经超时,退出!");
        System.exit(1);
      }
    }else{
      System.out.println("输入错误,退出!");
      System.exit(1);
    }
  }
}

4、玩家类:Player类(全部代码)

package cn.bdqn.demo09;

import java.util.Scanner;

public class Player {
  //定义属性
  private int levelNo; // 级别号
  private int curScore; // 当前积分
  private long startTime = 0; // 各级别开始时间
  private int elapsedTime; // 各级别已用时间
  
  //添加get/set方法
  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(){
    Game game=new Game(this);
    Scanner sc=new Scanner(System.in);
    for (int i = 0; i < LevelParam.levels.length; i++) {
      //1、晋级
      levelNo+=1;
      //2、晋级后计时清零,积分清零
      startTime=(int)System.currentTimeMillis()/1000;
      curScore=0;
      //3、内层循环一次,完成一次字符串输出、输入、比较
      for (int j = 0; j < LevelParam.levels[levelNo-1].getStrTimes(); j++) {
        //系统输出
        String outStr=game.printStr();
        //用户输入
        String inStr=sc.next();
        //判断用户输入是否正确,并显示相应信息
        game.printResult(outStr, inStr);
      }
    }
    sc.close();
  }
}

 5、测试类:GameTest类(全部代码)

package cn.bdqn.demo09;

public class GameTest {

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

  }

}

以上就是关于“Java怎么实现QuickHit游戏”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI