⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wander.cpp

📁 C人工智能游戏开发的一些实例源代码 C Game development in artificial intelligence source code of some examples
💻 CPP
字号:

#include "character.h"
#include "Wander.h"
#include "gametime.h"
#include "util.h"

Wander::Wander()
{
    m_name      = "Wander"; // must match class name
    m_owner     = NULL;
}

void Wander::init   ( IEOwner * owner )
{
    m_owner = dynamic_cast<Character *> (owner);

    m_minWanderTime = 5.0f;
}

bool Wander::start ()
{
    m_state = Go;

    m_owner->animStart ( CA_Walk );

    printf ( "%s starts walking.\n", m_owner->getName() );

    m_dirClock  = 0.0f;
    newDirection();

    m_owner->setMotionSpeed ( m_owner->getWalkSpeed() );

    return false;
}

bool Wander::update () 
{
    switch ( m_state )
    {

    case Go:
        m_owner->move ();

        m_dirClock += GameTime::dt;

        if ( m_dirClock > m_timeChangeDir )
        {
            newDirection();
            m_dirClock = 0.0f;
        }

        if ( m_owner->inNewPos() )
        {
            int x, y;
            m_owner->getPos ( x, y );
            printf ( "%s wandering at %d %d\n",
                m_owner->getName(), x, y );
        }

        m_owner->burnEnergy();

        break;
    }

    return true;
}

bool Wander::finish ()
{
    return true;
}

IEOwner * Wander::getOwner ()
{
    return m_owner;
}

const char * Wander::getName()
{
    return m_name.c_str();
}

void Wander::newDirection ()
{
    float r = frand();

    int xdir, ydir;

    // x direction
    if ( r < 0.5f )
    {
        r = frand();

        if ( r < 0.5f )
            xdir = 1;
        else
            xdir = -1;

        ydir = 0;
    }

    // else y direction
    else 
    {
        r = frand();

        if ( r < 0.5f )
            ydir = 1;
        else
            ydir = -1;

        xdir = 0;
    }

    //printf ( "changed dir %d %d\n", xdir, ydir );

    // figure the time to change next direction
    r = frand();

    m_timeChangeDir = m_minWanderTime + ( r * 10.0f );

    m_owner->setDirection ( xdir, ydir );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -