第二章二维游戏的编程技术.ppt

  1. 1、本文档共141页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VC++游戏编程——游戏的编程技术 3.策略型人工智能 策略型人工智能是所有AI中最复杂的一种,常见的是棋盘类游戏就是这种策略的典范。这类游戏通常是由计算机根据目前的情况分析计算机所有可走棋步和可能获胜的几率,并计算玩家走棋步和至胜的几率,最后选择一个最佳走法。 VC++游戏编程——游戏的编程技术 VC++游戏编程——游戏的编程技术 (1)计算所有获胜组合: 60+60+2x(6+(5+4+3+2+1)x2)=192 VC++游戏编程——游戏的编程技术 (2)定义数组 设左图的排列为192种获胜方式中的第8种,那么初始化ptable时数组元素的值设置如下: ptable[0][0][8]=false ptable[0][1][8]=false ptable[2][1][8]=true ptable[3][2][8]=true ptable[4][3][8]=true ptable[5][4][8]=true ptable[6][5][8]=true ………. ptable[9][9][8]=false 如果在程序运行中玩家棋子占住了(3,2),那么计算机的ctable[3][2][8]的值便会被设为false,因为计算机的棋子不可能再下到(3,2)上,因此第8种的获胜组合对计算机来说就变的不可能了。反之,若计算机的棋子占住了(3,2)的位置,则玩家的ptable[3][2][8]元素的值也会被设为false。 win[2][192]数组用来记录玩家或计算机在其各个获胜组合中所填入的棋子数。假设玩家在数组中的下标为0,若玩家已在第8种获胜组合中填入了4颗棋子,那么win[0][8]便等于4,在运行时,程序会判断win[2][192]数组中是否有一个元素的值为5,若是则表示已经完成了5颗棋子的连线,玩家(或计算机)获胜。 VC++游戏编程——游戏的编程技术 (3)分数设置 在游戏中,为了让计算机能够决定下一步的最佳走法,必须先计算出计算机将棋子下到棋盘上任意一格的分数,而其中的最高分便是计算机下一步的最佳走法。如下图所示。 从图中我们可以看到,右边的棋子(粉色)阻绝了左边棋子在右边方向的连线,因此右边方格的分数为0。而在左边所可以达成连线的格子内,分数各不同,以最左上角的格子与绿色棋子达成连线的组合只有一种,因此把这一格子定为5,而右上方的那一格与棋子达成连线的组合有4种,所以该格子的分数为5x4=20,其他格子的分数依此类推。 VC++游戏编程——游戏的编程技术 若空格子可以与一颗棋子达成连线,每有一种获胜组合就将该格子的分数累加5,如果空格子可以与2、3、4颗棋子达成连线,那么所要加上的分数就更高了。计算机在下每颗棋子之前,必须按照这样的方法来计算每一个空格的分数,分数最高的那个格就是计算机下棋子的最佳位置。 VC++游戏编程——游戏的编程技术 (4)攻击与防守 在上述方式中,计算机实际上只是计算出了最佳的“攻击位置”,也就是让计算机可以达成连线的最佳进攻方式。在玩家快获胜的时候,计算机还是去找自己的最佳位置,也就是说计算机不会防守。为了让计算机能够知道玩家目前的状态,程序同样要计算玩家目前在所有空格子上的获胜分数,其中分数最高的就是玩家下棋子的最佳位置。如果玩家最佳攻击位置上的分数大于计算机最佳位置上的分数,那么计算机就将下一步的棋子摆在玩家的最佳攻击位置上以阻绝玩家的攻击,从而进行防守,否则,便将棋子下在自己的最佳位置上去进行攻击。 VC++游戏编程——游戏的编程技术 VC++游戏编程——游戏的编程技术 OnLButtonDown() OnTimer() ComTurn(): OnKeyDown():按下F1键从新开始 VC++游戏编程——游戏的编程技术 VC++游戏编程——游戏的编程技术 谢谢大家! 感谢您的观看! * 例如:如果要编写一个探险类的二维小游戏,一般需要实现这样的一个场景:代表玩家的小人在地图上移动,寻找各种物品。游戏采用简单的调度模块,即do-while循环来控制。渲染部分将游戏窗口分割为若干块,用地图填充。然后读取玩家的位置、方位、状态等信息,将角色画到地图上。交互部分检测玩家的输入,并据此更改相应的数据以便输出时使用。 * 3.MFC( Microsoft Foundation Class)是VC++中一套完整的函数库,使用MFC可以降低使用Windows API开发应用程序的难度。 4.在VC++中使用Windows API,只要在项目中设定所要使用的函数库并引用正确的头文件,就可以使用Windows API中

文档评论(0)

zxiangd + 关注
实名认证
内容提供者

本人从事教育还有多年,在这和大家互相交流学习

1亿VIP精品文档

相关文档