我罗斯方块第二次作业

我的任务

  • 完成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. Docker入门系列之五:15个 Docker 命令

    在这篇文章中,我们将学习15个Dockers CLI命令.如果你还不了解Docker,请查看这个系列的其他部分进行学习,Docker概念,生态系统,Dockerfile,Docker镜像. Docke ...

  2. 通用脱敏工具类和判断URL

    通用脱敏工具类 public class DesensitizationUtil { private static final int SIZE = 6; private static final S ...

  3. Spring源码阅读一

    引导: 众所周知,阅读spring源码最开始的就是去了解spring bean的生命周期:bean的生命周期是怎么样的呢,见图知意: 大致流程: 首先后通过BeanDefinitionReader读取 ...

  4. Unity——资源文件夹介绍

    Unity资源文件夹介绍 1.编辑时 在Asset文件下存在Resources和SteamingAsset文件夹: Resources 只读不可修改,打包时直接写死,没有办法通过热更新替换资源: 可以 ...

  5. 调试器地址出现大小端紊乱,引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。

    今天在编写一系列新增需求代码后,开始调试代码 发现上个版本正常可运行的代码出现了:引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突. 上个版本数代码 ...

  6. sqlite3 c++使用以及提高速率(一万条每秒左右)

    参考来源: sqlite3的C语言使用(三):https://www.leavesongs.com/C/sqlite3_3.html sqlite插入和查询效率提高方法及测试结果: http://bl ...

  7. C++优化列表

    #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize("Ofast") #pragma GCC ...

  8. redis学习笔记-01 string类型命令

    一.set key value set joker 123456 #设定key为joker,value为123456的数据 二.keys * keys * #用于查看该数据库中所有的key值 三.se ...

  9. Java基础之(一):JDK的安装以及Notepad++的下载

    从今天开始就开始我的Java的学习了,学习Java前需要做一些前期的准备工作.好了,现在我们先一起来安装JDK. JDK的安装 JDK下载链接:JDK 下载电脑对应的版本,同意协议 双击安装JDK 将 ...

  10. C++ 与 Visual Studio 2019 和 WSL(二)

    终端 A more integrated terminal experience | Visual Studio Blog (microsoft.com) Say hello to the new V ...