C++轮子队-第三周(需求改进原型设计)
需求改進&原型設計
一.需求完善
(一)系統功能(補充)
圖形界面(圖片如下圖所示:)
根據需求與組內討論結果,現歸納圖形界面方面需要的設計與相應功能:
數據-圖形界面中間類:
方塊數字 num,若為0則表示為空方塊,在具體的圖形界面中不顯示
方塊數字查看方法 getBlockNum()
方塊數字設置方法 setBlockNum()
該方塊在棋盤數組中的下標 location,初步定為存儲行號、列號的結構體
該方塊相對于程序窗口的位置 position ,可能用QPointF實現
方塊類聲明
二維數組 board[ ][ ] ,以存儲哪些方塊為空方塊、數字方塊、下落方塊,在具體的代碼實現中可能以一級指針的形式聲明于類中。
獲取二維數組信息的方法 getBoard()
填入二維數組信息的方法 setBoard()
游戲結束條件判斷 bool end_judge(number_block* moving_block)
方向鍵控制方法,參數為按鍵對應的ascii和指向正在下落塊的指針 void control(const unsigned char control_flag, number_block* moving_block)
隨時間自動下落 void time_drop(number_block* moving_block)
移動:
- 左移 moveLeft()
- 右移 moveRight()
- 下移 moveDown()
“下一個方塊”的數據獲取 GetNextBlock()
二維數組棋盤的圖形映射方法 BoardDisplay()
游戲計時 time
積分記錄 score
積分上傳方法 scoreUpload() ,將玩家ID與分數一起上傳至服務器
獲取積分方法 unsigned int return_mark()
界面主窗口與排名界面
窗口分割控件:初定為QSplitter
文字顯示: QLabel
按鈕控件:QPushButton或QGraphicsItem
游戲界面:
需重寫的函數:
- 按鍵按一次 keyRelease()
- 按鍵長按 keyPress()
- 圖形繪制 paint()
需要的控件:
- 按鈕控件:QPushButton或QGraphicsItem
- 方塊控件:初定為QPixmap或QTransfrom,加載數值方塊對應的png,像素尺寸初定為20*20,并根據棋盤類Board的數據定時進行位置更新
- 退出游戲時的對話框控件:QMessageBox
分數統計
障礙塊
難度調整
在線排名
(二)四象限分析法
作用:幫助你清晰定位軟件的功能特點和將來要進行研發的創新點,如圖所示:
說明:
殺手功能:針對某一應用需求我們的競爭對手和用戶已經決定了的必要滿足的需求,我們的創新功能也在這一部分。
外圍功能:輔助性的功能,比如良好的用戶體驗界面等。
必要需求:能夠準確解決用戶主要功能的需求,比如游戲中的控制計分等功能。
輔助需求:非必要需求,比如更改界面風格,增加背景音樂等功能。
解決方法:
維持----以最低成本維持此功能
抵消----快速地達到“足夠好”、“和競爭對手差不多”
優化----花大力氣做到并保持行業最好
差異化----產生同類產品比不了的功能或優勢
不做----砍掉一個功能,有時我們不需要做所有的功能
(三)進度計劃(WBS,Work Breakdown Structure)
二.原型改進
三.系統設計
(一)架構設計
framwork_base.h
游戲結束條件判斷
bool end_judge(number_block* moving_block);方向鍵控制方法
void control(const unsigned char control_flag, number_block* moving_block);定義了框架內每個方塊的元素類型
struct framework_block_item {number_block* block;bool is_none;bool is_uncombined; };number_block.h
以系統時間為種進行隨機生成數字塊的數值
number_block() {} // 以系統時間為種進行隨機, difficulty :1 2 3對應只生成2, 24, 248 unsigned int generate_number(int difficulty) {srand((unsigned)time(NULL));return 1 << (rand() % difficulty + 1); }初始化數字塊
number_block(int difficulty, bool canBeMove = true, int x = 1, int y = 1) {is_moving = canBeMove;this -> x = x;this -> y = y;number = generate_number(difficulty); }修改數字塊相應的屬性
void modify_x(unsigned int x) {this -> x = x; } void modify_y(unsigned int y) {this -> y = y; } void modify_number(unsigned int number) {this -> number = number; } void modify_is_moving(bool is_moving) {this -> is_moving = is_moving; }獲取數字塊相應屬性
unsigned int get_x() {return x; } unsigned int get_y() {return y; } unsigned int get_number() {return number; } unsigned int get_is_moving() {return is_moving; }suitiation_judgement.h
超出上界和填滿空格判斷
bool framework::end_judge(number_block* moving_block){
unsigned int current_x = moving_block->get_x();
unsigned int current_y = moving_block->get_y();
控制數字塊左移
case 75://方向左
{
if (current_x == 0)//
{//邊界判斷
return;
}
控制數字塊右移
case 77://方向右 {if (current_x == this->column - 1)return;else if (!this->game_blocks[current_y][current_x + 1].is_none || this->game_blocks[current_y][current_x + 1].is_uncombined){//右側塊不為空或為障礙塊return;}this->game_blocks[current_y][current_x].is_none = true;this->game_blocks[current_y][current_x + 1].is_none = false;this->game_blocks[current_y][current_x + 1].block = moving_block;moving_block->modify_x(current_x + 1); } break;控制數字塊下移
case 80://方向下 {int tmp = 0;if (current_y == 0){return;}if (!this->game_blocks[current_y - 1][current_x].is_none || this->game_blocks[current_y - 1][current_x].is_uncombined){return;}while (!this->game_blocks[tmp][current_x].is_none){tmp++;}this->game_blocks[tmp][current_x].is_none = false;this->game_blocks[tmp][current_x].is_uncombined = false;this->game_blocks[tmp][current_x].block = moving_block;this->game_blocks[current_y][current_x].is_none = true;moving_block->modify_y(tmp); } break;(二)數據庫設計
四.Alpha任務分配計劃
召開迭代計劃會議,為下周進入Sprint作準備。具體內容如下:
五.測試計劃
說明:測試將在游戲基本實現后再進行
轉載于:https://www.cnblogs.com/coothen/p/9858221.html
總結
以上是生活随笔為你收集整理的C++轮子队-第三周(需求改进原型设计)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#使用TCP/UDP协议通信并用Wir
- 下一篇: 一个很酷的快速开发代码生成器系统