From e373442901064d07791c9739daa380acb1dfbb8c Mon Sep 17 00:00:00 2001 From: manuel Date: Mon, 18 Apr 2011 01:43:28 +0200 Subject: few bot improvements --- pacman-c++/sceneholder.cpp | 12 ++++++------ pacman-c++/server.cpp | 19 +++++++++++++++---- pacman-c++/server.h | 2 +- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/pacman-c++/sceneholder.cpp b/pacman-c++/sceneholder.cpp index 6879ea1..578b0df 100644 --- a/pacman-c++/sceneholder.cpp +++ b/pacman-c++/sceneholder.cpp @@ -138,14 +138,14 @@ void SceneHolder::updateMap(const Transmission::map_t& map, const unsigned int x Actor::Movement direction = Util::transmissionMovementToActor( cur & Transmission::direction_mask); /* WARNING: do NOT add actor to visualMap as visualMap-items may - * get deleted during update and actors are referenced in_mactors too - * if you REALLY need that you need to changed updateMap so that all actors - * will be moved before any new items get allocated (totally untested) - */ + * get deleted during update and actors are referenced in_mactors too + * if you REALLY need that you need to changed updateMap so that all actors + * will be moved before any new items get allocated (totally untested) + */ actor->move(direction); /* that's kind a hack but working right now - * I think that will fall on our's hat sooner or later - */ + * I think that will fall on our's hat sooner or later + */ if (!(cur & Transmission::empty)) actor->stopEating(); qDebug() << "[SceneUpdate] actor moves: color=" << color diff --git a/pacman-c++/server.cpp b/pacman-c++/server.cpp index 02055b7..65a8f8b 100644 --- a/pacman-c++/server.cpp +++ b/pacman-c++/server.cpp @@ -56,7 +56,7 @@ void Server::tick() { //qDebug() << "[Tick] Doing server update"; foreach(Color::Color color, m_bots) - aiCalculate(m_actors[color]); + botCalculate(m_actors[color]); Transmission::map_t map = calculateUpdates(); updateMap(map); @@ -340,16 +340,27 @@ void Server::sendUpdate(Transmission::map_t map) } } -void Server::aiCalculate(Actor *actor) +void Server::botCalculate(Actor *actor) { /* move as long as possible in one direction */ //if (m_actorMovements[actor->color()] != Actor::None) // return; QPoint actorpos = CoordToMapPosition(actor->pos().toPoint()); + + /* first make list of possible directions based on current actor position */ QList directions; - directions << Actor::Left << Actor::Right << Actor::Up << Actor::Down; - QList directions2(directions); // used if directions got empty + if (actorpos.x() > 0) + directions.append(Actor::Left); + if (actorpos.x() < visualMap.size() - 1) + directions.append(Actor::Right); + if (actorpos.y() > 0) + directions.append(Actor::Up); + if (actorpos.y() < visualMap[actorpos.x()].size() - 1) + directions.append(Actor::Down); + + /* copy of directions: used if there's no good direction based on rules */ + QList directions2(directions); QMutableListIterator i(directions); while(i.hasNext()) diff --git a/pacman-c++/server.h b/pacman-c++/server.h index a4bbe58..8d40f27 100644 --- a/pacman-c++/server.h +++ b/pacman-c++/server.h @@ -36,7 +36,7 @@ protected: QPoint addRandomPoint(Transmission::map_t map, Transmission::field_t type = Transmission::bonuspoint); void colorizeBlocks(Transmission::map_t map); - void aiCalculate(Actor *actor); + void botCalculate(Actor *actor); protected: QMap m_clientConnections; -- cgit v1.2.3