项目案例: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属性的初始化

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

(二)、参考代码