泡泡堂开发文档.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
人机对战版泡泡堂 摘要:本游戏模仿盛大网络版泡泡堂,使用C和windows api编写完成,使用到了碰撞检测,人工智能技术。而人工智能部分又使用到A寻路算法,有限状态机。 关键词:绘图,碰撞检测,人工智能。 1. 引言: 实验主要为了掌握基于windows api 下的C语言图像编程,掌握图像的绘制以及windows消息传递机制。选用熟悉的泡泡堂可以去除其它无关因素,从而能迅速投入学习。 本游戏大概于2001被盛大游戏公司所做。 游戏把数据处理和图形绘制完全分离.玩家的输入状态使用windows消息处理机制接受.另外使用SetTimer模拟多线程的方法类处理不同的数据和绘图。 A.数据处理大体为:接受玩家的输入,针对相应的输入状态判断输入状态是否有效(如碰撞检测,泡泡放置),从而对数据进行不同的修改。B.人工电脑AI:没有直接修改游戏数据,而是模拟人的输入,使用有限状态机判断模拟应该输入什么,而后改输入状态数据。主要逻辑包括所站区域是否安全,不安全便逃跑;是否有道具可以捡,有便去拾取;是否有障碍物可炸,有便去炸;以及根据人物的方位做相应的操作。C.绘制图像:贴背景图,按照特定的顺序贴大小为40*40的各类图片。D.系统对游戏数据的处理,如时间的变化带来的数据变化如泡泡的生命变化,人物是否被炸到及死亡等。 2. 总体框架: 先初始化各种资源,然后游戏开始,之后定时选择处理绘图或者游戏数据。选择到游戏数据处理时,使用消息处理机制接受玩家信息,判断消息类型并处理,接着是获取AI的返回信息。接着根据按键和AI返回的信息对游戏人物数据进行修改,然后是系统对数据的处理,最后判断人物是否死亡,死亡则重新开始,否则跳转到定时选择处理绘图或者游戏数据重新继续下一轮的处理。流程图如下: 窗口及各类数据初始化 窗口及各类数据初始化 游戏开始 绘图或数据处理选择 图像绘制 玩家输入 退出按键 消息处理 获取AI本身输入状态 释放各种资源并退出 是否可行 人物数据修改 游戏系统对数据处理 玩家死亡 游戏结束 数据重新初始化 图1:游戏流程图 3.游戏具体功能实现: 3.1.背景图加载 为了使游戏图像优美,背景图是十分必要的。 先加载图片资源,然后在每次绘图的时候首先绘制此背景图: 图1:游戏背景图 代码实现: InitImage(hdc, imageDC, bBG, cBG, 800, 600,Pic\\BG.bmp); void InitImage(HDC hdc, HDC imageDC , HDC bImage, HDC cImage, int width, int height, char fileName[]){ bImage = CreateCompatibleDC(hdc); cImage = CreateCompatibleDC(hdc); HBITMAP tempImage = (HBITMAP)LoadImage(NULL, fileName, IMAGE_BITMAP, width, height, LR_LOADFROMFILE); SelectObject(imageDC, tempImage); SelectObject(bImage, CreateCompatibleBitmap(hdc, width, height)); SelectObject(cImage, CreateCompatibleBitmap(hdc, width, height)); for(int i=0; iwidth; i++) { for(int j=0; jheight; j++){ if(GetPixel(imageDC, i, j) != RGB(255, 0, 255)) BitBlt(bImage, i, j, 1, 1, imageDC, i, j, SRCCOPY); else SetPixel(cImage , i, j, RGB(255, 255, 255)); }} DeleteObject(tempImage);} BitBlt(bufHdc, 0 ,0, 800, 600, bBG, 0, 0, SRCCOPY); 3.2.定时处理绘图,数据 采用SetTimer模拟多线程成处理绘图和数据。通过调用各个功能的函数接口实现:图像绘制;处理玩家,AI的输入并对数据修改;游戏系统对数据的修改;游戏的开始,结束,和再游戏中状态。代码如下: void CALLBACK TimerProc(HWND hwnd, UINT nMsg, UINT nTimerid, DWORD dwTime){ HDC hdc; hdc = GetDC(h

文档评论(0)

yurixiang1314 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档