我罗斯方块第二次作业(Player类)
我罗斯方块第二次作业
我的任务
- 完成player类的编写
- player类的测试
我的计划
类的设计:
Player类作为一个玩家类,需要处理和玩家有关的所有信息,以及维护玩家的游戏页面map。关于玩家信息,需要设置玩家姓名、玩家目前分数、玩家是否失败等等的存入获取接口。Player类中含有两个Block类的实例化,分别存储现在的方块和下一个方块,需要设置方块旋转和生成新方块的接口。关于和游戏控制Game类的对接,需要提供方块左移、右移、下移以及碰撞检测等,还有方块消行以及增加行数接口。对于Interface类的的对接,需要维护map数组供调用,其次还需提供获取用于定位方块的posX和posY、现有方块blockNow和下一个方块blockNext的接口,获取这些信息后,Interface可完成对页面的渲染
测试设计:
考虑现阶段未对Game类进行编写,所以在测试上有不方便的地方,所以选取两个接口进行测试,即方块下落和底部增加行,由于方块随机生成,在没有操作按键的情况下无法完成对方块的消行等操作,相关的测试将留到下一次作业提交时进行阐述
编程日记
2020/5/11
今天讨论了分工问题,我分配到Player类的完成,对于Player类,之前思考过如何完成,但是真正着手去做还是有些没把握
2020/5/12
咕
2020/5/13
创建player.cpp文件,写了下比较简单的分数获取名字获取等,思考如何完成Player的功能
2020/5/14
阅读源码
2020/5/15
增加新方块生成的功能,以及Player的初始化等等,继续阅读源码,实例化Block类,引入blockNow和blockNext,思路开始清晰起来
2020/5/16
阅读源码,写了下方块左移右移下移的函数,需要用到检测方块碰撞的功能,但是就开始没有头绪,不知道怎么将一个4*4的数组和一个20*10 数组进行碰撞的判。先将碰撞扔到了一旁,百度了关于随机数的实现的方法,思考下如何随机出底部的一行,关于随机生成方块,起初考虑的是固定随机生成的个数,但是考虑游戏的乐趣和代码的简便上,还是选定随机方块数不确定的方案,这样不用考虑随机的数的生成不重复的问题
2020/5/17
阅读源码,加入方块的定位概念,用于标记方块左上角,这样可以完成碰撞检测,联立起两个数组,也方便Interface的渲染。完成碰撞检测的功能
2020/5/18
阅读源码,参照源码完成消行操作,这里思考将来可以添加难度设置功能,将难度设置的级别和消行后的积分增加挂钩,更加人性化,参考消行操作的方块下移,完成了底部随机增加一行中方块上移的功能,完善底部随机增加一行的代码编写。这里思考到因为本次作业没有计划对Game类的编写,所以没有办法去测试消行操作,但是这个单元测试也必然需要拖到整个项目差不多完成时才能进行测试,不是很好
2020/5/19
咕咕咕
2020/5/20
博客初步编写,测试,发现问题,修复bug(还挺多), 交流讨论自己的代码
2020/5/21
完善博客,测试,发现问题,百度···,解决问题,交流讨论,日记到今天就结束了,在这个阶段完成了基本上的Player类的编写以及一小部分测试,关于收获,也是很多,对于面向对象的认识又加深了,将一个大的项目分类成不同的模块,每个人只需维护好自己的部分,确定公共的对接标准,就可以达到分工完成的目的。其次,也方便了单元测试,只要自己功能上没有问题,那么对于整个程序就没有问题,不会影响他人。
我遇到的问题
关于map数组的私有:
描述:
对于二维数组的获取,无论是初始化还是获取等等都无法实现,所以最终将map数组设置成共有成员函数,但是这样破坏了类的封装性,外界可直接对map数组进行修改,导致不够安全。
解决方案:
目前仍未找到有效的最优解决方案
关于测试的编译问题
描述:
关于vscode的运行cpp代码只会对目前这个文件单独编译,直接运行会发生报错
解决方案:
直接在控制台使用
g++命令进行编译,再通过./命令运行优化方案:
还记得之前学习过的.bat脚本编程,所以将编译和运行的命令直接写在脚本中,点击运行即可,大大减轻了测试过程中的负担
关于多文件编译的问题
描述:
再最初多文件编译时,会出现报错:

解决方案:
在百度过后发现问题,自己在头文件和cpp文件中重复
#include "block.h"这一代码,从而导致报错提醒中:多处Block定义。关于随机数问题
描述:
在百度搜索之后,得到随机数模板:
#include <cstdlib>
#include <ctime>
srand((int)time(0));
target = rand()%N
// N代表随机范围
但是将
srand((int)time(0));和rand()放在同一个函数中,会发生以下情况

