zoukankan      html  css  js  c++  java
  • 我罗斯方块汇报(1)

    这个作业属于哪个课程 面向对象程序设计2020
    这个作业的要求在哪里 我罗斯方块
    这个作业的目的 我罗斯方块开发进度汇报
    作业正文 我罗斯方块
    项目地址 我罗斯方块
    其他参考文献 Windows程序设计
    小组成员 041901328 王真平

    开发进展

    1.重新设计了类的数据成员和成员函数。分为方块,窗口,玩家,和游戏引擎四个类。
    (1)完成了窗口类,并重新设计了游戏界面的样式。如下图:

    (2)游戏引擎类主要负责方块的运动,判定,目前实现了方块下落。
    (3)实现了玩家类(暂时无功能函数)
    (4)方块类,实现了随机产生成方块的功能
    2.由于第一次博客完成后开发遇到了极大的阻碍,我决定先做一个单人的测试版,初步实现了我罗斯方块的部分功能,使其能正常下落,移动,变形(不够完善),捋清了设计思路。(此步骤参考了相关视频)

    遇到的问题及解决

      当完成第一次博客继续开发时,发现方块下落无法在窗口上实现,且不同类之间相互调用杂乱,接口繁多。在调试过后发现存在如下问题:
      1.在windows编程绘制窗口时,在错误的消息下使用了成员函数,导致无法展示出下落的方块。这个问题在我将将函数放到正确的消息下后可以解决。
      2.做第一次设计时,还没学到静态数据成员和友元函数,以及自己把类定义在错误的位置,导致的问题就是数据被反复的覆盖,没办法进行正常的游戏。
    

    而且没有友元函数,导致我的函数不仅接口繁多,而且在很多功能的实现上无从下手。这也是我重新设计类的数据成员和成员函数的一个重要原因。
    在已有程序出现这么多问题后,我决定推到重来,将背景数组和其他数据设置成静态变量,调整了几个类的关系,使功能需要配合使用的类设为了友元类,以简化接口复杂程度和实现功能的便捷性。

    开发日记

    5月19日
    静态数据成员和友元函数像是给我打开了新世界的大门,我突然就相同了怎么把几个类进行联系。于是:

    class Player
    {
    
    	static int score1;          静态数据成员,就可以让我不必再担心在重复的定义类时让数据被覆盖,丢失!!!
    	static int score2;
    };
    class Windows;                      这个友元类真是雪中送炭!!!我的老大难问题一下就解决了
    class Square
    {
    	
    public:
    	static int arr_square[2][4];
    	static int arr_square2[2][4];
    	static int P1_x_square;//方块类型
    	static int P1_y_square;//方块横纵坐标
    	static int P1_squareId;
    	static int P2_x_square;
    	static int P2_y_square;
    	static int P2_squareId;
    public:
    	//产生随即块                              ###这两个产生的随机块的函数终于可以更方便的运用,多亏了友元函数!!
    	int CreatRandomSquare();
    	
    	int CreatRandomSquare2();
    	
    };
    class Windows
    {
    	friend Square;
    	//地图背景
    	static  int arr_background1[20][10];
    	static int arr_background2[20][10];
    public:
    	//画方框
    	void Onpaint(HDC hdc);
    

    5月20日
    接下来这几个函数实现就迎刃而解,真是太棒了!

    	//初始化
    	void OnCreat(Square & x) ;
    	
    	//显示方块
    	void PaintSquare(HDC hmemdc);
    	
    	//显示变2的方块+变色
    

    变色我暂时还没太想好,不过这个函数可以写出来了

    	//void Showsquare_2(HDC hdc);	
    	//把随机块贴进背景
    	void Copy_Square_Back(Square&x);
    	
    public:
    	//触底方块1变2
    	//void Change_1_2();
    	//消行函数
    	//void DestroyLine();
    	//增加行
    	//void AddLine();
    
    
    };
    class Engine
    {
    public:
    	//回车开始游戏
    	//void Onenter();
    	// 向左移
    	//void Onleft();
    	//向右移
    	//void Onright();
    	//加速下落
    	//void Ondown();
    	//变形
    	//void Onchange();
    	//计时器
    	//void Ontimer(HWND hwnd);
    public:
    	//方块下落
    	//void Squaredown();
    	//方块右移
    	//void Squareright();
    	//方块左移
    //	void Squareleft();
    	//方块变形
    	//void Square_change();
    	//void SquareL_change();
    public:
    	//判断是否触底
    //	bool Can_Down();
    //	bool Can_Down2();
    	////判断能否左移
    	//bool Can_Left();
    	//bool Can_Left2();
    	//判断能否右移
    	//bool Can_right();
    	//bool Can_right2();
    	//判断能否变形
    	//bool Can_change();
    	//bool Can_change_L();
    	//判断游戏是否结束
    	//bool Can_GameOver();
    };
    
     
    
     注释掉的函数功能有的还不完善,有的还没实现,为了节约篇幅,实现的具体代码放到GitHub里了。
    

    这个框架经过第一次的大改,应该已经完善了,下面实现功能就会快很多了!

  • 相关阅读:
    English Training Material
    SingleThreadModel is deprecated in Servlet API version 2.4
    What is the difference Apache (Http Server) and Tomcat (Servlet Container)
    Add a stylesheet link programmatically in ASP.NET
    Detail in Response.redirect and Server.transfer in ASP.NET
    @font-face usage
    实习面试总结(只写了昨天腾讯的面试和拿到offer的一个小公司, 有空再把前面的补上吧)
    redis-cli启动问题
    关于结构体内存对齐
    memcpy 和 memmove
  • 原文地址:https://www.cnblogs.com/wangmou-233-1024-com/p/12939672.html
Copyright © 2011-2022 走看看