游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1951|回复: 3

源创,首发,尝试制作逻辑引擎初步

[复制链接]

193

主题

870

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
发表于 2003-12-29 20:16:00 | 显示全部楼层 |阅读模式
     本文演示在
http://jx.jlu.edu.cn/down/game.rar
      源大哥在CSDN上说了游戏内部逻辑的重要性,我想能不能把逻辑引擎抽象出来,然后用脚本文件去构造游戏整个游戏呢?
     无知者无畏.我想了很久,也做了一点.
     游戏不过是一些对象,得到输入的事件,进行逻辑运算然后,反馈动作输出.根据这个想法我把游戏划分成了几个模块,
    (1)图形引擎以及windows窗口(直接用一个教程的源码)
    (2)Bob(图像变换器),用来处理游戏对象的显示画面,预留了3D接口.是游戏对象和引擎的桥梁.
   (3)EventManager 事件管理器,用来接收 键盘 鼠标 时间等消息,然后激活相应事件.事件是游戏对象的属性.
   (4)游戏对象,是游戏中任何一个元素,精灵,背景,鼠标箭头.他内部拥有一些属性和事件,如果事件被激活而且满足条件,这个对象就执行相应动作.对象可以拥有子对象.
以下是以后准备增加的
   (5)声音  (6)网络支持
   
    因为是刚刚开始,引擎只能接受键盘命令和执行一些简单动作,,全部源码等完善一点再给大家拿出来.
    以下是用引擎构造游戏的代码,以后应该从脚本文件中生成的,暂时只能硬编码了.

