跟王老师学Java三大特性(一):案例 QuickHit:需求分析

项目案例:QuickHit:需求分析

主讲教师:王少华   QQ群号:483773664

学习目标

学会用面向对象思想来进行需求分析

一、需求

  1. 根据输入速率和正确率将玩家分为不同级别
  2. 级别越高,一次显示的字符数越多,玩家正确输入一次的得分也越高
  3. 规定时间内完成规定次数的输入,正确率达到规定要求,则升级
  4. 玩家最高级别为6级、初始级别一律为1级
  5. 用户错误输入一次,游戏结束

二、面向对象分析

(一) 发现类

  1. 玩家(Player)类
  2. 游戏(Game)类
  3. 级别(Level)类

(二)发现类的属性

1、玩家类(Player)的属性

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

2、级别类(Level)的属性

  • 各级别号(levelNo)
  • 各级别一次输出字符串的长度(strLength)
  • 各级别输出字符串的次数(strTimes)
  • 各级别闯关的时间限制(timeLimit)
  • 各级别正确输入一次的得分(perScore)

3 、游戏类(Game)

没有属性,只有方法

(三)发现类行为

1、玩家类(Player)

玩游戏:play()

2 、游戏类

  • String printStr():输出字符串,返回字符串用于和玩家输入比较
  • void printResult(String out,String in):比较游戏输出Out和玩家输入in,根据比较结果输出相应信息

(四)优化设计

1 修改游戏类(Game),添加属性

玩家:player

2 添加类 LevelParam:用于存储级别常量

public final static Level level[6]

三、游戏Demo的演示

四、类的编写

(一) Player


1

2

3

4

5

6

7

8

9

10

11

12

13

public class Player {

    private int levelNo; // 级别号

    private int curScore; // 当前积分

    private long startTime = 0; // 各级别开始时间

    private int elapsedTime; // 各级别已用时间

    

    /**

     * 玩家玩游戏。

     */

    public void play() {

        

    }

}

(二) Level


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

public class Level {

    private int levelNo; // 级别号

    private int strLength; // 各级别一次输出字符串的长度

    private int strTime; // 各级别输出字符串的次数

    private int timeLimit; // 各级别闯关的时间限制

    private int perScore; // 各级别成功输入一次字符串后增加的分值

    /**

     * 构造方法

     */

    public Level(){}

    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;

    }

}

(三)Game


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

public class Game {

    private Player player;// 玩家

    /**

     * 构造方法

     */

    public Game(){}

    public Game(Player player) {

        this.player = player;

    }

    /**

     * 输出指定级别规定长度的字符串。

     * @return 输出的字符串,用于和用户输入比较

     */

    public String printStr() {

        return "";

    }

    /**

     * 判断玩家输入是否正确,并输出相应结果信息。

     * @param out 游戏输出的字符串

     * @param in 玩家输入的字符串

     */

    public void printResult(String out, String in) {

        

    }

}

(四)LevelParam


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

/**

 *

 * @author wangsh

 * @createDate:2016年4月18日

 * 功能描述: 级别参数类,配置各个级别参数。

 */

public class LevelParam {

    public final static Level levels[]=new Level[6];//对应六个级别

   

}

五、初始化各级别的参数

(一)、难点提示

1 使用static修饰属性和代码块

  • static属性

属于这个类所有

通过“对象名.static属性名” 、“类名.static属性名” 访问

  • static方法

通过“类名.static方法名”和“对象名.static方法名” 访问

  • static代码块

主要作用是实现static属性的初始化

当类被载入的时候执行它,且只被执行一次

(二)、参考代码

跟王老师学Java三大特性(一):案例 QuickHit:需求分析

时间: 2024-12-25 16:12:53

跟王老师学Java三大特性(一):案例 QuickHit:需求分析的相关文章

跟王老师学Java三大特性(三):案例 QuickHit:确认输入并输出结果

案例 QuickHit:确认输入并输出结果 主讲教师:王少华   QQ群号:483773664 学习目标 完成Game类中的printResult方法的编写 一.需求说明 确认用户输入并输出结果 二.思路分析 确认玩家输入是否正确 如果输入不正确,则直接输出错误信息并退出程序 如果输入正确 如果超时,则直接输出错误信息并退出程序 如果不超时 计算玩家当前积分 计算 玩家已用的时间 输出当前玩家的级别.当前积分.已用时间: 判断用户是已经闯过最后一关并处理 三.参考代码 1 2 3 4 5 6 7

跟王老师学Java三大特性(二):案例 QuickHit:游戏输出字符串

