From 0f111967d746b5d9d74f62ad5f1415ab156ff449 Mon Sep 17 00:00:00 2001 From: totycro Date: Sun, 10 Apr 2011 01:31:55 +0200 Subject: transmit game score --- pacman-c++/actor.cpp | 5 +++-- pacman-c++/actor.h | 8 ++++++++ pacman-c++/mainwidget.cpp | 46 ++++++++++++++++++++-------------------------- pacman-c++/mainwidget.h | 14 ++++++-------- pacman-c++/pacman.proto | 6 ++++++ pacman-c++/server.cpp | 20 +++++++++++++++++--- pacman-c++/util.cpp | 4 ++-- 7 files changed, 62 insertions(+), 41 deletions(-) (limited to 'pacman-c++') diff --git a/pacman-c++/actor.cpp b/pacman-c++/actor.cpp index 51d3818..bd50a3c 100644 --- a/pacman-c++/actor.cpp +++ b/pacman-c++/actor.cpp @@ -11,7 +11,8 @@ static QVariant myBooleanInterpolator(const bool &start, const bool &end, qreal } Actor::Actor(Color::Color color, bool local, QGraphicsItem *parent) - : PixmapItem(parent), m_color(color), m_direction(Actor::None), m_local(local) + : PixmapItem(parent), m_color(color), m_direction(Actor::None), m_local(local), + m_roundPoints(0), m_gamePoints(0) { m_pix = ":/" + QString("actor%1").arg((m_color >> 1) + 1); /* DON'T set any pixmap here. we've a pixmap in the animation @@ -186,7 +187,7 @@ bool Actor::isMoving() } void Actor::enqueue() -{ +{ if (isMoving()) AudioPlayer::self()->enqueue(AudioPlayer::WakaWaka); } diff --git a/pacman-c++/actor.h b/pacman-c++/actor.h index 77a5b34..965d240 100644 --- a/pacman-c++/actor.h +++ b/pacman-c++/actor.h @@ -33,6 +33,12 @@ public: void die(); void eatingCherry(); + unsigned int getRoundPoints() { return m_roundPoints; } + unsigned int getGamePoints() { return m_gamePoints; } + + void addRoundPoints(unsigned int amount) { m_roundPoints += amount; } + void finishRound() { m_gamePoints += m_roundPoints; m_roundPoints = 0; } + private slots: void enqueue(); @@ -43,6 +49,8 @@ private: PixmapItem m_icon; bool m_local; + unsigned int m_roundPoints, m_gamePoints; + QList m_images; QList m_eating; QParallelAnimationGroup *m_moving; diff --git a/pacman-c++/mainwidget.cpp b/pacman-c++/mainwidget.cpp index b140871..c21e81d 100644 --- a/pacman-c++/mainwidget.cpp +++ b/pacman-c++/mainwidget.cpp @@ -65,6 +65,7 @@ void MainWidget::createGui() window->setAlignment(Qt::AlignLeft | Qt::AlignTop); window->setFixedSize(Constants::map_size_pixel.width, Constants::map_size_pixel.height); window->setWindowFlags(window->windowFlags() & ~Qt::WindowMaximizeButtonHint); + window->setFocusPolicy(Qt::NoFocus); layout->addLayout(scoreLayout); layout->addWidget(window); @@ -76,35 +77,27 @@ void MainWidget::createGui() setLayout(layout); } -void MainWidget::updateScore() +void MainWidget::updateScore(const ProtoBuf::MapUpdate& packet) { - QMapIterator i(m_actors); - while (i.hasNext()) - { - i.next(); - if (i.key() > Color::max) - { - /* player #4 isn't supported in score */ - Q_ASSERT(false); - continue; - } - int id = (i.key() >> 1); - QLabel *turnPointsLbl = - dynamic_cast(m_playerScoreLayouts.at(id)->itemAtPosition(0,1)->widget()); - QLabel *allPointsLbl = - dynamic_cast(m_playerScoreLayouts.at(id)->itemAtPosition(1,1)->widget()); - turnPointsLbl->setText(QString::number(id)); - allPointsLbl->setText(QString::number(id)); - } + QLabel *turnPointsLbl; + QLabel *allPointsLbl; + + turnPointsLbl = dynamic_cast(m_playerScoreLayouts.at(0)->itemAtPosition(0,1)->widget()); + allPointsLbl = dynamic_cast(m_playerScoreLayouts.at(0)->itemAtPosition(1,1)->widget()); + turnPointsLbl->setText(QString::number(packet.round_points_red())); + allPointsLbl->setText(QString::number(packet.game_points_red())); + + turnPointsLbl = dynamic_cast(m_playerScoreLayouts.at(1)->itemAtPosition(0,1)->widget()); + allPointsLbl = dynamic_cast(m_playerScoreLayouts.at(1)->itemAtPosition(1,1)->widget()); + turnPointsLbl->setText(QString::number(packet.round_points_blue())); + allPointsLbl->setText(QString::number(packet.game_points_blue())); + + turnPointsLbl = dynamic_cast(m_playerScoreLayouts.at(2)->itemAtPosition(0,1)->widget()); + allPointsLbl = dynamic_cast(m_playerScoreLayouts.at(2)->itemAtPosition(1,1)->widget()); + turnPointsLbl->setText(QString::number(packet.round_points_green())); + allPointsLbl->setText(QString::number(packet.game_points_green())); } -void MainWidget::updateMap(const Transmission::map_t& map) -{ - SceneHolder::updateMap(map); - updateScore(); -} - - Transmission::field_t MainWidget::translateKey(int key, int def) { switch(key) @@ -166,6 +159,7 @@ void MainWidget::tick() } } updateMap(map); + updateScore(packet); } } diff --git a/pacman-c++/mainwidget.h b/pacman-c++/mainwidget.h index 266f329..bd83d5f 100644 --- a/pacman-c++/mainwidget.h +++ b/pacman-c++/mainwidget.h @@ -4,6 +4,7 @@ #include "sceneholder.h" #include "constants.h" #include "pixmapitem.h" +#include "pacman.pb.h" #include #include #include @@ -23,21 +24,18 @@ protected: virtual void keyPressEvent(QKeyEvent* ); virtual void keyReleaseEvent(QKeyEvent* ); - virtual void updateMap(const Transmission::map_t& map); +private slots: + void startGame(); + void playerScoreClicked(); + void tick(); private: void createGui(); void createMenu(); - void updateScore(); + void updateScore(const ProtoBuf::MapUpdate&); bool isRunning(); Color::Color connectToServer(); -private slots: - void startGame(); - void playerScoreClicked(); - void tick(); - -private: // GUI elements needed in the progress of the game QList m_playerScoreLayouts; diff --git a/pacman-c++/pacman.proto b/pacman-c++/pacman.proto index ae8f966..129d07f 100644 --- a/pacman-c++/pacman.proto +++ b/pacman-c++/pacman.proto @@ -6,6 +6,12 @@ message KeyPressUpdate { message MapUpdate { repeated uint32 field = 1 [packed=true]; + required uint32 round_points_red = 2; + required uint32 round_points_green = 3; + required uint32 round_points_blue = 4; + required uint32 game_points_red = 5; + required uint32 game_points_green = 6; + required uint32 game_points_blue = 7; } message WhoAmI { diff --git a/pacman-c++/server.cpp b/pacman-c++/server.cpp index 7e467e5..0a84561 100644 --- a/pacman-c++/server.cpp +++ b/pacman-c++/server.cpp @@ -52,8 +52,11 @@ Transmission::map_t Server::calculateUpdates() } // - if(dynamic_cast(visualMap[newMapPosition.x()][newMapPosition.y()]) != 0) { - continue; + if (0 <= newMapPosition.x() && newMapPosition.x() < visualMap.size() && + 0 <= newMapPosition.y() && newMapPosition.y() < visualMap[newMapPosition.x()].size()) { + if(dynamic_cast(visualMap[newMapPosition.x()][newMapPosition.y()]) != 0) { + continue; + } } // @@ -75,6 +78,12 @@ QSharedPointer< ProtoBuf::MapUpdate > Server::createUpdatePacket(Transmission::m updatePacket->add_field(map[x][y]); } } + updatePacket->set_round_points_red(m_actors.value(Color::red)->getRoundPoints()); + updatePacket->set_game_points_red(m_actors.value(Color::red)->getGamePoints()); + updatePacket->set_round_points_green(m_actors.value(Color::green)->getRoundPoints()); + updatePacket->set_game_points_green(m_actors.value(Color::green)->getGamePoints()); + updatePacket->set_round_points_blue(m_actors.value(Color::blue)->getRoundPoints()); + updatePacket->set_game_points_blue(m_actors.value(Color::blue)->getGamePoints()); //qDebug() << "field sz "<< updatePacket->field_size(); return updatePacket; } @@ -85,9 +94,14 @@ void Server::waitForClientConnections() // server must stay alive as long as sockets (qt parent mem mechanism) tcpSrv->listen(QHostAddress::Any, Constants::port); +#define SINGLE + Color::Color playerColors[3] = { Color::red, Color::blue, Color::green }; - //for (unsigned int i=0; iwaitForNewConnection(-1); Q_ASSERT(connectionAvailable); QTcpSocket *socket = tcpSrv->nextPendingConnection(); diff --git a/pacman-c++/util.cpp b/pacman-c++/util.cpp index ceba2b8..23826f7 100644 --- a/pacman-c++/util.cpp +++ b/pacman-c++/util.cpp @@ -67,8 +67,8 @@ namespace Util { map[0][0] |= Transmission::bonuspoint; map[1][0] |= Color::red | Transmission::pacman | Transmission::direction_right; - //map[2][0] |= Color::blue | Transmission::pacman | Transmission::direction_up; - //map[3][0] |= Color::green | Transmission::pacman | Transmission::direction_down; + map[23][0] = Color::blue | Transmission::pacman | Transmission::direction_none; + map[24][0] = Color::green | Transmission::pacman | Transmission::direction_none; /* auto place normal points*/ for (unsigned int x = 0; x < Constants::map_size.width; ++x) -- cgit v1.2.3