zoukankan      html  css  js  c++  java
  • PacMan开发-敌人的行为

    在“吃豆子”游戏中,计划将有3种不同类型的敌人。

    · 松散型:在碰到墙壁后才会回头

    · 守卫型:当敌人和主人公“大嘴”处在同一行或者是同一列后才会引起警觉接近大嘴。

    · 扰乱性:不断的接近大嘴。

    这三种敌人分别用以下的函数实现:

    //AI人工智能处理
    void RedOne::MakeDecision(bool b)
    {
    	int i = rand();
    	if (b)//碰到墙壁,改变方向
    	{
    		//逆时针
    		if (i % 4 == 0)
    		{
    			tw = UP ? twCommand = LEFT : twCommand = UP;
    		}
    		else if (i % 3 == 0)
    		{
    			tw = DOWN ? twCommand = RIGHT: twCommand = DOWN;
    		}
    		else if (i % 2 == 0)
    		{
    			tw = RIGHT ? twCommand = UP : twCommand = RIGHT;
    		}
    		else
    		{
    			tw = LEFT ? twCommand = DOWN : twCommand = LEFT;
    		}
    		return;
    	}
    }
    void BlueOne::MakeDecision(bool b)
    {
    	const int DR = this->dRow - player->GetRow();
    	const int DA = this->dArray - player->GetArray();
    	if (!b&&DR == 0)
    	{
    		if (DA <= BLUE_ALERT&&DA > 0)
    		{
    			twCommand = LEFT;
    			return;
    		}
    		if (DA < 0 && DA >= -BLUE_ALERT)
    		{
    			twCommand = RIGHT;
    			return;
    		}
    	}
    	if (!b&&DA == 0)
    	{
    		if (DR <= BLUE_ALERT&&DR > 0)
    		{
    			twCommand = UP;
    			return;
    		}
    		if (DR < 0 && DR >= -BLUE_ALERT)
    		{
    			twCommand = DOWN;
    			return;
    		}
    	}
    	RedOne::MakeDecision(b);
    }
    void YellowOne::MakeDecision(bool b)
    {
    	const int DR = this->dRow - player->GetRow();
    	const int DA = this->dArray - player->GetArray();
    	if (!b)
    	{
    		if (DR*DR > DA*DA)
    		{
    			if (DA > 0)
    			{
    				twCommand = LEFT;
    				return;
    			}
    			else if (DA < 0)
    			{
    				twCommand = RIGHT;
    				return;
    			}
    		}
    		else
    		{
    			if (DR>0)
    			{
    				twCommand = UP;
    				return;
    			}
    			if (DR < 0)
    			{
    				twCommand = DOWN;
    				return;
    			}
    		}
    	}
    	RedOne::MakeDecision(b);
    }

    在Enermy类中,用一个函数来实现人工智能的方式:

    void virtual MakeDecision(bool b) = 0; //AI实现



    @ Mayuko

  • 相关阅读:
    Python3之format
    xml文件整理
    某系统采集2018
    sublime+python3 中文环境
    python3文本读取与写入常用代码
    redis3.0集群使用发现的一些问题
    mysql字符集
    redis3.0集群搭建
    安装Maven、nexus
    一键安装mysql5.6
  • 原文地址:https://www.cnblogs.com/mayuko/p/4567513.html
Copyright © 2011-2022 走看看