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

需求改进&原型设计

一.需求完善

(一)系统功能(补充)

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

1484732-20181029001322711-679639110.png

根据需求与组内讨论结果,现归纳图形界面方面需要的设计与相应功能:

数据-图形界面中间类:
  1. 数字方块类 NumBlock
  • 方块数字 num,若为0则表示为空方块,在具体的图形界面中不显示

  • 方块数字查看方法 getBlockNum()

  • 方块数字设置方法 setBlockNum()

  • 该方块在棋盘数组中的下标 location,初步定为存储行号、列号的结构体

  • 该方块相对于程序窗口的位置 position ,可能用QPointF实现

  • 方块类声明

class number_block {public :number_block() {}// 以系统时间为种进行随机, 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; // 二维纵坐标
};
  1. 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)

  1. 游戏图形引擎 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

分数统计

障碍块

难度调整

在线排名

(二)四象限分析法

作用:帮助你清晰定位软件的功能特点和将来要进行研发的创新点,如图所示:

1484732-20181028224027278-1158007719.png

说明:

  • 杀手功能:针对某一应用需求我们的竞争对手和用户已经决定了的必要满足的需求,我们的创新功能也在这一部分。

  • 外围功能:辅助性的功能,比如良好的用户体验界面等。

  • 必要需求:能够准确解决用户主要功能的需求,比如游戏中的控制计分等功能。

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


解决方法:

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

  • 抵消----快速地达到“足够好”、“和竞争对手差不多”

  • 优化----花大力气做到并保持行业最好

  • 差异化----产生同类产品比不了的功能或优势

  • 不做----砍掉一个功能,有时我们不需要做所有的功能

(三)进度计划(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();

//超出上界判断
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作准备。具体内容如下:

  1. 依据项目组能提供的总时间、功能模块的优先级以及模块之间的依赖关系,在Product Backlog中选取待实现的功能项。

1484732-20181028224056258-1126750938.png

  1. 对已选择的功能项再做进一步分解,分解为1-10小时左右的任务,构成Sprint Backlog。在PM的协助下,编码的同学对任务进行认领。

1484732-20181028224108040-1119169194.png

  1. 以甘特图的方式拟定迭代冲刺计划。

五.测试计划

说明:测试将在游戏基本实现后再进行

转载于:https://www.cnblogs.com/coothen/p/9858221.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 从头学 01:CPU 是如何执行一条指令的?

摘自&#xff1a;Linux 从头学 01&#xff1a;CPU 是如何执行一条指令的&#xff1f; 作者&#xff1a;IOT物联网小镇 发布时间&#xff1a;2021-07-02 08:22:43 网址&#xff1a;https://blog.csdn.net/jchen1218/article/details/118404217?utm_sourceapp&app_version4.…

python题目推荐_python题目

#1~100的奇数和&#xff0c;偶数和sum 0n 99while n > 0:sum sum nn n - 2print(sum)i1sum0while i<100:if i%20:sumii1else:i1print(sum)#偶数sum0for i in range(1,101):if i%20:sumiprint(sum)#奇数sum10for i in range(1,101):if i%2!0:sum1iprint(sum1)print(s…

两个主机通信过程

主机A与主机B通信,A Ping B,图:A-交换机-B,AB同一子网(1)ping数据包用的是ICMP协议&#xff0c;IP协议的一个子协议&#xff0c;位于三层&#xff0c;包含A的IP&#xff0c;B的IP,三层进行IP封装成包,进入二层(2)A,B处于相同子网,查看缓存中对与目的对应得B第2层mac地址,如果存…

积极拥抱.NET Core开源社区

潘正磊在上海的Tech Summit 2018 大会上给我们的.NET Core以及开源情况带来了最新信息。 .Net Core 开源后取得了更加快速的发展&#xff0c;目前越活跃用户高达400万人&#xff0c;每月新增开发者45万&#xff0c;在 GitHub 上的月度增长达到15%。目前有来自超过3,700家企业的…

内存:你跑慢点行不行?CPU:跑慢点你养我吗?内存:我不管!(内附超全思维导图)

摘自&#xff1a;内存&#xff1a;你跑慢点行不行&#xff1f;CPU&#xff1a;跑慢点你养我吗&#xff1f;内存&#xff1a;我不管&#xff01;&#xff08;内附超全思维导图&#xff09; 作者&#xff1a;程序员cxuan 发布时间&#xff1a;2020-03-09 13:43:11 网址&#xff1…

过期时间_2020年最新航空里程过期时间及避免过期方法总结

【2020.2 更新】近几年来主要有如下变化&#xff1a;UA 里程永不过期了&#xff0c;Southwest 里程永不过期了&#xff0c;Asia Miles 里程可以通过里程变动续命了&#xff0c;Flying Blue 里程变成24个月过期了&#xff0c;AV 里程变成12个月过期了。各大航空的里程过期政策辛…

Spring Boot 5:应用程序启动时初始化资源

需求&#xff1a;应用程序启动后&#xff0c;初始化基础数据、加密证书等操作。 可以使用CommandLineRunner接口来实现&#xff0c;在SpringBoot.run()之后完成资源的初始化工作。 注意&#xff1a;多个Runner需要顺序启动的话&#xff0c;可以使用Order注解 package sun.flowe…

怎么用python读取大文件_使用Python读取大文件的方法

背景准备试一试:f 开放(\u201C\/道路\/ \/文件\u201D,\u201Cr\u201D)打印()最后:如果f:()调用读()将读取所有文件的内容,如果文件有10 g,记忆会破灭,所以,为了安全起见,你可以反复调用read(大小)方法,每次最多读字节大小。此外,调用readline()一次读取一行,叫readline()阅读所有…

#10172. 「一本通 5.4 练习 1」涂抹果酱 题解

题目链接 一道三进制状压的好题。 题目描述: Tyvj 两周年庆典要到了&#xff0c;Sam 想为 Tyvj 做一个大蛋糕。蛋糕俯视图是一个 NM的矩形&#xff0c;它被划分成 NM个边长为 11的小正方形区域&#xff08;可以把蛋糕当成 N 行 M 列的矩阵&#xff09;。蛋糕很快做好了&#x…

全国计算机等级考试题库二级C操作题100套(第89套)

第89套&#xff1a; 给定程序中&#xff0c;函数fun的功能是:求出形参ss所指字符串数组中最长字符串的 长度&#xff0c;其余字符串左边用字符*补齐,使其与最长的字符串等长。字符串数组中共 有M个字符串&#xff0c;且串长<N。 请在程序的下划线处填入正确的内容并把下划线…

Android 调用相册 拍照 实现系统控件缩放 切割图片

android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家。 package cn.m15.test;import java.io.ByteArrayOutputStream; import java.io.File; import android.app.Activity; import android.content.Intent; import a…

全国计算机等级考试题库二级C操作题100套(第88套)

第88套&#xff1a; 函数fun的功能是&#xff1a;把形参a所指数组中的最大值放在a[0]中&#xff0c;接着求出a所指数组中的最小值放在a[1]中&#xff1b;再把a所指数组元素中的次大值放在a[2]中&#xff0c;把a数组元素中的次小值放在a[3]中&#xff1b;其余以此类推。例如:若…

75: libreoj #10028 双向宽搜

$des$ 实现一个bfs $sol$ 写了一个双向bfs #include <bits/stdc.h>using namespace std;#define Rep(i, a, b) for(int i a; i < b; i )#define gc getchar() inline int read() {int x 0; char c gc;while(c < 0 || c > 9) c gc;while(c > 0 &&…

《MS SQL Server 2000管理员手册》系列——8. 管理 Microsoft SQL Server 服务

8. 管理 Microsoft SQL Server 服务SQL Server 服务组件 使用SQL Server服务管理员使用 Windows 2000 服务控制管理员使用 SQL Server Enterprise Manager本章总结当您安装好 Microsoft SQL Server 2000 之后就可以开始执行了。在使用Microsoft SQL Server 2000 存取数据前&…

中的 终端报错怎么看原因_《琅琊榜》中太子被封禁,高湛引皇上看桂花的真正原因是什么?...

《琅琊榜》中&#xff0c;高湛是一个非常经典的角色&#xff0c;他比夏江更懂梁帝的心&#xff0c;或者说&#xff0c;知梁帝者&#xff0c;莫过于高湛。当然&#xff0c;若不是如此&#xff0c;高湛也不能在梁帝身边待了那么些年。梁帝生病&#xff0c;喝下静妃娘娘配制的甜汤…

js获取当前域名、Url、相对路径和参数以及指定参数

用 Javascript 可以单独获取当前域名、Url、相对路径和参数&#xff0c;所谓单独攻取&#xff0c;即域名不包括网页文件的路径和参数、参数不包括域名和网页文件路径&#xff0c;下面分别介绍。 一、js获取当前域名有2种方法 1、方法一 var domain document.domain; 2、方法二…

STM32安装Keil5、芯片支持包、startup启动文件(启动过程、冷热启动)、建立工程、ST-LINK烧写步骤

参考&#xff1a;stm32入门之keil5的安装以及第一个工程的建立 作者&#xff1a;SKY丶丿平才 发布时间&#xff1a; 2020-12-06 17:08:30 网址&#xff1a;https://blog.csdn.net/weixin_48264057/article/details/110734596 目录使用的STM32F103C8T6一、Keil5的下载与安装1.下…

深度学习都是非凸问题_神经网络的损失函数为什么是非凸的?

Ian Goodfellow曾经给在quora回答过&#xff0c;以下是原文&#xff1a;There are various ways to test for convexity.One is to just plot a cross-section of the function and look at it. If it has a non-convex shape, you don’t need to write a proof; you have dis…

针对移动互联网应用的网络建设和优化

为什么80%的码农都做不了架构师&#xff1f;>>> 针对移动互联网应用的网络建设和优化 截至2013年3月,移动互联网的人均上网时长和PC互联网相比差距已经扩大了29%.PC互联网向移动端迁移的趋势进一步凸显.小米是一家专注于iPhone和Android等新一代智能手机软件…

STM32F103实现点灯(寄存器方式)

参考&#xff1a;STM32F103系列最简易版点灯程序 作者&#xff1a;一只青木呀 发布时间&#xff1a;2020-10-21 11:40:38 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/109196950 目录硬件软件点灯流程使能GPIO端口E和B对应的时钟找到GPIO对应的时钟…