我罗斯方块第二次作业

我的任务

  • 完成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类的编写以及一小部分测试,关于收获,也是很多,对于面向对象的认识又加深了,将一个大的项目分类成不同的模块,每个人只需维护好自己的部分,确定公共的对接标准,就可以达到分工完成的目的。其次,也方便了单元测试,只要自己功能上没有问题,那么对于整个程序就没有问题,不会影响他人。

我遇到的问题

  1. 关于map数组的私有:

    描述:

    对于二维数组的获取,无论是初始化还是获取等等都无法实现,所以最终将map数组设置成共有成员函数,但是这样破坏了类的封装性,外界可直接对map数组进行修改,导致不够安全。

    解决方案:

    目前仍未找到有效的最优解决方案

  2. 关于测试的编译问题

    描述:

    关于vscode的运行cpp代码只会对目前这个文件单独编译,直接运行会发生报错

    解决方案:

    直接在控制台使用g++命令进行编译,再通过./命令运行

    优化方案:

    还记得之前学习过的.bat脚本编程,所以将编译和运行的命令直接写在脚本中,点击运行即可,大大减轻了测试过程中的负担

  3. 关于多文件编译的问题

    描述:

    再最初多文件编译时,会出现报错:

    解决方案:

    在百度过后发现问题,自己在头文件和cpp文件中重复#include "block.h"这一代码,从而导致报错提醒中:多处Block定义。

  4. 关于随机数问题

    描述:

    在百度搜索之后,得到随机数模板:

    #include <cstdlib>
    #include <ctime>
    srand((int)time(0));
    target = rand()%N
    // N代表随机范围

    但是将srand((int)time(0));rand()放在同一个函数中,会发生以下情况

    产生新的随机方块和增加函数之后,随机出的数字相同

    解决方案:

    但是如果单独将srand((int)time(0));写在测试代码中中,却可以产生随机效果:

    目前还没有找到资料或是想到为什么会发生这样的情况

我罗斯方块第二次作业(Player类)的更多相关文章

  1. 我罗斯方块最终篇(Player类、Game类)

    我罗斯方块最终篇(Player类.Game类) |--------------------项目GitHub地址--------------------| 目录 我罗斯方块最终篇(Player类.Gam ...

  2. 我罗斯方块第二次作业(Block类)

    负责任务 完善Block类的相关函数及变量: 对Block类的函数功能进行调试: github项目地址. 开发日记 2020.5.11 今天和朋友们讨论了如何分工的工作,我负责的部分是Block类的完 ...

  3. 我罗斯方块最终篇(Interface类)

    负责的任务 游戏过场及界面设计 Interface类的基础实现 根据队友需求完善Interface类功能 Interface类的本地测试 辅助队友改良游戏操作 代码要点 我们主要是通过控制台进行界面渲 ...

  4. 我罗斯方块最终篇(Block类)

    负责的任务 完善Block类的相关函数及变量: 对Block类中函数进行调整改进,并于其他人负责的类相互配合: 对Block类的函数功能进行调试: github项目地址. 效果图 具体可见总篇,一下仅 ...

  5. UML与软件建模:第二次作业(类图中类的表示)

    一.类图 (1)类图定义 类图,是UML(统一建模语言)中用于描述"类"以及"类与类"之间的示意图.它形象的描述出了系统的结构,帮助人们理解系统. 类图是在&q ...

  6. UML第二次作业:类在类图中的表示

    类在类图中的表示 一.概览 1.plant UML语法学习小结 2.班级学生管理系统中的 —— “学生” 类的属性.方法 3.类图脚本程序 4.类图示例 二.类图语法学习小结 1.类之间的关系 通过某 ...

  7. OO第二单元作业总结【自我反思与审视】

    第二单元作业的完成史,就是一部心酸的血泪史…… 多线程的出现为我(们)打开一片广阔的天地,我也在这方天地摸爬滚打,不断成长!如果说第一单元之前还对Java语法有所了解的话,那么这单元学习多线程则完全是 ...

  8. Java第二次作业——数组和String类

    Java第二次作业--数组和String类 学习总结 1.学习使用Eclipse关联jdk源代码,查看String类的equals()方法,截图,并学习其实现方法.举例说明equals方法和==的区别 ...

  9. 软件工程(QLGY2015)第二次作业点评(随机挑选20组点评)

    相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 说明:随机挑选20组点评,大家可以看看blog名字,github项目名字,看看那种是更好的,可以学习,每个小组都会反应出一些问题,希望能 ...

随机推荐

  1. MyBatis的缓存玩法

    重要概念 SqlSession:代表和数据库的一次会话,提供了操作数据库的方法. MappedStatement:代表要发往数据执行的命令,可以理解为SQL的抽象表示. Executor:和数据库交互 ...

  2. NLP与深度学习(六)BERT模型的使用

    1. 预训练的BERT模型 从头开始训练一个BERT模型是一个成本非常高的工作,所以现在一般是直接去下载已经预训练好的BERT模型.结合迁移学习,实现所要完成的NLP任务.谷歌在github上已经开放 ...

  3. java集合类之LinkedList

    概述 a, 我们知道LinkedList它的数据存储方式是双向链表,基于链表存储的特性, LinkedList具有查询较慢(顺序访问)但增加/删除较快(虽然要遍历到指定位置, 但是相对于数组存储来说不 ...

  4. H5移动端适配方案-rem

    为什么移动端要适配: 由于移动设备的尺寸不一,所以移动端的页面要能够适应不同尺寸的设备,即页面的自适应,让页面在视觉上保持一致. rem:rem 是css3的一种相对单位,参考是根元素HMTL的fon ...

  5. 使用.NET(C#或VB.NET)开发NX外部程序

    1.如何不用将exe程序拷贝到UGII目录下运行? 答:在调用NX Open命令函数前,将当前目录移动到NX安装目录\UGII\,NX安装目录必须和环境变量UGII_BASE_DIR的值一致,否则报错 ...

  6. ubuntu修改软件源的方法

    最快方法--替换法 刚安装好的ubutun,打开source.list后,用vim替换的方法将所有的us提付出替换为 cn,然后保存退出,更新即可. # vim /etc/apt/source.lis ...

  7. linux Samba 搭建

    Samba is a free and open-source software package that provides seamless file and print services to S ...

  8. SharkCTF2021 Babyhttp && get_or_lose

    两道web. Babyhttp: 直接dirsearch,发现同时存在git和bak泄露:经验证,git的没用. 访问index.php.bak, 下载源码: 抓包,改包,发包即可. get_or_l ...

  9. 第四单元博客总结——暨OO课程总结

    第四单元博客总结--暨OO课程总结 第四单元架构设计 第一次UML作业 简单陈述 第一次作业较为简单,只需要实现查询功能,并在查询的同时考虑到性能问题,即我简单的将每一次查询的结果以及递归的上层结果都 ...

  10. python读取、写入txt文本内容

    转载:https://blog.csdn.net/qq_37828488/article/details/100024924 python常用的读取文件函数有三种read().readline().r ...