产生新的随机方块和增加函数之后,随机出的数字相同
解决方案:
但是如果单独将
srand((int)time(0));写在测试代码中中,却可以产生随机效果:
目前还没有找到资料或是想到为什么会发生这样的情况
我罗斯方块第二次作业(Player类)的更多相关文章
- 我罗斯方块最终篇(Player类、Game类)
我罗斯方块最终篇(Player类.Game类) |--------------------项目GitHub地址--------------------| 目录 我罗斯方块最终篇(Player类.Gam ...
- 我罗斯方块第二次作业(Block类)
负责任务 完善Block类的相关函数及变量: 对Block类的函数功能进行调试: github项目地址. 开发日记 2020.5.11 今天和朋友们讨论了如何分工的工作,我负责的部分是Block类的完 ...
- 我罗斯方块最终篇(Interface类)
负责的任务 游戏过场及界面设计 Interface类的基础实现 根据队友需求完善Interface类功能 Interface类的本地测试 辅助队友改良游戏操作 代码要点 我们主要是通过控制台进行界面渲 ...
- 我罗斯方块最终篇(Block类)
负责的任务 完善Block类的相关函数及变量: 对Block类中函数进行调整改进,并于其他人负责的类相互配合: 对Block类的函数功能进行调试: github项目地址. 效果图 具体可见总篇,一下仅 ...
- UML与软件建模:第二次作业(类图中类的表示)
一.类图 (1)类图定义 类图,是UML(统一建模语言)中用于描述"类"以及"类与类"之间的示意图.它形象的描述出了系统的结构,帮助人们理解系统. 类图是在&q ...
- UML第二次作业:类在类图中的表示
类在类图中的表示 一.概览 1.plant UML语法学习小结 2.班级学生管理系统中的 —— “学生” 类的属性.方法 3.类图脚本程序 4.类图示例 二.类图语法学习小结 1.类之间的关系 通过某 ...
- OO第二单元作业总结【自我反思与审视】
第二单元作业的完成史,就是一部心酸的血泪史…… 多线程的出现为我(们)打开一片广阔的天地,我也在这方天地摸爬滚打,不断成长!如果说第一单元之前还对Java语法有所了解的话,那么这单元学习多线程则完全是 ...
- Java第二次作业——数组和String类
Java第二次作业--数组和String类 学习总结 1.学习使用Eclipse关联jdk源代码,查看String类的equals()方法,截图,并学习其实现方法.举例说明equals方法和==的区别 ...
- 软件工程(QLGY2015)第二次作业点评(随机挑选20组点评)
相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 说明:随机挑选20组点评,大家可以看看blog名字,github项目名字,看看那种是更好的,可以学习,每个小组都会反应出一些问题,希望能 ...
随机推荐
- YbtOJ-大收藏家【分层图,最大流】
正题 题目链接:https://www.ybtoj.com.cn/contest/117/problem/2 题目大意 \(n\)个人,每人有\(a_i\)个属于自己的物品.\(m\)次交换依次进行, ...
- ECMA 2022 (es13) 新特性
本文主要整理了截至到 2021年10月12日 为止的且处于 Stage 3->Stage 4 阶段的ECMA提案. 主要包括: Class Fields RegExp Match Indices ...
- Elasticsearch 存储成本省 60%,稿定科技干货分享
背景 稿定科技旗下稿定设计产品是一个聚焦商业设计的多场景在线设计平台,打破了软硬件间的技术限制,汇集创意内容与设计工具于一体,为不同场景下的设计需求提供优质的解决方案,满足图片.视频等全类型媒介的设计 ...
- 洛谷4606 SDOI2018战略游戏(圆方树+虚树)
QWQ深受其害 当时在现场是真的绝望...... 现在再重新来看这个题 QWQ 根据题目所说,我们可以发现,对于每一个集合中的节点,我们实际上就是要求两两路径上的割点的数目 考虑到又是关于点双的题目, ...
- appium操作安卓应用所需要的数据准备
操作系统.系统版本如下所示: desired_caps={} desired_caps["platformName"]="Android" desired_ca ...
- Proxypool代理池搭建
个人博客:点我 前言 项目地址 : https://github.com/jhao104/proxy_pool 这个项目是github上一个大佬基于python爬虫制作的定时获取免费可用代理并入池的代 ...
- 项目实战:Qt文件改名工具 v1.2.0(支持递归检索,搜索:模糊匹配,前缀匹配,后缀匹配;重命名:模糊替换,前缀追加,后缀追加)
需求 在整理文件和一些其他头文件的时候,需要对其名称进行整理和修改,此工具很早就应该写了,创业后,非常忙,今天抽空写了一个顺便提供给学习. 工具和源码下载地址 本篇文章的应用包和源码包可在 ...
- SpringCloud微服务实战——搭建企业级开发框架(二):环境准备
这里简单说明一下在Windows系统下开发SpringCloud项目所需要的的基本环境,这里只说明开发过程中基础必须的软件,其他扩展功能(Docker,k8s,MinIO,XXL-JOB,EKL,Ke ...
- sqlmap--tamper使用技巧
apostrophemask.py 适用数据库:ALL 作用:将引号替换为utf-8,用于过滤单引号 使用脚本前: tamper("1 AND '1'='1") 使用脚本后: 1A ...
- MacOS安装使用Kettle
一.环境说明 操作系统版本:macOS Big Sur 11.6.1 机型:Intel版本 JDK版本:Amazon Corretto-openjdk8 Kettle版本:Kettle8.9 二.问题 ...