• 我罗斯方块最终篇


    作业描述 详情
    这个作业属于哪个课程 2020面向对象程序设计
    这个作业要求在哪里 我罗斯方块最终篇
    这个作业的目标 - 代码的 git 仓库链接
    - 运行截图/运行视频
    - 代码要点
    - 收获与心得
    - 依然存在的问题。
    作业正文 我罗斯方块最终篇
    Github地址 我罗斯方块
    其他参考文献
    小组成员 031903146 罗佳昱
    031903144 李雨情
    111900811 林杞垒

    话不多说先上运行视频

    • 要下载下来看
    • 由于我一个人玩双人模式,手会不协调,录视频老是失败,所以录了两个视频分别测试了两个玩家的功能

    玩家一

    玩家一

    玩家二

    玩家二

    • 玩家一失败

    • 玩家二失败

    代码要点

    • 画方块直接用图形
    • 所有方块旋转是有一个中心的

    游戏界面

    • 游戏界面方面的内容在Tetris类中
      利用颜色设置函数和光标控制函数合作画出界面
      颜色设置函数
    void SetColor(int);//控制颜色
    

    光标控制函数

    void SetPos(int i, int j)//控制光标位置,列,行
    

    方块形状变化

    利用数组记录各个形状的方块的对应点坐标,并且用define为每个形状标记对应ID

    方块变形

    利用标记的ID,很容易就实现了变形

    方块下落

    • 设置循环
    • 利用画方块和擦除方块函数配合实现下落的效果
    void Draw(int x, int y, int num);//画方块
    
    void ReDraw(int x, int y, int num);//擦除方块
    
    • 在每次下落一格之前都用判断函数判断是否可以继续下落
    virtual bool Judge(int x, int y, int num) = 0;//判断函数
    
    • 如果下一次下落之后不能在下落,即碰到方块了,进入更新界面函数,画最后一次的方块,以及改方块的颜色和在画布上标记该处已经有方块。
    void Updata(int p1, int p2, int idw, int play);// 更新界面
    
    • 键盘读取
      键盘读取是配在方块下落这个大函数中,每次下落一格之前读取一下键盘响应。

    方块消行

    先把游戏区域内的所有方块清空,再将画布的标记整体下移,再根据画布的标记重新绘制方块,从而实现方块消行。

    int ClearLine(int p1, int p2, int idw); //消除行
    

    增加垃圾行

    依然是先把游戏区域内的所有方块清空,再将画布的标记整体上移。
    再利用

    srand((unsigned)time(NULL));   //根据不同时间生成不同的种子
    	int x = (rand() % (9)) + 1;//随机产生生成行的方块数
    

    产生随机数(这里是可以生成重复随机数的),确定要增加的垃圾行有多少个方块
    再利用

    vector<int> GenerateDiffNumber(int min, int max, int num);//产生不重复的随机数
    

    随机生成不重复的随机数确定要将方块放置的坐标(这里的随机数不能重复),并在画布上标记

    void addline();//增加垃圾行
    

    最后根据画布重新画出方块,从而实现增行

    一些变化

    • 在学了继承和多态之后,创了Block作为两个方块类的基类,缩短了代码量
    • 玩家类最后我选择跟方块类合体了,玩家类只有一个读取键盘响应函数,且与方块类联系紧密,设置Mino1 Mino2作为玩家一和玩家二。

    功能实现情况

    • 题设要求基本全部实现,具体可以看视频
    • 至于计算分数,我们组讨论了一下,认为双人模式比的是谁先输,跟分数无关,最后选择删除了计算分数部分的代码。

    更多具体代码实现在GitHub仓库:我罗斯方块

    存在的问题

    • 在游戏方面或许有隐藏问题,不过目前还没发现有什么问题
    • easyx的渲染方法还是不会搞,这也是从一开始动工就折磨我很久的问题,害,只能先这样吧

    收获与心得

    • 在整合期,我把他们放在了一个cpp文件里面调试,调了很久之后实现了功能也可以运行,但是游戏体验并不好,比较卡。
      本来还想着用线程解决,奈何到目前我们组还没有一个能搞明白的,就放弃了。
      后来把他们分到几个文件以后一起编译,惊讶发现竟然不卡了。
      或许这就是分文件编译的魅力吧。
    • 我现在在写这篇博客的时候可以用激动的心、颤抖的手来描述了。
      我们组居然真的能做一个游戏出来,虽然感觉画质不是很好,但还是很兴奋。
    • 我在整合的初期真的是有点绝望,一堆报错,不过幸好最后还是整出来了,坚持就是胜利!
  • 相关阅读:
    iOS iOS与html进行交互
    2. SwiftUI学习之_padding1()
    基础知识 1. 设计模式是什么?你知道哪些设计模式,请简要叙述?
    swift 5.0富文本
    ios 本地化
    ios报错:nw_protocol_get_quic_image_block_invoke dlopen libquic failed
    IOS开发没有开发者账号也可以进行测试
    swift项目中新的字体如何加入
    TestFlight用法 包教包会(iOS APP官方测试工具)
    IOS FMDB的使用
  • 原文地址:https://www.cnblogs.com/2002ljy/p/13079583.html
Copyright © 2020-2023  润新知