鱼C论坛

 找回密码
 立即注册
查看: 3421|回复: 0

[技术交流] 自己用c++类构建的俄罗斯方块游戏

[复制链接]
发表于 2014-1-16 19:57:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 消失在黑暗中 于 2014-1-17 00:23 编辑

HA$(9XT4OLYDXW(5F[(H70V.jpg
以下文字都是本人所写,未抄袭。   
一.为何用类?类为何成为编程的主流?      类很好的解决了大量数据和函数在代码中存放而不会混淆,并不是所有的函数都被使用,函数不会使用到所有的变量。变量往往是独立的,又是联系的。类将客观事物彻底的现实化,和符号化。类将数据和函数捆绑,用代码符号表现对象的属性和行为,对象与对象之间又可以产生关联。
二 .为什么用类写俄罗斯方块?如何用类解决俄罗斯方块程序?
      大程序不止一个变量,变量一多,面向过程的方法无法解决大量变量存放的问题,显然类可以。java开发只能用类,java用的人很多,学起来比学c++快,这是java的优点。java能写的,c++肯定能写的出来,而且c运行速度更快。

    面向过程的方法肯定能写出俄罗斯方块,但是没有类这么清晰的架构。

    据我了解,在大型游戏开发中,游戏设计会提供一个全局的类(GameWorld),此类保存了全局对象数组指针,游戏全部的对象指针被保存在这个全局对象数组中。游戏在设计中可以轻易的通过这个类中的对象数组地址修改游戏中的所有的对象。


   我构思的俄罗斯方块的需要的几个类:
   方块对象指针从下落方块对象(CGroupBox)传递给游戏世界对象(CGameWorld)来实行对象的传递(方块的叠加)。消     层是方块对象(CBox)的释放。

   1.方块类(CBox)
   此类属性:颜色(COLORREF boxcolor),逻辑位置(POINT mpoint)
   此类行为:无行为,方块类主要当结构体存放数据使用。
   头文件代码:
  class CBox
  {
public:
        CBox(void);
        ~CBox(void);
        POINT mpoint;
        COLORREF boxcolor;
};
2.下落方块组合类(CGroupBox)
  此类属性,此类行为,直接看代码注解
class CGroupBox
{
public:
        CGroupBox(void);
        ~CGroupBox(void);
        //方块数据
        mbox m_boxs;
        // 随机产生的方块类型
        int randomnum;
        // 一类方块中四种方块的其中一种类型
        int randbox_4;
        // 方块的相对位置
        bool CreateMBoxs(void);
        bool IsGroupBoxDownBoundary(void);                                //判断当前下落方块是否碰到边界
        bool IsGroupBoxLeftBoundary(void);                                //判断当前下落方块是否碰到边界
        bool IsGroupBoxRightBoundary(void);                                //判断当前下落方块是否碰到边界
        bool IsGroupBoxRollBoundary(void);                                //判断当前下落方块是否碰到边界
        bool SelectMBoxStartPoint(int RANDX,int RANDY);        //设置当前下落方块位置为指定方块的初始位置
        bool ChangeBoxPoint(int X, int Y);                                //设置当前下落方块的位置
        bool SetBoxColor(COLORREF mboxcolor);                        //设置当前下落方块的颜色
        bool ClearBoxes(void);                                                        //释放下落方块
3.游戏世界类(CGameWorld)
  此类属性,此类行为,直接看代码注解
  
enum State {PAUSE_GAME=0,
                        INSERVER_GAME,
                        OVERGAME};

class CGameWorld:public CGroupBox
{
public:
        CGameWorld(void);
        ~CGameWorld(void);
        CBox* lpworldbox[10][20];                //指向每一个方块
        RECT worldboxrect[20][20];                //二维区域的实际坐标
        POINT startpoint;                                //游戏中方块所在的区域
        int boxwidth;                                        //方块的边宽
        CGroupBox prepareGroupBoxes;
        POINT position_sq;

        bool DrawFrame(HDC mhdc);//绘制边框
        bool WorldBoxDown(void);//操作下落
        bool ExchangeBoxs(void);//下落相碰后,下落方块对象与(CBox* lpworldbox[10][20];         //指向每一个方块)
我上传了游戏程序exe,c++写出的单个exe就能运行。网站规定上传文件不超过1MB,所以代码上传不了,上传一部分又不能调试运行。游戏可能有bug,有bug请提示,在此感谢!

俄罗斯方块程序.rar (12.07 KB, 下载次数: 30)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 23:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表