bool CGame::InitialiseEvent(HWND hWnd, HINSTANCE hInst)//这个就是构造游戏的函数
{       
//创建一个bob管理器
        this->m_pBC=new CBobController(m_pD3DDevice,m_nScreenWidth, m_nScreenHeight);
        DWORD id;
        DWORD ids[24];
        DWORD idso[24];

//创建一个bob2d对象(演示中的精灵),读取bmp
        m_pBC->BuildBob2DBegin("Textures\\action.bmp",D3DCOLOR_XRGB(0, 0, 0),24,40,210,200);
       
               m_pBC->BuildBob2DBmpSize(256,128);

              //分割图片
        for(int i=0;i<3;i++)
                for(int j=0;j<8;j++)
                {
                        m_pBC->BuildBob2DAddRect(id,j*24,i*40,24,40);
                        ids[i*8+j]=i*8+j;
                }
               
        for(i=0;i<3;i++)
                for(int j=0;j<8;j++)
                {
                        m_pBC->BuildBob2DAddRect(id,(j+1)*24,i*40,-24,40);
                        idso[i*8+j]=i*8+j+24;
                }
//生成动画       
                        m_pBC->BulidBob2DAddAnimation(id,&ids[20],4*sizeof(DWORD));
                        m_pBC->BulidBob2DAddAnimation(id,&ids[16],4*sizeof(DWORD));
                        m_pBC->BulidBob2DAddAnimation(id,&idso[16],4*sizeof(DWORD));
                        m_pBC->BulidBob2DAddAnimation(id,&idso[20],4*sizeof(DWORD));
                        //stand
                        m_pBC->BulidBob2DAddAnimation(id,&ids[13],2*sizeof(DWORD));
                        m_pBC->BulidBob2DAddAnimation(id,&ids[5],2*sizeof(DWORD));
                        m_pBC->BulidBob2DAddAnimation(id,&idso[5],2*sizeof(DWORD));
                        m_pBC->BulidBob2DAddAnimation(id,&idso[13],2*sizeof(DWORD));
                        //go
                        m_pBC->BulidBob2DAddAnimation(id,&ids[8],5*sizeof(DWORD));
                        m_pBC->BulidBob2DAddAnimation(id,&ids[0],5*sizeof(DWORD));
                        m_pBC->BulidBob2DAddAnimation(id,&idso[0],5*sizeof(DWORD));
                        m_pBC->BulidBob2DAddAnimation(id,&idso[8],5*sizeof(DWORD));
                       

                       
        m_pBob2D4=m_pBC->BuildBob2DLink(NULL);               
        m_pBC->BuildBob2DEnd();


//同样的设置鼠标,不过鼠标事件没有在引擎中实现,是通过另外的代码实现的
        m_pBC->BuildBob2DBegin("Textures\\Mouse.bmp",D3DCOLOR_XRGB(0, 0, 0),32,32);
        m_pBC->BuildBob2DBmpSize(32,32);
        m_pBobMouse=m_pBC->BuildBob2DLink(NULL);
        m_pBC->BuildBob2DEnd();

//建立事件管理器
        this->m_pEvent=new CEventManager(hWnd,hInst);
//建立一个游戏对象       
                this->m_pComponent=new CComponent;
//游戏对象连接到精灵
        this->m_pComponent->LinkBob(m_pBob2D4);

//以下是建立一个 当右箭头按键按下时候 精灵向右下走的事件
        //新的事件
        CTreeManager* pM=new CTreeManager;

               //增加动作,bob向右下移动每单位时间(4,3)
        pM->AddAction(new CActionBobMove(this->m_pComponent,new CList<int>(4),new CList<int>(3)));

               //另外的动作,bob播放向右下走的动画
        pM->AddAction(new CActionBobPlay(this->m_pComponent,new CList<int>(7)));
               //注册键盘事件               
        this->m_pEvent->AddKeyEvent("asd",DIK_RIGHT,pM,DEF_CHICK);
               //把事件连接到游戏对象
        this->m_pComponent->AddEvent(pM);

//键盘松开人物停止,播放站着的动画
        pM=new CTreeManager;
        pM->AddAction(new CActionBobMove(this->m_pComponent,new CList<int>(0),new CList<int>(0)));
        pM->AddAction(new CActionBobPlay(this->m_pComponent,new CList<int>(3)));
        this->m_pEvent->AddKeyEvent("asd",DIK_RIGHT,pM,DEF_UP);
        this->m_pComponent->AddEvent(pM);

//以下省略 重复生成另外3个方向的动画 和esc按键退出的事件


    以上看到的就是构造演示动画的代码,虽然看起来还是很罗嗦,但是我相信如果能放到脚本文件中用MFC的编辑起来编辑的话,就不很麻烦.
    你会看到当两个方向键同时按的话会有毛病,如国加一个状态变量来保存就能解决了.
    以前看到说外国人写的用XML直接写游戏的软件,估计也差不多把.呵呵~
    还有很多想说的,等大体上完善点再说吧,祝各位进步,赚钱.祝我自己考试不要挂太多了
[em17]明天还有期末考啊 [em17]

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20468
发表于 2003-12-29 20:21:00 | 显示全部楼层

Re:源创,首发,尝试制作逻辑引擎初步

呵呵,先认真把考试给办了,一些基础知识对将来的开发还是很有用的。加油!

14

主题

63

帖子

63

积分

注册会员

Rank: 2

积分
63
发表于 2003-12-29 20:53:00 | 显示全部楼层

Re:源创,首发,尝试制作逻辑引擎初步

逻辑引擎 应该是纯C++ 写的纯逻辑运算,和图形,声音,网络都无关才对。。
  你看你有没能力分开了。。

193

主题

870

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
 楼主| 发表于 2003-12-29 21:30:00 | 显示全部楼层

Re:源创,首发,尝试制作逻辑引擎初步

我都是初学了
等下一个版本就会改进了!
谢谢你的提醒~
可能逻辑引擎只是这里的 游戏对象部分,
bob是图形引擎的桥接,
事件管理器是消息处理引擎。其实如果规范一下各模块的接口应该是可以分开的。比如要更换图形引擎只要改变bob的部分接口,声音,网络也应该这样实现。

这只是个试验的东东了,以后争取改进。

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

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-24 20:46

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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