【Visual C++】游戏开发笔记十六 讲解一个完整的回合制游戏demo

本文介绍了如何使用Visual C++创建一个回合制游戏demo,重点讲解了行为型游戏AI的设计,包括怪物和玩家的攻击方式。通过示例代码展示了如何运用if-else和switch-case实现AI的决策过程。此外,还提到了如何扩展游戏系统以增加趣味性和挑战性。
摘要由CSDN通过智能技术生成
               


本系列文章由zhmxy555编写,转载请注明出处。

文章链接  http://blog.csdn.net/zhmxy555/article/details/7447864

作者:毛星云    邮箱: happylifemxy@qq.com  


 

这节笔记的主要内容是介绍一个完整的回合制游戏demo,而这个demo里面主要突出了游戏里AI的各种思考与行为的方式.这样的通过计算机角色本身的判断思考,然后产生对应行为的AI称作行为型游戏AI。

如果对AI基础不太了解的朋友,请移步:


【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI


首先,我们来了解这种行为型AI的设计方法。

游戏程序中计算机角色的思考与行为,实际上是对各种不同事件进行分析思考,然后根据不同的情况作出相应的反应。但如何对发生的条件进行判断,并作出相应的反应呢?

对,我们可以利用“if-else”条件句以及“switch-case”语句这类的判断式来完成。

通常情况下,设计此类AI,会涉及到连串的条件判断句,简单数学运算,及一些数据结构的知识。



下面我们就来具体讲解这个demo涉及到的一些知识点:




一、AI怪物攻击与思考方式设计



例如今天我们要展示的这个回合制游戏demo里的AI,就有如下几种行为:

(1)利爪攻击

(2)闪电链攻击

(3)致命一击

(4)使用梅肯斯姆回复生命值

(5)逃跑


那么我们可以根据以上设计的怪物行为,设计以下一段算法,用来模拟怪物对战时的思考与行为的方式:

if(monster.nHp > 20//生命值大于20{
   if(rand()%5!= 1)            //进行利爪攻击概率4/5else       //进行闪电链攻击概率1/5}else  //生命值小于20{
   switch(rand()%5){
   case 0//利爪攻击break;case 1//释放闪电链break;case 2//致命一击break;case 3//使用梅肯斯姆回复  ;break;case 4//逃跑if(1== rand()%3 )     //逃跑成功几率1/3//逃跑成功else//逃跑失败break;}}


这段代码中,利用if-else判断式判断怪物生命值,然后怪物有4/5的几率释放普通的利爪攻击,有1/5的几率释放闪电链魔法攻击,当怪物重伤生命值小于20点时,也有一定的几率逃跑。

以上的利用“if-else”、“switch”语句,使计算机角色进行事件情况判断,然后写出相应的动作实现代码,这就是行为型游戏AI

设计的核心精神。





二,玩家角色攻击方式设计


然后我们再来设计一下玩家的攻击技能。

今天放出的这个demo里我给人物设定了两个技能,一个主动的普通攻击技能“无敌斩”,伤害计算公式为damage = rand()%10 + player.lv*player.w(player.lv为角色等级,player.w为攻击系数)。

而被动技能为可以有一定几率打出4倍暴击伤害的“恩赐解脱”,这个技能是Dota里面幻影刺客的大招(呵呵,浅墨玩dota时可是超级幻刺控~~)。

其实暴击的实现方式很简单,就是用if条件句进行概率的判断(浅墨在这里利用4==rand( )%5来设定暴击概率为20%),如果判断成功就将“倍率x普通攻击”作为damage的值。

(哈哈,浅墨专门找到了Dota里面这两个技能的图标以及用到了这个demo里面,具体效果图在下面)


下面贴出实现人物技能的代码:

if (4==rand()%5)                   // 20%几率触发幻影刺客的大招,恩赐解脱,4倍暴击伤害{damage = 4*(rand()%10 + player.lv*player.w);monster.nHp -= (int)damage;sprintf(str,"恩赐解脱触发,这下牛逼了,4倍暴击...对怪物照成了%d点伤害",damage);} else{damage = rand()%10 + player.lv*player.w;monster.nHp -= (int)damage;sprintf(str,"玩家使用了无敌斩,伤害一般般...对怪物照成了%d点伤害",damage);}




三、完整的回合制游戏源代码


基础部分就讲解完了,下面就贴出注释详细的,完整的回合制游戏demo的代码吧:

#include "stdafx.h"#include <stdio.h>//定义一个结构体struct chr{
     int  nHp; int  fHp; int  lv; int  w; int  kind;};//全局变量声明HINSTANCE hInst;HBITMAP bg,sheep,girl,skill,skillult,slash,magic,recover,game;HDC  hdc,mdc,bufdc;HWND hWnd;DWORD tPre,tNow;int  pNum,f,txtNum;bool attack,over;chr  player,monster;char text[5][100];//全局函数声明ATOM    MyRegisterClass(HINSTANCE hInstance);BOOL    InitInstance(HINSTANCE, int);LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);void    MyPaint(HDC hdc);void    MsgInsert(char*);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值