項目技術規格說明書


團隊項目技術規格說明書v1.0

以下技術規格說明書的撰寫是按照《構建之法》的“技術說明書”的相關內容,主要思路是用功能驅動設計

一.從功能流程中提取所需的對象:

在這個WBS圖的基礎上,對首先要實現的基本功能進行了如下設計分析:

外包軟件開發功能描述:

外包開發的功能流程和細節如上圖所示,從流程的分析中,我們其實可以從中提取出這么幾個對象:

  1. 外包任務類,描述一個外包任務的類,其中包含了任務目標,任務報酬等等屬性。
  2. 外包任務產生類,就是需求的提出方,是用來產生外包任務的
  3. 公司類,就是你所要經營的這個公司,接受外包任務並完成
  4. 職員類,外包任務的完成需要每一位員工的工作
  5. Date類,我們需要一個類來記錄時間
  6. 會計類,我們需要一個類來管理收入支出,並做好相應的記錄

當然這里僅僅簡單的描述提取出的類,具體的屬性和方法的定義后面再說。

職員雇佣和解雇功能描述:

職員雇佣和解雇的簡單的功能流程如上所示,我們可以從中提取出的模型有:

  1. 人才市場類,即管理可雇佣人員的類
  2. 公司的人才管理類,我們可能需要讓一個公司設置一個人事部來管理所有的職員

UI模塊:

這里UI的設計需要和cocos creator的特性結合起來,cocos creator本身在屬性選擇器中提供了很多屬性的確定,而且也提供了很多api來動態的確定屬性,這里UI模塊的分析我決定采用一個原型圖一個原型圖來分析。

1. 開始界面原型圖

如圖所示,這是游戲開始界面,這里不再贅述

2. 游戲界面

左上角是當前日期,右上角是當前資金,中間是場景,下面是菜單欄,分別為開發,人事,系統設置,注意到有個待解鎖功能是用戶一開始僅能實現接外包和人員的雇佣和解雇,更多的功能是當用戶的資金和人員達到某個目標時再解鎖,關於下一階段的游戲核心功能目前還在討論中,所以這里先這樣決定。

最下面是狀態欄,用於顯示開發進度等信息。

3. 接受任務界面

在這里你可以看到所有任務的描述

4. 雇佣界面

你可以看到每個職員的信息,並決定是否雇佣,解雇與此類似

5. 設置界面

以上只是簡單的UI原型設計,實際開發時,這些界面的用戶體驗才是最重要的。

二.具體功能的設計

經過我們開發組的討論和整個組的審核,我們目前制定了如下的游戲內部功能api設計:


1. ProjectGenerator

properties:

1. Project projects_[N]

保存了上次產生的 N 個任務的信息,一開始是 null,一旦調用一次 createProject 后更新,所以 ProjectGenerator 不僅可以產生任務還會負責監管任務,就好比自己有一個外包項目需要交給外包公司來做,那么自己需要監視外包公司是否及時完成

functions:

1. void createProject()

根據難度評價邏輯產生可選的任務並保存到projects_數組中

2. void failProject(Project project)

設置這個project對應的項目的state已接受但未完成;

設置這個project對應項目的完成時間;

降低對這個公司的能力的評價;

3. void finishProject(Project project)

根據這個 project 返回這個任務的報酬,並調用公司的profit

同時設置這個 project 對應的標志位為被接受且已完成;

設置這個project對應項目的完成時間

同時會增加這個這個 project 對應公司的評價;


2. Project

properties:

1. 需要達到的三個標准(object require_):

UI的優劣程度(number require_.ui),
功能的優劣程度(number require_.func),
BUG的數量(number require_.bugnum).

2. 目前達到的三個標准(object current_):

目前UI的優劣程度(number current_.ui),
目前功能的優劣程度(number current_.func),
目前BUG的數量(number current_.bugnum).

3. 狀態位(eState state_)

