游戏人工智能演示(0)框架
2008-06-10 12:29
113 查看
游戏人工智能演示(0)框架网易广州 赖勇浩(http://blog.csdn.net/lanphaday)总说 本系列文章用以描述如何构建游戏人工智能这一课题,它是我创建的开源项目《游戏人工智能演示》(http://code.google.com/p/aidemo)的配套文档,随着项目的推进而逐步完善。 《游戏人工智能演示》(以下简称aidemo)是正在进行中的项目,它展示了游戏人工智能的开发过程,伴随着它的发展,重构不断地进行。比如前一二个项目会使用最直观的、最简单的实现;接下来会重构到策略模式;再接下来会应用有限状态机;再接下来会实现群体的智能……它将一直提供足够吸引眼球的变化,敬请关注。预备知识1) Python 语言基础。起码要懂得 Python 语法和常用标准库用法。2) wxPython 方面的知识不是必须的,实际上,项目中关于 wxPython 的内容极少,并且一定会讲得比较仔细。不过,你必须理解消息机制。3) 关于向量和矩阵运算的基础,如果有些不懂,现在就补上也来得及。推荐使用Twinsen编写的《向量几何在游戏编程中的使用》系列文章,地址:http://blog.csdn.net/popy007/category/208696.aspx 。4) 如果你懂一些设计模式,对阅读代码会非常有帮助。5) 本文档假设你了解如果编写一个运行在图形用户界面(GUI)的游戏框架,至少应了解什么叫帧率。主循环与双缓冲 基于消息机制的 GUI 程序肯定有一个主循环,在这个循环中不断地处理输入,并通过合适的途径输出处理结果。一个典型的 wxPyhon 程序并不需要程序员关心主循环,但因为我们编写的是一个无时无刻不在刷新界面的游戏框架,所以有必要了解游戏的主循环: def MainLoop(self): evtloop = wx.EventLoop() old = wx.EventLoop.GetActive() wx.EventLoop.SetActive(evtloop) while self.keepGoing: # 逻辑处理 self.Logic() # 处理消息 while evtloop.Pending(): evtloop.Dispatch() # 重画窗口 self.GetTopWindow().Refresh() # 做一些杂项操作 self.Misc() wx.EventLoop.SetActive(old)函数MainLoop()定义了wxPython 新的事件循环:先运行游戏逻辑,然后分发消息,再重画窗口,最后做一些未定义的杂项操作。self.GetTopWindow().Refresh(),这行代码要求 GUI 立刻刷新。Logic()和Misc()都是没有定义的模板方法,每一个实例都应该继承GameApp,并实现这些模板方法。 另外需要说一下的是双缓冲,双缓冲是为了解决刷新界面时的闪烁而采用的一种绘图机制。得益于 wxWidgets 的良好封装,我们在使用 wxPython 实现双缓冲是如此简单:只需要把在EVT_PAINT(相当于 MFC 里的 WM_PAINT)响应函数里构造 wx.PaintDC 实例的代码改为构造wx.BufferedPaintDC即可,比用 MFC 可是简单得多了。完成后的 OnPaint()函数大约是这样的: def OnPaint(self, evt): dc = wx.BufferedPaintDC(self, self.buffer) self.PrepareDC(dc) dc.BeginDrawing() self.DoPaint(dc) self.DrawFps(dc) self.DrawAbout(dc) dc.EndDrawing()简单吧,这就是双缓冲了,很好地解决了界面闪烁问题。其中DoPaint()函数是一个未实现的模板方法,咳,是的,你要是懂点设计模式,会好一点。程序框架 好了,是时候该看看总体的架构了。因为在 GameApp 和 GameFrame 两个基类里定义了几个模板方法,所以每一个 demo 实现都必须有继承自它们的自己的 App 类和 Frame 类,并实现基类定义的模板方法。至此,框架的模型就呼之欲出了:
咳,很简单,正是这样,源码也只有几行,没啥好说了。开发平台 aidemo 主要在一台安装了 MS Window200 Pro 操作系统的 PC 机上进行开发。这台机器有一枚 3.0 GHz 的 奔4 处理器和1 G 的内存,显卡芯片是 Nvideo 的 5700 。在测试时,也运行于一台安装有 ubuntu 操作系统的 IBM Thinkpad X32 笔记本电脑,和一台安装有 MS Windows XP home操作系统的 Samsung X05 笔记本电脑。运行截屏
下期预告让智能体能够追逐(Chase)某一目标是游戏中最常见的人工智能之一,下期将讲述一个追逐鼠标的怪物的实现,敬请关注。
相关文章推荐
- 游戏人工智能演示(0)框架
- 介绍几个流行的HTML5/CSS3 演示(PPT)框架
- ruby 网页开发框架及其源码加密技术演示,开始提供下载
- 咏南开发框架演示下载
- DirectX11 演示程序框架
- 【自然框架】——重开在线演示
- ITK 配准框架中的 Subject/Observer 模式及优化过程模拟演示-2
- 【自然框架】稳定版beta1的Demo —— 四:角色管理。另外 在线演示 终于搞定了
- 无需Root也能Hook?——Depoxsed框架演示
- 用户界面框架jQuery EasyUI示例大全之进度栏、搜索框及表单演示
- C# 进程间通信框架源码和演示
- 【自然框架】 权限 的视频演示(二): 权限到字段、权限到记录
- 最好的 HTML5/CSS3 演示(PPT)框架
- 贵美主页框架演示
- Farseer.net轻量级开源框架 入门篇:增、删、改、查操作演示
- NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示
- Python Web框架Tornado的异步处理代码演示样例
- 用户界面框架jQuery EasyUI示例大全之切换按钮和分页演示
- 游戏人工智能演示(0)框架
- C#开发框架-钢铁贸易进销存系统演示视频