Hello community, here is the log from the commit of package knavalbattle for openSUSE:Factory checked in at 2014-01-27 11:18:04 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/knavalbattle (Old) and /work/SRC/openSUSE:Factory/.knavalbattle.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "knavalbattle" Changes: -------- --- /work/SRC/openSUSE:Factory/knavalbattle/knavalbattle.changes 2013-12-19 13:19:02.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.knavalbattle.new/knavalbattle.changes 2014-01-27 11:18:05.000000000 +0100 @@ -1,0 +2,7 @@ +Sat Jan 11 16:01:44 UTC 2014 - [email protected] + +- Update to 4.12.1 + * KDE 4.12.1 release + * See http://www.kde.org/announcements/announce-4.12.1.php + +------------------------------------------------------------------- Old: ---- knavalbattle-4.12.0.tar.xz New: ---- knavalbattle-4.12.1.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ knavalbattle.spec ++++++ --- /var/tmp/diff_new_pack.CBMxcl/_old 2014-01-27 11:18:06.000000000 +0100 +++ /var/tmp/diff_new_pack.CBMxcl/_new 2014-01-27 11:18:06.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package knavalbattle # -# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -23,7 +23,7 @@ License: GPL-2.0+ Group: Amusements/Games/Board/Other Url: http://www.kde.org -Version: 4.12.0 +Version: 4.12.1 Release: 0 Source0: knavalbattle-%{version}.tar.xz BuildRoot: %{_tmppath}/%{name}-%{version}-build ++++++ knavalbattle-4.12.0.tar.xz -> knavalbattle-4.12.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/ai/dummyai.cpp new/knavalbattle-4.12.1/src/ai/dummyai.cpp --- old/knavalbattle-4.12.0/src/ai/dummyai.cpp 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/ai/dummyai.cpp 2014-01-08 14:13:24.000000000 +0100 @@ -44,8 +44,8 @@ Coord c(rand() % m_sea->size().x, rand() % m_sea->size().y); Ship::Direction dir = rand() % 2 == 0 ? Ship::LEFT_TO_RIGHT : Ship::TOP_DOWN; if (m_sea->canAddShip(m_player, c, i, dir)) { - ship = new Ship(i, dir); - m_sea->add(m_player, c, ship); + ship = new Ship(i, dir, c); + m_sea->add(m_player, ship); } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/ai/smartai.cpp new/knavalbattle-4.12.1/src/ai/smartai.cpp --- old/knavalbattle-4.12.0/src/ai/smartai.cpp 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/ai/smartai.cpp 2014-01-08 14:13:24.000000000 +0100 @@ -331,8 +331,8 @@ Coord c(rand() % m_sea->size().x, rand() % m_sea->size().y); Ship::Direction dir = rand() % 2 == 0 ? Ship::LEFT_TO_RIGHT : Ship::TOP_DOWN; if (m_sea->canAddShip(m_player, c, i, dir)) { - ship = new Ship(i, dir); - m_sea->add(m_player, c, ship); + ship = new Ship(i, dir, c); + m_sea->add(m_player, ship); } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/aientity.cpp new/knavalbattle-4.12.1/src/aientity.cpp --- old/knavalbattle-4.12.0/src/aientity.cpp 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/aientity.cpp 2014-01-08 14:13:24.000000000 +0100 @@ -11,13 +11,14 @@ #include "ai/smartai.h" #include "ai/dummyai.h" #include "shot.h" +#include "seaview.h" #include <KgDifficulty> #include <KIcon> -AIEntity::AIEntity(Sea::Player player, Sea* sea) -: Entity(player) +AIEntity::AIEntity(Sea::Player player, Sea* sea, SeaView *seaview) +: Entity(player, seaview) , m_sea(sea) { switch (Kg::difficultyLevel()) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/aientity.h new/knavalbattle-4.12.1/src/aientity.h --- old/knavalbattle-4.12.0/src/aientity.h 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/aientity.h 2014-01-08 14:13:24.000000000 +0100 @@ -19,12 +19,12 @@ Q_OBJECT AI* m_ai; Sea* m_sea; - + void getShoot(); - + friend class DelayedShot; public: - AIEntity(Sea::Player player, Sea* sea); + AIEntity(Sea::Player player, Sea* sea, SeaView *seaview); virtual ~AIEntity(); virtual void notify(Sea::Player player, const Coord& c, const HitInfo& info); @@ -33,7 +33,7 @@ virtual void start(bool); virtual void startPlaying(); virtual void hit(Shot* shot); - + virtual KIcon icon() const; public slots: virtual void notifyAbort() { } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/animation.cpp new/knavalbattle-4.12.1/src/animation.cpp --- old/knavalbattle-4.12.0/src/animation.cpp 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/animation.cpp 2014-01-08 14:13:24.000000000 +0100 @@ -68,6 +68,7 @@ , m_from(from) , m_to(to) , m_time(time) +, m_start(0) { } @@ -100,6 +101,7 @@ , m_from(from) , m_to(to) , m_time(time) +, m_start(0) { } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/battlefield.cpp new/knavalbattle-4.12.1/src/battlefield.cpp --- old/knavalbattle-4.12.0/src/battlefield.cpp 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/battlefield.cpp 2014-01-08 14:13:24.000000000 +0100 @@ -61,9 +61,9 @@ m_ships += n; } -void BattleField::add(const Coord& pos, Ship* ship) +void BattleField::add(Ship* ship) { - Coord p = pos; + Coord p = ship->position(); for (unsigned int i = 0; i < ship->size(); i++) { set(p, Element(ship)); p = p + ship->increment(); @@ -88,7 +88,7 @@ } } -bool BattleField::canAddShip(const Coord& pos, unsigned int size, Ship::Direction direction, const bool allow_adjacent_ships) const +bool BattleField::canAddShip(const Coord& pos, unsigned int size, Ship::Direction direction) const { Coord p = pos; Coord inc = Ship::increment(direction); @@ -99,7 +99,7 @@ p += inc; } // nor over another ship - if (allow_adjacent_ships) { + if (m_allow_adjacent_ships) { p = pos; for (unsigned int i = 0; i < size; i++) { if (valid(p) && !get(p).water()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/battlefield.h new/knavalbattle-4.12.1/src/battlefield.h --- old/knavalbattle-4.12.0/src/battlefield.h 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/battlefield.h 2014-01-08 14:13:24.000000000 +0100 @@ -23,6 +23,7 @@ typedef Grid<Element> Board; Coord m_size; Board m_board; + bool m_allow_adjacent_ships; unsigned int m_ships; inline int convert(const Coord& c) const { return c.x + m_size.x * c.y; } @@ -35,10 +36,10 @@ const Element& get(const Coord& pos) const; void set(const Coord& pos, const Element& e); - void add(const Coord& pos, Ship* ship); + void add(Ship* ship); void add(int n); void addBorder(const Coord& pos); - bool canAddShip(const Coord& pos, unsigned int size, Ship::Direction direction, const bool allow_adjacent_ships) const; + bool canAddShip(const Coord& pos, unsigned int size, Ship::Direction direction) const; HitInfo hit(const Coord& pos); void forceHit(const Coord& pos, const HitInfo& info); const Element& at(const Coord& c) const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/battlefieldview.cpp new/knavalbattle-4.12.1/src/battlefieldview.cpp --- old/knavalbattle-4.12.0/src/battlefieldview.cpp 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/battlefieldview.cpp 2014-01-08 14:13:24.000000000 +0100 @@ -177,18 +177,18 @@ sprite->setPos(m_renderer->toReal(c)); scene()->addItem(sprite); - sprite->stackBefore(m_screen); } -void BattleFieldView::add(const Coord& c, Ship* ship) +void BattleFieldView::add(Ship* ship) { Sprite* sprite = m_factory.createShip(ship); - addSprite(c, sprite); + addSprite(ship->position(), sprite); // fading preview in + Animation* a = new FadeAnimation(sprite, PREVIEW_OPACITY, 1, 1000); + Animator::instance()->add(a); + if (ship == m_preview.ship) { - Animation* a = new FadeAnimation(sprite, PREVIEW_OPACITY, 1, 1000); - Animator::instance()->add(a); cancelPreview(); } else if (!ship->alive()) { @@ -197,12 +197,12 @@ } } -void BattleFieldView::sink(const Coord& c, Ship* ship) +void BattleFieldView::sink(Ship* ship) { m_last_hit = 0; Sprite* ship_sprite = 0; - Coord p = c; + Coord p = ship->position(); for (unsigned int i = 0; i < ship->size(); i++, p += ship->increment()) { @@ -213,7 +213,7 @@ else if (s->spriteKey().startsWith("hit")) { s->setSpriteKey("hit-end"); s->refresh(m_renderer); - s->stackBefore(m_screen); + s->setZValue(BACKGROUND); s->setOpacity(0.5); } } @@ -227,6 +227,7 @@ { removeImpact(); m_last_hit = m_factory.createHit(); + m_last_hit->setZValue(BACKGROUND); addSprite(c, m_last_hit); } @@ -234,6 +235,7 @@ { removeImpact(); m_impact = m_factory.createImpact(); + m_impact->setZValue(BACKGROUND); addSprite(c, m_impact); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/battlefieldview.h new/knavalbattle-4.12.1/src/battlefieldview.h --- old/knavalbattle-4.12.0/src/battlefieldview.h 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/battlefieldview.h 2014-01-08 14:13:24.000000000 +0100 @@ -38,6 +38,11 @@ QGraphicsLineItem *hlines[11]; QGraphicsLineItem *vlines[11]; + enum Planes { + BACKGROUND = 1, + FOREGROUND = 2 + }; + WelcomeScreen* m_screen; KBSRenderer* m_renderer; SpriteFactory m_factory; @@ -74,17 +79,18 @@ void setPreview(const QPointF& pos, Ship* ship); void cancelPreview(); - void add(const Coord& c, Ship* ship); + void add(Ship* ship); void hit(const Coord& c); void miss(const Coord& c); void removeImpact(); - void sink(const Coord& c, Ship* ship); + void sink(Ship* ship); void clear(); void setDelegate(Delegate *c); void setPlayer(Sea::Player player); - + WelcomeScreen* screen() const; + protected: void drawGrid(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/button.h new/knavalbattle-4.12.1/src/button.h --- old/knavalbattle-4.12.0/src/button.h 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/button.h 2014-01-08 14:13:24.000000000 +0100 @@ -78,7 +78,6 @@ Button* m_button; int m_brightness; static double m_speed; - double m_current; int m_last; public: ButtonAnimation(Button* button, int brightness); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/controller.cpp new/knavalbattle-4.12.1/src/controller.cpp --- old/knavalbattle-4.12.0/src/controller.cpp 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/controller.cpp 2014-01-08 14:13:24.000000000 +0100 @@ -43,26 +43,25 @@ return entity; } -AIEntity* Controller::createAI(Sea::Player player) +AIEntity* Controller::createAI(Sea::Player player, SeaView* view) { kDebug() << "created ai entity"; m_has_ai = true; - AIEntity* e = new AIEntity(player, m_sea); + AIEntity* e = new AIEntity(player, m_sea, view); e->setNick(i18n("Computer")); setupEntity(e); - + return e; } -NetworkEntity* Controller::createRemotePlayer(Sea::Player player, Protocol* protocol, bool client) +NetworkEntity* Controller::createRemotePlayer(Sea::Player player, SeaView* view, Protocol* protocol, bool client) { - NetworkEntity* e = new NetworkEntity(player, m_sea, protocol, client); + NetworkEntity* e = new NetworkEntity(player, m_sea, view, protocol, client); setupEntity(e); connect(e, SIGNAL(restartRequested()), this, SIGNAL(restartRequested())); if (client) { m_sea->switchTurn(); } - return e; } @@ -80,19 +79,19 @@ this, SLOT(nick(int,QString))); connect(entity, SIGNAL(compatibility(int)), this, SIGNAL(compatibility(int))); - + foreach (Entity* e, m_entities) { connect(e, SIGNAL(compatibility(int)), entity, SLOT(setCompatibilityLevel(int))); connect(entity, SIGNAL(compatibility(int)), e, SLOT(setCompatibilityLevel(int))); - + connect(e, SIGNAL(abortGame()), entity, SLOT(notifyAbort())); connect(entity, SIGNAL(abortGame()), e, SLOT(notifyAbort())); } - + m_entities.append(entity); } @@ -216,11 +215,16 @@ void Controller::finalizeGame(Sea::Player winner) { + // first, every entity will notify the other entity its ships + foreach (Entity* entity, m_entities) { + entity->notifyShips(winner); + } + // then, it will notify the end of the game foreach (Entity* entity, m_entities) { entity->notifyGameOver(winner); } emit gameOver(winner); -} + } Entity* Controller::findEntity(Sea::Player player) const { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/controller.h new/knavalbattle-4.12.1/src/controller.h --- old/knavalbattle-4.12.0/src/controller.h 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/controller.h 2014-01-08 14:13:24.000000000 +0100 @@ -44,17 +44,18 @@ friend class Shot; public: - explicit Controller(QObject* parent, AudioPlayer* player = 0, const bool allow_adjacent_ships = false); + explicit Controller(QObject* parent, AudioPlayer* audioPlayer = 0, const bool allow_adjacent_ships = false); PlayerEntity* createPlayer(Sea::Player player, SeaView* view, ChatWidget* chat, const QString& nick); - AIEntity* createAI(Sea::Player player); - NetworkEntity* createRemotePlayer(Sea::Player player, Protocol* protocol, bool client); + AIEntity* createAI(Sea::Player player, SeaView* view); + NetworkEntity* createRemotePlayer(Sea::Player player, SeaView* view, Protocol* protocol, bool client); bool start(SeaView* view, bool ask = false); Entity* findEntity(Sea::Player) const; Sea::Player turn() const; bool hasAI() const; + inline Sea* getSea() const { return m_sea; } public slots: void shoot(int player, const Coord& c); void ready(int player); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/coord.h new/knavalbattle-4.12.1/src/coord.h --- old/knavalbattle-4.12.0/src/coord.h 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/coord.h 2014-01-08 14:13:24.000000000 +0100 @@ -20,7 +20,7 @@ int y; Coord(int x, int y); - Coord() { } + Coord():x(0),y(0) { } Coord operator+(const Coord& other) const; Coord operator-(const Coord& other) const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/entity.cpp new/knavalbattle-4.12.1/src/entity.cpp --- old/knavalbattle-4.12.0/src/entity.cpp 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/entity.cpp 2014-01-08 14:13:24.000000000 +0100 @@ -10,8 +10,9 @@ #include "entity.h" -Entity::Entity(Sea::Player player) +Entity::Entity(Sea::Player player, SeaView* seaview) : m_player(player) +, m_seaview(seaview) , m_level(COMPAT_KBS4) { } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/entity.h new/knavalbattle-4.12.1/src/entity.h --- old/knavalbattle-4.12.0/src/entity.h 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/entity.h 2014-01-08 14:13:24.000000000 +0100 @@ -12,6 +12,7 @@ #include <QObject> #include "sea.h" +#include "seaview.h" #include "stats.h" class Shot; @@ -28,11 +29,13 @@ }; protected: Sea::Player m_player; + SeaView* m_seaview; QString m_nick; CompatibilityLevel m_level; Stats m_stats; + public: - Entity(Sea::Player player); + Entity(Sea::Player player, SeaView* seaview); virtual ~Entity(); virtual void notify(Sea::Player player, const Coord& c, const HitInfo& info) = 0; virtual void notifyChat(const Entity* entity, const QString& text) = 0; @@ -41,6 +44,7 @@ virtual void start(bool) = 0; virtual void startPlaying() { } virtual void notifyReady(Sea::Player) { } + virtual void notifyShips(Sea::Player) { } virtual void notifyGameOver(Sea::Player) { } Stats* stats(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/networkentity.cpp new/knavalbattle-4.12.1/src/networkentity.cpp --- old/knavalbattle-4.12.0/src/networkentity.cpp 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/networkentity.cpp 2014-01-08 14:13:24.000000000 +0100 @@ -13,18 +13,20 @@ #include "shot.h" #include "protocol.h" #include "settings.h" +#include "seaview.h" #include <KIcon> #include <klocalizedstring.h> #include <kdebug.h> -NetworkEntity::NetworkEntity(Sea::Player player, Sea* sea, Protocol* protocol, bool client) -: Entity(player) +NetworkEntity::NetworkEntity(Sea::Player player, Sea* sea, SeaView* seaview, Protocol* protocol, bool client) +: Entity(player, seaview) , m_sea(sea) +, m_protocol(protocol) , m_pending_shot(0) , m_client(client) +, m_winner(false) { - m_protocol = protocol; } NetworkEntity::~NetworkEntity() @@ -52,14 +54,27 @@ } } -void NetworkEntity::notifyGameOver(Sea::Player) +void NetworkEntity::notifyShips(Sea::Player player) { - m_protocol->send(MessagePtr(new GameOverMessage)); + m_winner= player == m_player ; + + GameOverMessage* msg=new GameOverMessage(); + if (!m_winner) { + foreach (Ship* ship, m_sea->myShips()) { + if (ship->alive()) { + msg->addShip(ship->position(), ship->size(), ship->direction()); + } + } + } + m_protocol->send(MessagePtr(msg)); } -void NetworkEntity::startPlaying() +void NetworkEntity::notifyGameOver(Sea::Player player) { +} +void NetworkEntity::startPlaying() +{ } void NetworkEntity::notify(Sea::Player player, const Coord& c, const HitInfo& info) @@ -67,7 +82,7 @@ if (info.type == HitInfo::INVALID) { return; } - + if (player == m_player) { bool hit = info.type == HitInfo::HIT; bool death = info.shipDestroyed != 0; @@ -172,7 +187,7 @@ int size = abs(delta.x) + abs(delta.y) + 1; Ship::Direction direction = delta.x == 0 ? Ship::TOP_DOWN : Ship::LEFT_TO_RIGHT; Coord shipPos = (delta.x < 0 || delta.y < 0) ? msg.stop() : msg.start(); - Ship* ship = new Ship(size, direction); + Ship* ship = new Ship(size, direction, shipPos); info.shipDestroyed = ship; info.shipPos = shipPos; @@ -189,9 +204,14 @@ } } -void NetworkEntity::visit(const GameOverMessage&) +void NetworkEntity::visit(const GameOverMessage& msg) { - + { + // receive the ships and add them to the board + foreach (GameOverMessage::ShipInfo ship, msg.ships()) { + m_seaview->add(m_sea->turn(), new Ship(ship.size, ship.direction, ship.pos)); + } + } } void NetworkEntity::visit(const RestartMessage&) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/networkentity.h new/knavalbattle-4.12.1/src/networkentity.h --- old/knavalbattle-4.12.0/src/networkentity.h 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/networkentity.h 2014-01-08 14:13:24.000000000 +0100 @@ -14,6 +14,7 @@ #include "message.h" class Sea; +class SeaView; class Protocol; class NetworkEntity : public Entity, private MessageVisitor @@ -23,19 +24,22 @@ Protocol* m_protocol; Shot* m_pending_shot; bool m_client; + bool m_winner; + public: - NetworkEntity(Sea::Player player, Sea* sea, Protocol* device, bool client); + NetworkEntity(Sea::Player player, Sea* sea, SeaView* seaview, Protocol* device, bool client); ~NetworkEntity(); - + virtual void notify(Sea::Player player, const Coord& c, const HitInfo& info); virtual void notifyChat(const Entity* entity, const QString& text); virtual void notifyNick(Sea::Player player, const QString& nick); virtual void start(bool ask); virtual void startPlaying(); virtual void notifyReady(Sea::Player player); + virtual void notifyShips(Sea::Player winner); virtual void notifyGameOver(Sea::Player winner); virtual void hit(Shot* shot); - + virtual KIcon icon() const; private slots: void received(MessagePtr msg); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/playerentity.cpp new/knavalbattle-4.12.1/src/playerentity.cpp --- old/knavalbattle-4.12.0/src/playerentity.cpp 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/playerentity.cpp 2014-01-08 14:13:24.000000000 +0100 @@ -34,6 +34,7 @@ Ship* PlayerEntity::canAddShip(const Coord& c) { Ship* ship = nextShip(); + ship->setPosition(c); Q_ASSERT(ship); if (m_sea->canAddShip(m_player, c, ship->size(), ship->direction())) { @@ -46,26 +47,26 @@ } } } - return ship; - } - + } return 0; } + void PlayerEntity::action(Sea::Player player, const Coord& c) { if (nextShip()) { if (player == m_player) { // placing ships + // First check if the ship can be placed anywhere Ship* ship = canAddShip(c); if (ship) { // remove ship from the list m_ships.removeFirst(); // add ship to the sea - m_sea->add(m_player, c, ship); - m_view->add(m_player, c, ship); + m_sea->add(m_player, ship); + m_seaview->add(m_player, ship); if (!nextShip()) { emit ready(m_player); @@ -83,13 +84,15 @@ void PlayerEntity::start(bool ask) { - m_ships.append(new Ship(1, Ship::LEFT_TO_RIGHT)); - m_ships.append(new Ship(2, Ship::LEFT_TO_RIGHT)); - m_ships.append(new Ship(3, Ship::LEFT_TO_RIGHT)); - m_ships.append(new Ship(4, Ship::LEFT_TO_RIGHT)); - + Coord origin(0, 0); + + m_ships.append(new Ship(1, Ship::LEFT_TO_RIGHT, origin)); + m_ships.append(new Ship(2, Ship::LEFT_TO_RIGHT, origin)); + m_ships.append(new Ship(3, Ship::LEFT_TO_RIGHT, origin)); + m_ships.append(new Ship(4, Ship::LEFT_TO_RIGHT, origin)); + UIEntity::start(ask); - m_view->setDelegate(this); + m_seaview->setDelegate(this); } void PlayerEntity::hit(Shot* shot) @@ -114,7 +117,7 @@ Ship* next = nextShip(); if (next) { next->changeDirection(); - m_view->cancelPreview(); + m_seaview->cancelPreview(); } } } @@ -126,6 +129,7 @@ return 0; } if (m_sea->canAddShip(player, c, next->size(), next->direction())) { + next->setPosition(c); return next; } else { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/playfield.cpp new/knavalbattle-4.12.1/src/playfield.cpp --- old/knavalbattle-4.12.0/src/playfield.cpp 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/playfield.cpp 2014-01-08 14:13:24.000000000 +0100 @@ -40,8 +40,8 @@ setMinimumSize(static_cast<int>(MINIMUM_HEIGHT * 1.6), MINIMUM_HEIGHT); QVBoxLayout* layout = new QVBoxLayout; - m_sea = new SeaView(this); - layout->addWidget(m_sea, 1); + m_seaView = new SeaView(this); + layout->addWidget(m_seaView, 1); m_chat = new ChatWidget(this); m_chat->hide(); @@ -80,22 +80,23 @@ this, SLOT(changeTurn(int))); connect(controller, SIGNAL(playerReady(int)), this, SLOT(playerReady(int))); + return controller; } void PlayField::setupController() { Animator::instance()->restart(); - m_sea->clear(); + m_seaView->clear(); m_chat->hide(); // remove welcome screen - m_sea->screen(Sea::Player(0))->fadeOut(); - m_sea->screen(Sea::Player(1))->fadeOut(); + m_seaView->screen(Sea::Player(0))->fadeOut(); + m_seaView->screen(Sea::Player(1))->fadeOut(); delete m_controller; m_controller = createController(); - m_menu->setupController(m_controller, 0, m_sea, m_chat, false); + m_menu->setupController(m_controller, 0, m_seaView, m_chat, false); startGame(); } @@ -110,8 +111,7 @@ // create new controller m_controller = createController(); m_menu->setupController(m_controller, old_opponent, - m_sea, m_chat, ask); - + m_seaView, m_chat, ask); delete old_opponent; startGame(); @@ -122,7 +122,7 @@ Animator::instance()->restart(); delete m_controller; m_controller = 0; - m_sea->clear(); + m_seaView->clear(); } void PlayField::newGame() @@ -133,10 +133,10 @@ Kg::difficulty()->setGameRunning(false); m_chat->hide(); - m_sea->screen(Sea::Player(0))->show(); - m_sea->screen(Sea::Player(1))->show(); + m_seaView->screen(Sea::Player(0))->show(); + m_seaView->screen(Sea::Player(1))->show(); - m_menu = new SimpleMenu(this, m_sea->screen(Sea::Player(0))); + m_menu = new SimpleMenu(this, m_seaView->screen(Sea::Player(0))); connect(m_menu, SIGNAL(done()), this, SLOT(setupController())); emit welcomeScreen(); } @@ -144,7 +144,7 @@ void PlayField::restart(bool ask) { Animator::instance()->restart(); - m_sea->clear(); + m_seaView->clear(); resetupController(ask); } @@ -254,7 +254,7 @@ void PlayField::updateNick(int player, const QString& nick) { - m_sea->setNick(Sea::Player(player), nick); + m_seaView->setNick(Sea::Player(player), nick); } void PlayField::changeTurn(int player) @@ -346,12 +346,12 @@ void PlayField::toggleLeftGrid(bool show) { - m_sea->toggleLeftGrid(show); + m_seaView->toggleLeftGrid(show); } void PlayField::toggleRightGrid(bool show) { - m_sea->toggleRightGrid(show); + m_seaView->toggleRightGrid(show); } #include "playfield.moc" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/playfield.h new/knavalbattle-4.12.1/src/playfield.h --- old/knavalbattle-4.12.0/src/playfield.h 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/playfield.h 2014-01-08 14:13:24.000000000 +0100 @@ -24,14 +24,14 @@ class PlayField : public QWidget { Q_OBJECT - SeaView* m_sea; + SeaView* m_seaView; Controller* m_controller; AudioPlayer* m_player; ChatWidget* m_chat; SimpleMenu* m_menu; QStatusBar* m_status_bar; bool m_show_endofgame_message; - + void startGame(); void endGame(); void resetupController(bool ask = false); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/protocol.cpp new/knavalbattle-4.12.1/src/protocol.cpp --- old/knavalbattle-4.12.0/src/protocol.cpp 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/protocol.cpp 2014-01-08 14:13:24.000000000 +0100 @@ -214,12 +214,12 @@ } case GameOverMessage::MSGTYPE: { - GameOverMessage* msg = new GameOverMessage; + GameOverMessage* msg = new GameOverMessage(); QDomNodeList nodes = main.childNodes(); for (int i = 0; i < nodes.count(); i++) { QDomElement element = nodes.item(i).toElement(); if (!element.isNull() && element.tagName().startsWith("ship")) { - int size = element.tagName().mid(4).toInt() + 1; + int size = element.tagName().mid(4).toInt(); QStringList data = element.text().split(' '); if (data.size() != 3) { continue; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/sea.cpp new/knavalbattle-4.12.1/src/sea.cpp --- old/knavalbattle-4.12.0/src/sea.cpp 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/sea.cpp 2014-01-08 14:13:24.000000000 +0100 @@ -32,12 +32,19 @@ if (m_status != PLACING_SHIPS) { return false; } - return m_fields[p]->canAddShip(pos, size, direction, m_allow_adjacent_ships); + return m_fields[p]->canAddShip(pos, size, direction); } -void Sea::add(Player p, const Coord& pos, Ship* ship) +void Sea::add(Player p, Ship* ship) { - m_fields[p]->add(pos, ship); + if(p == PLAYER_B) { + m_enemyShips.append(ship); + } + else { + m_myShips.append(ship); + } + + m_fields[p]->add(ship); } void Sea::add(Player p, int n) @@ -136,5 +143,15 @@ return m_fields[p]->isNearShip(pos); } +const QList<Ship *> Sea::enemyShips() const +{ + return m_enemyShips; +} + +const QList<Ship *> Sea::myShips() const +{ + return m_myShips; +} + #include "sea.moc" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/sea.h new/knavalbattle-4.12.1/src/sea.h --- old/knavalbattle-4.12.0/src/sea.h 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/sea.h 2014-01-08 14:13:24.000000000 +0100 @@ -10,7 +10,9 @@ #ifndef Sea_H #define Sea_H +#include <QList> #include <QObject> + #include "ship.h" #include "hitinfo.h" @@ -37,6 +39,8 @@ Coord m_size; Player m_turn; BattleField* m_fields[2]; + QList<Ship *> m_enemyShips; + QList<Ship *> m_myShips; Status m_status; bool m_allow_adjacent_ships; @@ -50,7 +54,7 @@ bool canAddShip(Player p, const Coord& pos, int size, Ship::Direction direction) const; void add(Player p, int n); - void add(Player p, const Coord& pos, Ship* ship); + void add(Player p, Ship* ship); void addBorder(Player p, const Coord& pos); bool canHit(Player p, const Coord& pos) const; HitInfo hit(const Coord& pos); @@ -62,6 +66,9 @@ void switchTurn(); bool isNearShip(Sea::Player, const Coord& pos) const; void allowAdjacentShips(const bool allow_adjacent_ships); + + const QList<Ship *> enemyShips() const; + const QList<Ship *> myShips() const; inline Status status() const { return m_status; } inline Player turn() const { return m_turn; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/seaview.cpp new/knavalbattle-4.12.1/src/seaview.cpp --- old/knavalbattle-4.12.0/src/seaview.cpp 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/seaview.cpp 2014-01-08 14:13:24.000000000 +0100 @@ -179,9 +179,9 @@ updatePreview(m_last_preview); } -void SeaView::add(Sea::Player p, const Coord& c, Ship* ship) +void SeaView::add(Sea::Player p, Ship* ship) { - m_fields[p]->add(c, ship); + m_fields[p]->add(ship); } void SeaView::hit(Sea::Player p, const Coord& c) @@ -194,9 +194,9 @@ m_fields[p]->miss(c); } -void SeaView::sink(Sea::Player p, const Coord& c, Ship* ship) +void SeaView::sink(Sea::Player p, Ship* ship) { - m_fields[p]->sink(c, ship); + m_fields[p]->sink(ship); } void SeaView::clear() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/seaview.h new/knavalbattle-4.12.1/src/seaview.h --- old/knavalbattle-4.12.0/src/seaview.h 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/seaview.h 2014-01-08 14:13:24.000000000 +0100 @@ -52,10 +52,10 @@ void setDelegate(Delegate* c); void cancelPreview(); - void add(Sea::Player p, const Coord& c, Ship* ship); + void add(Sea::Player p, Ship* ship); void hit(Sea::Player p, const Coord& c); void miss(Sea::Player p, const Coord& c); - void sink(Sea::Player p, const Coord& c, Ship* ship); + void sink(Sea::Player p, Ship* ship); void clear(); void setStats(Sea::Player p, const QString& icon, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/ship.cpp new/knavalbattle-4.12.1/src/ship.cpp --- old/knavalbattle-4.12.0/src/ship.cpp 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/ship.cpp 2014-01-08 14:13:24.000000000 +0100 @@ -10,13 +10,24 @@ #include "ship.h" #include <qdebug.h> -Ship::Ship(unsigned int size, Direction direction) +Ship::Ship(unsigned int size, Direction direction, Coord position) : m_size(size) +, m_position(position) , m_direction(direction) { m_life = size; } +const Coord Ship::position() const +{ + return m_position; +} + +void Ship::setPosition(const Coord & position) +{ + m_position = position; +} + void Ship::changeDirection() { m_direction = m_direction == TOP_DOWN ? LEFT_TO_RIGHT : TOP_DOWN; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/ship.h new/knavalbattle-4.12.1/src/ship.h --- old/knavalbattle-4.12.0/src/ship.h 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/ship.h 2014-01-08 14:13:24.000000000 +0100 @@ -23,23 +23,30 @@ }; private: unsigned int m_size; + Coord m_position; Direction m_direction; int m_life; public: - Ship(unsigned int size, Direction direction); + Ship(unsigned int size, Direction direction, Coord position); + void decLife(); + void setPosition(const Coord & position); void changeDirection(); + + const Coord position() const; Coord increment() const; Coord decrement() const; Coord incrementPerpendicular() const; Coord decrementPerpendicular() const; + static Coord increment(Direction); static Coord decrement(Direction); static Coord incrementPerpendicular(Direction); static Coord decrementPerpendicular(Direction); + inline unsigned int size() const { return m_size; } inline Direction direction() const { return m_direction; } - void decLife(); + bool alive() const; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/simplemenu.cpp new/knavalbattle-4.12.1/src/simplemenu.cpp --- old/knavalbattle-4.12.0/src/simplemenu.cpp 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/simplemenu.cpp 2014-01-08 14:13:24.000000000 +0100 @@ -110,7 +110,7 @@ case DONE_LOCAL_GAME: { m_player1 = controller->createPlayer(Sea::Player(0), sea, chat, m_nickname); sea->setStats(Sea::Player(0), "score_mouse", m_nickname, m_player1->stats()); - m_player2 = controller->createAI(Sea::Player(1)); + m_player2 = controller->createAI(Sea::Player(1), sea); sea->setStats(Sea::Player(1), "score_ai", "Computer", m_player2->stats()); chat->hide(); @@ -121,7 +121,7 @@ m_player1 = controller->createPlayer(Sea::Player(0), sea, chat, m_nickname); sea->setStats(Sea::Player(0), "score_mouse", m_nickname, m_player1->stats()); - m_player2 = controller->createRemotePlayer(Sea::Player(1), m_protocol, false); + m_player2 = controller->createRemotePlayer(Sea::Player(1), sea, m_protocol, false); if (old_opponent) { m_player1->setCompatibilityLevel(old_opponent->compatibilityLevel()); m_player2->setCompatibilityLevel(old_opponent->compatibilityLevel()); @@ -138,7 +138,7 @@ m_player1 = controller->createPlayer(Sea::Player(0), sea, chat, m_nickname); sea->setStats(Sea::Player(0), "score_mouse", m_nickname, m_player1->stats()); - m_player2 = controller->createRemotePlayer(Sea::Player(1), m_protocol, true); + m_player2 = controller->createRemotePlayer(Sea::Player(1), sea, m_protocol, true); if (old_opponent) { m_player1->setCompatibilityLevel(old_opponent->compatibilityLevel()); m_player2->setCompatibilityLevel(old_opponent->compatibilityLevel()); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/uientity.cpp new/knavalbattle-4.12.1/src/uientity.cpp --- old/knavalbattle-4.12.0/src/uientity.cpp 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/uientity.cpp 2014-01-08 14:13:24.000000000 +0100 @@ -10,19 +10,20 @@ #include "uientity.h" #include "seaview.h" #include "shot.h" +#include "ship.h" #include <KIcon> +#include <QList> UIEntity::UIEntity(Sea::Player player, Sea* sea, SeaView* view) -: Entity(player) +: Entity(player, view) , m_sea(sea) -, m_view(view) { } UIEntity::~UIEntity() { - m_view->setDelegate(0); + m_seaview->setDelegate(0); } void UIEntity::notify(Sea::Player player, const Coord& c, const HitInfo& info) @@ -30,9 +31,14 @@ drawShoot(Sea::opponent(player), c, info); } +void UIEntity::notifyGameOver(Sea::Player winner) +{ + drawHiddenShips(winner); +} + void UIEntity::start(bool) { - m_view->clear(); + m_seaview->clear(); } void UIEntity::hit(Shot* shot) @@ -40,15 +46,26 @@ shot->execute(HitInfo::INVALID); } +void UIEntity::drawHiddenShips(Sea::Player winner) +{ + QList<Ship *> enemyShips = m_sea->enemyShips(); + + foreach (Ship * ship, enemyShips) { + if (ship->alive()) { + m_seaview->add(winner, ship); + } + } +} + void UIEntity::drawShoot(Sea::Player player, const Coord& c, const HitInfo& info) { switch (info.type) { case HitInfo::HIT: - m_view->hit(player, c); + m_seaview->hit(player, c); // registerHit(player, c); break; case HitInfo::MISS: - m_view->miss(player, c); + m_seaview->miss(player, c); // registerMiss(player, c); break; default: @@ -60,10 +77,10 @@ if (shipPos.valid()) { // show destroyed opponent ship if (player != m_player) { - m_view->add(player, shipPos, info.shipDestroyed); + m_seaview->add(player, info.shipDestroyed); } - - m_view->sink(player, shipPos, info.shipDestroyed); + + m_seaview->sink(player, info.shipDestroyed); } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/knavalbattle-4.12.0/src/uientity.h new/knavalbattle-4.12.1/src/uientity.h --- old/knavalbattle-4.12.0/src/uientity.h 2013-11-28 20:12:01.000000000 +0100 +++ new/knavalbattle-4.12.1/src/uientity.h 2014-01-08 14:13:24.000000000 +0100 @@ -19,14 +19,15 @@ Q_OBJECT protected: Sea* m_sea; - SeaView* m_view; - + void drawShoot(Sea::Player player, const Coord& c, const HitInfo& info); + void drawHiddenShips(Sea::Player winner); public: UIEntity(Sea::Player player, Sea*, SeaView* view); virtual ~UIEntity(); virtual void notify(Sea::Player player, const Coord& c, const HitInfo& info); + virtual void notifyGameOver(Sea::Player winner); virtual void notifyChat(const Entity*, const QString&) { } virtual void notifyNick(Sea::Player, const QString&) { } virtual void start(bool); -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
