日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++轮子队-第三周(需求改进原型设计)

發(fā)布時間:2023/12/10 c/c++ 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++轮子队-第三周(需求改进原型设计) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需求改進&原型設計

一.需求完善

(一)系統(tǒng)功能(補充)

圖形界面(圖片如下圖所示:)

根據需求與組內討論結果,現歸納圖形界面方面需要的設計與相應功能:

數據-圖形界面中間類:
  • 數字方塊類 NumBlock
    • 方塊數字 num,若為0則表示為空方塊,在具體的圖形界面中不顯示

    • 方塊數字查看方法 getBlockNum()

    • 方塊數字設置方法 setBlockNum()

    • 該方塊在棋盤數組中的下標 location,初步定為存儲行號、列號的結構體

    • 該方塊相對于程序窗口的位置 position ,可能用QPointF實現

    • 方塊類聲明

    class number_block {public :number_block() {}// 以系統(tǒng)時間為種進行隨機, difficulty :1 2 3對應只生成2, 24, 248unsigned 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;}private :// 為了維護數據的安全性,私有類成員只允許通過公有借口進行間接訪問bool is_moving; // 移動unsigned int number; // 數字unsigned int x; // 二維橫坐標unsigned int y; // 二維縱坐標 };
  • 5*7棋盤 Board:
    • 二維數組 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)

  • 游戲圖形引擎 2048TetrisEnigine
    • 移動:

      • 左移 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

    分數統(tǒng)計

    障礙塊

    難度調整

    在線排名

    (二)四象限分析法

    作用:幫助你清晰定位軟件的功能特點和將來要進行研發(fā)的創(chuàng)新點,如圖所示:

    說明:

    • 殺手功能:針對某一應用需求我們的競爭對手和用戶已經決定了的必要滿足的需求,我們的創(chuàng)新功能也在這一部分。

    • 外圍功能:輔助性的功能,比如良好的用戶體驗界面等。

    • 必要需求:能夠準確解決用戶主要功能的需求,比如游戲中的控制計分等功能。

    • 輔助需求:非必要需求,比如更改界面風格,增加背景音樂等功能。


    解決方法:

    • 維持----以最低成本維持此功能

    • 抵消----快速地達到“足夠好”、“和競爭對手差不多”

    • 優(yōu)化----花大力氣做到并保持行業(yè)最好

    • 差異化----產生同類產品比不了的功能或優(yōu)勢

    • 不做----砍掉一個功能,有時我們不需要做所有的功能

    (三)進度計劃(WBS,Work Breakdown Structure)

    二.原型改進

    三.系統(tǒng)設計

    (一)架構設計

    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

    以系統(tǒng)時間為種進行隨機生成數字塊的數值

    number_block() {} // 以系統(tǒng)時間為種進行隨機, 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();

    //超出上界判斷 if ((this->game_blocks[current_x][current_y - 1].is_none == false) && current_y == column - 1) {return true; }//填滿空格判斷 for (current_y = 0; current_y < row; ++current_y) {for (current_x = 0; current_x < column; ++current_x){if (game_blocks[current_y][current_x].is_none){return false;}} } if (current_y == row && current_x == column) {return true; }

    控制數字塊左移
    case 75://方向左
    {
    if (current_x == 0)//
    {//邊界判斷
    return;
    }

    if (!this->game_blocks[current_y][current_x - 1].is_none || this->game_blocks[current_y][current_x - 1].is_uncombined){//左側塊為空塊或為障礙塊return;}game_blocks[current_y][current_x].is_none = true;game_blocks[current_y][current_x - 1].is_none = false;game_blocks[current_y][current_x - 1].block = moving_block;moving_block->modify_x(current_x - 1); } break;

    控制數字塊右移

    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作準備。具體內容如下:

  • 依據項目組能提供的總時間、功能模塊的優(yōu)先級以及模塊之間的依賴關系,在Product Backlog中選取待實現的功能項。
  • 對已選擇的功能項再做進一步分解,分解為1-10小時左右的任務,構成Sprint Backlog。在PM的協(xié)助下,編碼的同學對任務進行認領。
  • 以甘特圖的方式擬定迭代沖刺計劃。
  • 五.測試計劃

    說明:測試將在游戲基本實現后再進行

    轉載于:https://www.cnblogs.com/coothen/p/9858221.html

    總結

    以上是生活随笔為你收集整理的C++轮子队-第三周(需求改进原型设计)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。