我罗斯方块第二次作业

我的任务

  • 完成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. CF917D-Stranger Trees【矩阵树定理,高斯消元】

    正题 题目链接:https://www.luogu.com.cn/problem/CF917D 题目大意 给出\(n\)个点的一棵树,对于每个\(k\)求有多少个\(n\)个点的树满足与给出的树恰好有 ...

  2. CF932G-Palindrome Partition【PAM】

    正题 题目链接:https://www.luogu.com.cn/problem/CF932G 题目大意 给出一个长度为\(n\)的字符串,将其分为\(k\)段(\(k\)为任意偶数),记为\(p\) ...

  3. android 使用SQLite的基本操作

    Android操作数据库SQLite使用sql语句基本操作 1:自定义自己的SQLiteOpenHelper public class DBHelper extends SQLiteOpenHelpe ...

  4. Linkerd stable-2.11.0 稳定版发布:授权策略、gRPC 重试、性能改进等!

    公众号:黑客下午茶 授权策略 Linkerd 的新服务器授权策略(server authorization policy)功能使您可以细粒度控制允许哪些服务相互通信.这些策略直接建立在 Linkerd ...

  5. 使用Golang搭建gRPC服务提供给.NetCore客户端调用

    目录 gRPC概述 RPC gRPC又是什么呢 安装 Golang IDE(Goland) Protocol Buffer 下载Protocal Buffer 配置Protocal Buffer编译器 ...

  6. Fortran学习笔记:03 数组(Array)

    Fortran学习笔记目录 书接上回:Fortran学习笔记:02 流控制语句 数组(Array) 定义数组 一维数组 program main implicit none integer :: i ...

  7. Sentry 监控 - Snuba 数据中台架构(Data Model 简介)

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  8. 实战经验分享:使用 PyO3 来构建你的 Python 模块

    PyO3 主要用于创建原生 Python 的扩展模块.PyO3 还支持从 Rust 二进制文件运行 Python 代码并与之交互,可以实现 rust 与 Python 代码共存.在一些对性能要求较高的 ...

  9. 学校选址(ArcPy实现)

    一.背景 合理的学校空间位置布局,有利于学生的上课与生活.学校的选址问题需要考虑地理位置.学生娱乐场所配套.与现有学校的距离间隔等因素,从总体上把握这些因素能够确定出适宜性比较好的学校选址区. 二.目 ...

  10. 打造专属测试平台4-使用Docker部署Django项目

    编写完项目代码后,为了稳定的运行,需要将其部署至服务器.这里我选择了Docker去部署Django后端代码. 首先来看看Runoob对Docker的介绍: Docker 是一个开源的应用容器引擎,基于 ...