一個項目目前自己有這么幾種狀態:

  1. 已產生但未被接受 對應0
  2. 被接受且尚未完成 對應1
  3. 被接受已經被完成 對應2
  4. 被接受卻失敗 對應3

相應的枚舉變量eState已經定義在了相應的文件中

4. 種類(string category_)

供以后擴展,現在可以先不考慮具體邏輯

5. 種類(string category_)

屬於哪一類
(可能有的種類之后會擴展)

6. 報酬(number reward_)

這個項目的酬金

7. deadline(number deadline_)

這個項目最長幾天需要完成

8. 所屬公司(Company company_)

這個項目被交給哪個公司完成

9. 接受時間(number receiveDay_)

現在規定時間按天為單位,所以這里需要記錄下來接受時在第幾天

10. 完成時間(number finishDay_)

記錄下完成時在第幾天,可以提供給評價公司成績時使用,或者記錄時使用

Functions:

1. void augment(string attribute, number increment)

@require:attribute 屬於{"ui","func","bugnum"}之一,表示要增加的屬性的類型;increment >=0 表示增加的數值;

attribute對應的屬性增加相應的數值

2. boolean isFinished()

根據當前的三個屬性的值和目標值判斷是否已經完成

3. boolean isOverdue()

根據當前時間和項目被接受時間判斷是否已經逾期

4. 這里省去各種各樣的set方法和get方法

3. Company

properties:

1. Account account_

自己的會計部門,負責資金的管理和記錄

2. PersonControl personControl_

自己的人事部門,負責人員的雇佣,解雇,培養,工作

3. Project project_

考慮到如果你在做一個項目,那么就不能做另一個項目,所以這里我把這個屬性設置為一個

多個項目以后有時間好好規划后再拓展

functions:

1. receiveProject(Project project)

@require:project!=null && project.repOK()(這個project合法)

在用戶選中了一個任務,並點擊了確定按鈕后,會觸發這個方法;

設置project的開始時間,改變其狀態為已接受但未完成

設置project_project

調用 personControl_work 方法開始工作;

3. boolean profit(number num, string cause)

調用account_的profit方法

4. boolean expend(number num, string cause)

調用account_的expend方法

5. boolean hire(Person person)

調用 personControl_hire,如果返回 false ,那么雇佣失敗,返回 false

如果雇佣成功,那么返回true

6. boolean fire(Person person)

調用 personControlfire,這里可以增加相應的提示信息,

7. showPersons()

調用personControl_showPersons方法返回當前所有職員信息


4. Account

會計類負責賬單的記錄和資金管理

properties:

1. gold_

表示當前的資金

2. records_

表示資金流動記錄(待考慮)

functions:

1. void profit(number num, string cause)

gold_+=num;

同時記錄下cause

2. boolean expend(number num,string cause )

計算gold_-num

  1. 如果結果小於0,那么結合可能的UI提示信息,並return false
  2. 如果結果大於等於0,那么記錄下相應的cause,並return true
3. boolean isEnough(number num)

判斷當前資金gold_是否夠num的支出

3. update(dt)

隨時更新相應的label為當前的金錢


5. PersonControl

管理職員的類

propertites:

1. 職員數組 persons_[]

當前員工的數組

2. 當前員工數量 currentNum_

當前有多少員工

3. 當前最大員工數量 maxNum_

當前最多可以有多少員工

5. boolean flag_

是否在工作狀態,默認值為false,表示不在工作狀態

(這個狀態主要用於update時的判斷)

6. 要做的 Project project_

functions:

1. boolean hire(Person person)

@require:自己的列表中沒這個person且這個person合法

判斷是不是人員已滿:

  1. 如果當前已滿,那么可以提示一些信息,並返回false
  2. 如果沒滿,那么增加這個員工並返回true
2. fire(Person person)

@require: 自己的列表中有這個員工且在這個person合法

從數組中去掉這個員工,返回true

3. void work(Project project)

