第五章项目:QuickHit

需求概述:

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

案例覆盖的技能点:

面向对象设计的思想

使用类图理解类的关系

类的封装

构造方法的使用

this和static关键字的使用

需要用到的类:

玩家(Player)类:当前级别号(levelNo),当前级别积分(currScore),当前级别开始时间(startTime),当前级别已用时间(elapsedTime)

级别(Level)类:级别编号(LevelNo),各级别一次输出的字符串长度(strLength),输出次数(strTime),闯关限制时间(timeLimit),正确输入得分(perScore)

LevelParam类:定义一个长度为6的Level数组,用来存放各级别的具体参数信息

游戏(Game)类:Player对象的属性,两个方法,printStr(用来随机输出字符串),printResult(用来比较输出参数和输入参数和计算)

Player类

package quickhit;

import java.util.Scanner;

public class Player {
    //属性
    public int levelNo;
    public int curScore;
    public long startTime;
    public int elapsedTime;

    //有参构造
    public Player(int levelNo, int curScore, long startTime, int elapsedTime) {
        this.levelNo = levelNo;
        this.curScore = curScore;
        this.startTime = startTime;
        this.elapsedTime = elapsedTime;
    }

    //无参构造
    public Player() {

    }

    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的带参.this代表Player属性
        Game game=new Game(this);
        Scanner input=new Scanner(System.in);

        for (int i = 0; i <LevelParam.level.length; i++) {
            //晋级
            this.levelNo+=1;
            //晋级后计时清零
            this.startTime=System.currentTimeMillis();
            this.curScore=0;
            //满级通关
            if(levelNo==6){
                System.out.println("通关..........");
                break;
            }
            //内层循环,输出输入比较
            for (int j = 0; j < LevelParam.level[levelNo-1].getStrTimes(); j++) {
                //输出字符串
                String outStr=game.printStr();
                //接收用户输入字符串
                String inStr=input.next();
                //调用game的printResult方法,对比
                game.printResult(outStr, inStr);
            }           

        }
    }

}

Level类

package quickhit;

public class Level {

    public int levelNo;
    public int strLength;
    public int strTimes;
    public int timeLimit;
    public int perScore;
    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;
    }

        //无参
    public Level(){

    }

        //带参
    public Level(int levelNo, int strLength, int strTimes, int timeLimit,
            int perScore) {
        this.levelNo = levelNo;
        this.strLength = strLength;
        this.strTimes = strTimes;
        this.timeLimit = timeLimit;
        this.perScore = perScore;
    }

}

LevelParam类

package quickhit;

public class LevelParam {

    public final static Level level[]=new Level[6];

    static{
        level[0]=new Level(1,2,10,30,1);
        level[1]=new Level(2,3,9,26,2);
        level[2]=new Level(3,4,8,22,5);
        level[3]=new Level(4,5,7,18,8);
        level[4]=new Level(5,6,6,15,10);
        level[5]=new Level(6,7,2,12,15);
    }
}

Game类

package quickhit;

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(){

    }

    public String printStr(){
        //定义一个int类型的对应各级编号应输出字符串的长度
        int strLength=LevelParam.level[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;
            }
        }
        //输出
        String str=buffer.toString();
        System.out.println(str);
        return str;
    }

    public void printResult(String out,String in){

        long currentTime=System.currentTimeMillis();
        //判断是否一致
        if(out.equals(in)){
        //判断是否超时
        if((currentTime-player.getStartTime())/1000>LevelParam.level[player.getLevelNo()-1].getTimeLimit()){
            System.out.println("太慢了吧!~");
            System.exit(1);
        }else{

        //计算当前积分
        player.setCurScore(player.getCurScore()+LevelParam.level[player.getLevelNo()-1].getPerScore());
        //计算时间
        player.setElapsedTime((int)(currentTime-player.getStartTime())/1000);
        //输出级别,积分和时间
        System.out.println("输入正确,您的级别"+player.getLevelNo()+"积分"+player.curScore+"已用时间"+player.getElapsedTime());
        }
        }else{
            System.out.println("输入错误........");
            System.exit(1);
        }
    }
}

测试类

package quickhit;

public class Test {

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

}

游戏效果

时间: 05-29

第五章项目:QuickHit的相关文章

第五章项目:体检套餐

窗体搭建的效果图如下: 一:实现的功能主要有以下几个方面: ①:显示指定套餐的项目明细 ②:向指定套餐添加检查项目信息 ③:删除套餐中的项目信息 ④:新建套餐 二:创建体检项目维护系统中的检查项目类(HealthCheckItem).体检套餐类(HealthCheckSet) HealthCheckItem类中的属性说明如下: Description:项目描述 Name:项目名称 Price:项目价格 HealthCheckSet类中的属性说明如下: Items:HealthCheckItem的