案例 QuickHit:游戏输出字符串 主讲教师:王少华   QQ群号:483773664 学习目标 完成游戏输出字符串 一.需求说明 在控制台输出随机字符串 二.思路分析 生成字符串 输出字符串 返回字符串 三.难点提示 Game类中的player属性,代表玩家,查询player的级别号,根据级别号到LevelParam类中获取该级别的字符串长度 字符串长度固定可以通过for循环来实现,而随机内容可以通过获取随机数,而不同随机数对应不同字符来实现 四.参考代码 1 2 3 4 5 6 7 8

跟王老师学Java三大特性(四):案例 QuickHit:玩家玩游戏

案例 QuickHit:玩家玩游戏 主讲教师:王少华   QQ群号:483773664 学习目标 完成Player类中的play方法 一.需求说明 玩家玩游戏 二.思路分析 创建Game对象并传入player属性: 外层循环(循环次数是6,每循环一次玩家级别升一级) 晋级: 积分清零.计时清零: 内层循环(循环次数是该级别的strTime,每循环一次完成一次人机交互) 游戏输出字符串: 玩家输入字符串: 游戏判断玩家输入并输出相应结果. 三.参考代码 1 2 3 4 5 6 7 8 9 10 1

跟王老师学反射(二):Java类的加载、连接和初始化

跟王老师学反射(二):Java类的加载.连接和初始化 主讲教师:王少华   QQ群号:483773664 学习内容: 了解类的加载.连接和初始化 一.类的生命周期 当我们编写一个java的源文件后,经过编译会生成一个后缀名为class的文件,这种文件叫做字节码文件,只有这种字节码文件才能够在java虚拟机中运行,java类的生命周期就是指一个class文件从加载到卸载的全过程.一个java类的完整的生命周期会经历加载.连接.初始化.使用.和卸载五个阶段,当然也有在加载或者连接之后没有被初始化就直

跟王老师学集合(十一)java中Comparator的用法

Java中Comparator的用法 主讲人:王少华  QQ群号:483773664 在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标. 接下来我们模拟下在集合对象中对日期属性进行排序 一.实体类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package chapter07_11; public class Person {     private int a

跟王老师学反射(十一):动态代理

跟王老师学反射(十一):动态代理 主讲教师:王少华   QQ群号:483773664 学习内容 学会使用动态代理 一.动态代理 动态代理(Dynamic Proxy):相比上一节所实现的静态代理,动态代理具有更强的灵活性,因为它不用在我们设计实现的时候就指定某一个代理类来代理哪一个被代理对象,我们可以把这种指定延迟到程序运行时由JVM来实现. 动态代理(Dynamic proxies)是 Java 1.3 引入的特性,在Java的java.lang.reflect包下提供了一个Proxy类和一个

跟王老师学反射(一):反射概述

跟王老师学反射(一) java反射概述 主讲教师:王少华   QQ群号:483773664 学习目标: 理解Java反射机制 一.什么是Java反射 现实生活,我们会看到这样的现象,在很多影视城,会看到很多山寨版的古代的建筑,比如故宫,但是由于年代久远,故宫的建筑图纸,丢失了(我们假设故宫的图纸丢失了),这样我们就必须依据现在的故宫实体建筑,画出它的图纸,然后依据现画好来的图纸,来建造山寨版的故宫.这样一个由实物得到图纸的过程,我们也可以称之为"反射过程" Reflection(反射)

跟王老师学反射(三):Class类:获得Class对象

跟王老师学反射(三):Class类:获得Class对象 主讲教师:王少华   QQ群号:483773664 学习内容 掌握获得Class对象的三种方式 理解这三种方式的区别 一.获得Class对象 前面我们已经领略了反射的魅力了,我们知道,利用反射的关键是要获得"图纸"Class对象,那么怎么获得这个Class对象呢!!! 每个类被加载之后,系统会为该类生成一个对应的Class对象,通过该Class对象就可以访问JVM中的这个类.Java程序获得Class对象有如下三种方式: (一)调

跟王老师学反射(四):Class类:从Class类中获取信息

跟王老师学反射(四)Class类:从Class类中获取信息 主讲教师:王少华   QQ群号:483773664 学习内容 获得class类中的信息 根据我们以前学过的一个Java类有以下几部组成,如下代码所示 一.访问Class对应的类所包含的构造方法 (一)public Constructor<T> getConstructor(Class<?>... parameterTypes) 返回此Class对象所表示的类的指定public构造方法. parameterTypes参数是按