表示要開始做這個項目

更新自己要做的project_

調用每個員工的work;

設置自己的flag為true;

4. stop()

設置自己的flag為false;

調用每個人的stop;

5. void commit()

遍歷所有員工,調用每個人的commit方法;

然后判斷當前project_是否已經完成:

  1. 如果當前項目已經完成了,那么先調用自己的stop方法,並直接調用projectGeneratorfinishProject方法(因為projectGenerator的全局性,這里不需要通過Company來傳遞了);
  2. 如果當前項目並未完成,那么判斷:
    1. 如果當前項目已經逾期,那么我們先調用自己的stop方法,並調用projectGeneratorfailProject方法(我們的公司是個誠實的公司...原來是想着讓projectGenerator來判斷,但是那樣projectGenerator需要一直檢查,不如在這里讓公司自己判斷項目是不是逾期,逾期自動觸發相應邏輯)
    2. 如果還沒有逾期,那么什么都不做
6. showPersons()

返回所有person的信息,這里可以自己選擇合適的形式

6. update()

每隔一段時間(待確定多長),判斷如下邏輯;

  1. 如果當前狀態flag為false,表示不工作,什么也不做(或許這里可以用於加上動畫的控制)
  2. 如果當前狀態flag為true,那么調用自己的commit方法;

6. Person

properties:

1. 描述一個人能力的6個屬性(object ability_):

都是整數:

編程能力 ability_.coding

管理能力 ability_.management

架構能力 ability_.structure

測試能力 ability_.test

藝術能力 ability_.art

創新能力 ability_.creativity

2. 薪資 salary_

一個人每個月需要的工資

3. 狀態 state_

這個人目前的狀態,可能有:①閑着②工作③放假

狀態與這個人物表現出的動作有關

4. 所屬公司 company_

引用,這個人所屬的公司

5. 正在做的任務 project_

Functions:

1. getCommit()

根據這個人的能力值,獲得他在一段時間(這里還有待商榷,需要確定職員對項目每隔多長時間貢獻一次)內可以對項目的屬性貢獻多少(這里的算法涉及到人員的能力->對項目屬性的貢獻 這個轉化算法)

而且要根據project當前已經達到的點數來確定自己的貢獻值,對於已經達到目標的屬性不需要增加了

2. commit()

先通過this.getCommit() 獲得自己可以做的貢獻點數

然后通過project.augment()方法增加對應的點數

3. work(Project project)

表示要開始工作了;

設置當前 project_;

設置自己的工作狀態為工作狀態;

4. stop()

設置自己的狀態為閑着


7. Date

存儲當前的日期

properties:

1. number time_

以天為單位的日期,初始為0,每隔speedPerday增加1

2. number speedPerday_

每隔多少幀增加一天,在設置游戲速度可能會用到,會設置正常和較快兩個檔位

3. number count_

距離上次日期更新后過了多少幀

functions:

1. void updateDate()

time_+=1

當遇到每個月第一天就發出員工工資支付事件

2. number getDate()

return time_

(經過測試,update的執行順序是按照場景中的結點從上到下,從父到子依次執行的,所以我這里把Date組件放在最前面)

3. update()

根據count_speedPerday_來更新時間

4. string getDate()

return 以某種格式的日期,供UI使用


8. PersonGenerator

人才市場吧算是

properties:

1. Person persons_[]

可供選擇的人員數組

functions:

1. showPersons()

返回每個person的信息,供UI顯示

2. removePerson(Person person)

在用戶點擊雇佣按鈕后,會觸發這個函數

調用Company的hire方法,

  1. 如果返回true,那么就在自己的列表中去掉這個person
  2. false可能有信息的提示,具體再定
3. addPerson(Person person)

在用戶點擊解雇按鈕后觸發這個函數

調用Company的fire方法,

  1. 如果返回true。那么就把這個person加入到自己的列表中

目前api文檔還在更新和補充中...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM