C++轮子队-第三周(需求改进原型设计)
需求改进&原型设计
一.需求完善
(一)系统功能(补充)
图形界面(图片如下图所示:)
根据需求与组内讨论结果,现归纳图形界面方面需要的设计与相应功能:
数据-图形界面中间类:
- 数字方块类 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; // 二维纵坐标
};
- 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
分数统计
障碍块
难度调整
在线排名
(二)四象限分析法
作用:帮助你清晰定位软件的功能特点和将来要进行研发的创新点,如图所示:
说明:
杀手功能:针对某一应用需求我们的竞争对手和用户已经决定了的必要满足的需求,我们的创新功能也在这一部分。
外围功能:辅助性的功能,比如良好的用户体验界面等。
必要需求:能够准确解决用户主要功能的需求,比如游戏中的控制计分等功能。
辅助需求:非必要需求,比如更改界面风格,增加背景音乐等功能。
解决方法:
维持----以最低成本维持此功能
抵消----快速地达到“足够好”、“和竞争对手差不多”
优化----花大力气做到并保持行业最好
差异化----产生同类产品比不了的功能或优势
不做----砍掉一个功能,有时我们不需要做所有的功能
(三)进度计划(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作准备。具体内容如下:
- 依据项目组能提供的总时间、功能模块的优先级以及模块之间的依赖关系,在Product Backlog中选取待实现的功能项。
- 对已选择的功能项再做进一步分解,分解为1-10小时左右的任务,构成Sprint Backlog。在PM的协助下,编码的同学对任务进行认领。
- 以甘特图的方式拟定迭代冲刺计划。
五.测试计划
说明:测试将在游戏基本实现后再进行
转载于:https://www.cnblogs.com/coothen/p/9858221.html
C++轮子队-第三周(需求改进原型设计)相关推荐
- 莪的拽、像省田各号①样没尽頭队——需求改进原型设计
需求改进&原型设计 1. 需求&原型改进 经过老师的指导以及组内成员的讨论后,我们认为之前的需求分析已经比较准确完备. 根据电子宠物的形象结构特点,以及模拟屏幕的空间限制,我们设计出了 ...
- 团队作业第3周——需求改进系统设计
文章目录 一.需求&原型改进 1.存在问题及解答 2.需求规格说明书修改部分 3.使用场景 二.系统设计 1.架构设计 2.设计思维导图 3.界面设计图 三.alpha任务分配计划 1.Spr ...
- 数据仓库系列 - 缓慢渐变维度SCD (Slowly Changing Dimension) 常见的三种类型及原型设计
开篇介绍 在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中,特别是在第一次导入之后的每一次增量抽取往往会遇到这样的问题:业务数据库中的一些数据发生了更改,到底要不要将这些变化也反映到数据仓 ...
- 从腾讯入职到离职,我仅用了三周:做大数据的同事看不起做报表的
这是很多年前的事情了,从腾讯入职到离职,我用了三周,理由很简单,做大数据的同事看不起做报表的,当然,我是做报表的那个. 做大数据的,就一定能做好报表吗? 报表是企业IT数据建设必不可少的一环,小到一张 ...
- 团队项目第二周 - 需求规格说明书 - 天冷记得穿秋裤队
团队项目第二周 - 需求规格说明书 - 天冷记得穿秋裤队 队员姓名 学号 陈俊旭(组长) 3116004630 夏瓦克提·木合塔尔 3116004658 张婷(副组长) 3216004672 周方源 ...
- 假如我们的坦克继续前进队——需求改进系统设计
需求和原型改进 在上个星期的<需求说明书>课堂讨论中,老师提出了游戏的用户界面的设计问题. 经过小组成员的讨论后,我们的想法如下:设计关卡基于时间和人手问题难以实现因此改为一关的形式,以便 ...
- 【采访】腾讯社交广告高校算法大赛第三周周冠军——到底对不队比赛经验及心得分享
[采访]腾讯社交广告高校算法大赛第三周周冠军--到底对不队比赛经验及心得分享 经过又一周紧张又激烈的角逐 腾讯社交广告高校算法大赛产生了第三周周冠军 他们的名字叫"到底对不队" 这 ...
- 团队项目(第三周)—GG队
需求改进&系统设计 队员 学号 叶尚文(队长) 3116008802 蔡晓晴 3216008808 杜婷萱 3216008809 龙剑初 3116004647 于泽浩 3116004661 一 ...
- 2017-2018-1 JAVA实验站 第三周作业
2017-2018-1 JAVA实验站 第三周作业 团队展示 队名 JAVA实验站 拟作的团队项目描述 (2048)增加其他模式,使得2048更加丰富多彩 团队的首次合照 团队的特色描述 团队内部很团 ...
最新文章
- 实时音视频的超级风口,开发者的机会在哪里?
- 巴蒂电信在泰米尔纳德邦推出4G Advanced网络
- no.8 C控制语句:循环 01
- 现实工程中常用到的C语言函数总结(不断更新)
- KVM虚拟机禁止上网(路由转发)
- THREEJS - mousedown/mouseup等鼠标相关事件失效
- 《人月神话》读书笔记之第1章焦油坑
- Discuz X3.4版块规则支持html代码修改
- python怎么接管浏览器_用python操作浏览器的三种方式
- 概念学习(学习笔记)
- 面试被问到你的优点和缺点时,该如何完美的回答
- GUI学习笔记——04更改背景板颜色,鼠标进入事件
- 销售书籍推荐,这本书做销售的必看!
- 预测《权游》角色生死,AI算法魔力何在?
- iOS-【转载】架构模式 - 简述 MVC, MVP, MVVM 和 VIPER (译)
- Vue.js 写一个echarts的水滴图
- 获取保存在路由器中的ADSL账号和密码
- wangeditor设置字体_自定义颜色、字体、字号
- 计算机教室着火教师要赔偿多少钱,学校计算机教室进行整修,要铺设静电地板,教室长12、5米,宽7、2米,如果工本费是每平方米108元...
- Android流量监控