第五章项目 体检套餐管理系统

1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 namespace 体检

第五章项目----租房网

--阶段1:知道————分页显示查询出租房屋信息--需求说明:查询出第4-6条出租房屋信息 select top 3*from hos_house where HMID not in (select top 1 HMID from hos_house) select *from hos_housewhere HMID>1 and HMID<5 --阶段2:练习————查询指定客户发布的出租房屋信息--需求说明:查询张三发布所有出租房屋信息,并显示房屋分布的街道和区县 use Housegose

05章项目: QuickHit快速击键

一.项目分析 根据输入速率和正确率将玩家分为不同等级,级别越高,一次显示的字符数越多,玩家正确输入一次的得分也越高.如果玩家在规定时间内完成规定次数的输入,正确率达到规定要求,则玩家升级.玩家最高级别为6级,初始级别一律为一级! 二.掌握的技能点 ①面向对象设计的思想 ②使用类图理解类的关系 ③类的封装 ④构造方法的使用 ⑤this和static关键字的使用 类的属性: ①玩家(Player)类的属性:当前级别号levelNo.当前级别积分currScore.当前级别开始时间startTime和

第五章 套餐管理系统

第五章项目:体检套餐 窗体搭建的效果图如下: 一:实现的功能主要有以下几个方面: ①:显示指定套餐的项目明细 ②:向指定套餐添加检查项目信息 ③:删除套餐中的项目信息 ④:新建套餐 二:创建体检项目维护系统中的检查项目类(HealthCheckItem).体检套餐类(HealthCheckSet) HealthCheckItem类中的属性说明如下: Description:项目描述 Name:项目名称 Price:项目价格 HealthCheckSet类中的属性说明如下: Items:Healt

【.NET Core项目实战-统一认证平台】第十五章 网关篇-使用二级缓存提升性能

原文:[.NET Core项目实战-统一认证平台]第十五章 网关篇-使用二级缓存提升性能 [.NET Core项目实战-统一认证平台]开篇及目录索引 一.背景 首先说声抱歉,可能是因为假期综合症(其实就是因为懒哈)的原因,已经很长时间没更新博客了,现在也调整的差不多了,准备还是以每周1-2篇的进度来更新博客,并完成本项目所有功能. 言归正传,本重构项目是在我根据实际需求重构,由于还未完全写完,所以也没进行压测,在2月份时,张善友老师给我留言说经过压测发现我重构的Ocelot网关功能性能较差,其中

《大道至简》第五章读后感

失败的过程也是过程,我觉得这句话很有深意,阅读完大道至简第五章,我又有了很深的感触. 首先是“做过程不是做工程”,过程是为了实现某种目的而经历的一些事情,过程有很多种,虽然经历了某种过程,但不一定能实现某种功能.做完过程的每一个阶段,并不等于做工程.做过程不是做工程的精义,也不是最终目的. 然后是“做过场”,做过场就好像是一种形式一样,做了没必要做的事情,就是浪费时间. 做工程的最终目的是实现客户的要求,工程只是一种实现的途径.最初做开发的前辈们,不用什么工程或者过程,也一样编出了程序,也一样解

大道至简第五章读后感

第五章 失败的过程也是过程 今天照样老师带领着我们阅读了大道至简第五章,阅读了<大道至简>的第五章,这章在前面的基础上又进了一步,有了技术和团队,加上有效的沟通,接下来就要接项目做工程. “虚有其表耳”,本章以<明皇实录>中的一句话来告诉我们一个深刻的道理:不要只求外表,只做形象工程,而是要透过表象,力求实质. 失败了不要紧,没有失败也就找不到自己的不足,也就不会发现自己的问题,更不用谈改进了.我们的前辈们就是在不断的失败中才总结出了“瀑布模型”“螺旋模型”等模型,方便了我们.但是

第五章读后感

失败的过程也是过程 在软件工程专业,我们学习的软件知识,我们应该学会运用这些知识,就像我们学习了大道至简的第五章:失败的过程也是过程.从中我就了解到了软件的很多的知识. 在软件工程专业,我们不管在做什么,我们都不应该做成“做过场”(“过场”是舞台术语,意思是角色从舞台一端出场,再走到另一端进场的一个过程.过场角色一般没有唱腔或道白,即便是有,也是没有什么实质内容的)在有些的时候,我们软件专业在做工程的时候都需要建立一定的基础模型,如果我们在建立模型时做一个过场,那么我们将会在客户.项目经理,分析