From 479818cfae62809788367fb04db1f9d6a509b498 Mon Sep 17 00:00:00 2001 From: manuel Date: Sun, 17 Apr 2011 22:04:04 +0200 Subject: more ai stuff --- pacman-c++/server.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/pacman-c++/server.cpp b/pacman-c++/server.cpp index 516d1f7..02055b7 100644 --- a/pacman-c++/server.cpp +++ b/pacman-c++/server.cpp @@ -4,6 +4,7 @@ #include "block.h" #include "anyoption.h" #include "bonuspoint.h" +#include "point.h" #include #include #include @@ -342,12 +343,13 @@ void Server::sendUpdate(Transmission::map_t map) void Server::aiCalculate(Actor *actor) { /* move as long as possible in one direction */ - if (m_actorMovements[actor->color()] != Actor::None) - return; + //if (m_actorMovements[actor->color()] != Actor::None) + // return; QPoint actorpos = CoordToMapPosition(actor->pos().toPoint()); QList directions; directions << Actor::Left << Actor::Right << Actor::Up << Actor::Down; + QList directions2(directions); // used if directions got empty QMutableListIterator i(directions); while(i.hasNext()) @@ -364,14 +366,25 @@ void Server::aiCalculate(Actor *actor) /* check if neighbour is a block */ Block *block = qgraphicsitem_cast(item); if (block != NULL && block->color() != actor->color()) + { + i.remove(); + directions2.removeAll(direction); + continue; + } + + /* if neighbour is not a point */ + BonusPoint *bpoint = qgraphicsitem_cast(item); + Point *point = qgraphicsitem_cast(item); + if (bpoint == NULL && point == NULL) { i.remove(); continue; } } - int rand = (int) (directions.size() * (qrand() / (RAND_MAX + 1.0))); - m_actorMovements[actor->color()] = directions.at(rand); + QList *ptr = (!directions.empty()) ? &directions : &directions2; + int rand = (int) (ptr->size() * (qrand() / (RAND_MAX + 1.0))); + m_actorMovements[actor->color()] = ptr->at(rand); } void Server::keyPressUpdate() -- cgit v1.2.3