KGame

Search for usage in LXR

#include <KGame/KGame>

Inheritance diagram for KGame:

Public Types

enum  GamePolicy { PolicyUndefined = 0 , PolicyClean = 1 , PolicyDirty = 2 , PolicyLocal = 3 }
 
enum  GameStatus {
  Init = 0 , Run = 1 , Pause = 2 , End = 3 ,
  Abort = 4 , SystemPause = 5 , Intro = 6 , UserStatus = 7
}
 
typedef QList< KPlayer * > KGamePlayerList
 

Signals

void signalClientJoinedGame (quint32 clientid, KGame *me)
 
void signalClientLeftGame (int clientID, int oldgamestatus, KGame *me)
 
void signalGameOver (int status, KPlayer *current, KGame *me)
 
void signalLoad (QDataStream &stream)
 
void signalLoadError (QDataStream &stream, bool network, int cookie, bool &result)
 
void signalLoadPrePlayers (QDataStream &stream)
 
void signalMessageUpdate (int msgid, quint32 receiver, quint32 sender)
 
void signalNetworkData (int msgid, const QByteArray &buffer, quint32 receiver, quint32 sender)
 
void signalPlayerJoinedGame (KPlayer *player)
 
void signalPlayerLeftGame (KPlayer *player)
 
void signalPropertyChanged (KGamePropertyBase *property, KGame *me)
 
void signalReplacePlayerIO (KPlayer *player, bool *remove)
 
void signalSave (QDataStream &stream)
 
void signalSavePrePlayers (QDataStream &stream)
 
- Signals inherited from KGameNetwork
void signalAdminStatusChanged (bool isAdmin)
 
void signalClientConnected (quint32 clientID)
 
void signalClientDisconnected (quint32 clientID, bool broken)
 
void signalConnectionBroken ()
 
void signalNetworkErrorMessage (int error, const QString &text)
 

Public Member Functions

 KGame (int cookie=42, QObject *parent=nullptr)
 
 ~KGame () override
 
bool activatePlayer (KPlayer *player)
 
bool addPlayer (KPlayer *newplayer)
 
bool addProperty (KGamePropertyBase *data)
 
virtual KPlayercreatePlayer (int rtti, int io, bool isvirtual)
 
KGamePropertyHandlerdataHandler () const
 
void Debug () override
 
KPlayerfindPlayer (quint32 id) const
 
KGamePropertyBasefindProperty (int id) const
 
KGameSequencegameSequence () const
 
int gameStatus () const
 
bool inactivatePlayer (KPlayer *player)
 
KGamePlayerListinactivePlayerList ()
 
const KGamePlayerListinactivePlayerList () const
 
bool isRunning () const
 
virtual bool load (const QString &filename, bool reset=true)
 
virtual bool load (QDataStream &stream, bool reset=true)
 
int maxPlayers () const
 
uint minPlayers () const
 
void networkTransmission (QDataStream &stream, int msgid, quint32 receiver, quint32 sender, quint32 clientID) override
 
uint playerCount () const
 
void playerDeleted (KPlayer *player)
 
KGamePlayerListplayerList ()
 
const KGamePlayerListplayerList () const
 
GamePolicy policy () const
 
bool removePlayer (KPlayer *player)
 
virtual bool reset ()
 
virtual bool save (const QString &filename, bool saveplayers=true)
 
virtual bool save (QDataStream &stream, bool saveplayers=true)
 
bool sendGroupMessage (const QByteArray &msg, int msgid, quint32 sender, const QString &group)
 
bool sendGroupMessage (const QDataStream &msg, int msgid, quint32 sender, const QString &group)
 
bool sendGroupMessage (const QString &msg, int msgid, quint32 sender, const QString &group)
 
bool sendGroupMessage (int msg, int msgid, quint32 sender, const QString &group)
 
virtual bool sendPlayerInput (QDataStream &msg, KPlayer *player, quint32 sender=0)
 
bool sendPlayerProperty (int msgid, QDataStream &s, quint32 playerId)
 
void setGameSequence (KGameSequence *sequence)
 
void setGameStatus (int status)
 
void setMaxPlayers (uint maxnumber)
 
void setMinPlayers (uint minnumber)
 
void setPolicy (GamePolicy p, bool recursive=true)
 
virtual bool systemPlayerInput (QDataStream &msg, KPlayer *player, quint32 sender=0)
 
- Public Member Functions inherited from KGameNetwork
 KGameNetwork (int cookie=42, QObject *parent=nullptr)
 
bool connectToServer (const QString &host, quint16 port)
 
bool connectToServer (KMessageIO *connection)
 
int cookie () const
 
void disconnect ()
 
void electAdmin (quint32 clientID)
 
quint32 gameId () const
 
QString hostName () const
 
bool isAdmin () const
 
bool isMaster () const
 
bool isNetwork () const
 
bool isOfferingConnections () const
 
virtual void lock ()
 
KMessageClientmessageClient () const
 
KMessageServermessageServer () const
 
bool offerConnections (quint16 port)
 
quint16 port () const
 
void sendError (int error, const QByteArray &message, quint32 receiver=0, quint32 sender=0)
 
bool sendMessage (const QByteArray &buffer, int msgid, quint32 receiver=0, quint32 sender=0)
 
bool sendMessage (const QDataStream &msg, int msgid, quint32 receiver=0, quint32 sender=0)
 
bool sendMessage (const QString &msg, int msgid, quint32 receiver=0, quint32 sender=0)
 
bool sendMessage (int data, int msgid, quint32 receiver=0, quint32 sender=0)
 
bool sendSystemMessage (const QByteArray &buffer, int msgid, quint32 receiver=0, quint32 sender=0)
 
bool sendSystemMessage (const QDataStream &msg, int msgid, quint32 receiver=0, quint32 sender=0)
 
bool sendSystemMessage (const QString &msg, int msgid, quint32 receiver=0, quint32 sender=0)
 
bool sendSystemMessage (int data, int msgid, quint32 receiver=0, quint32 sender=0)
 
void setDiscoveryInfo (const QString &type, const QString &name=QString())
 
void setMaxClients (int max)
 
bool stopServerConnection ()
 
virtual void unlock ()
 
- Public Member Functions inherited from QObject
 QObject (QObject *parent)
 
QBindable< QStringbindableObjectName ()
 
bool blockSignals (bool block)
 
const QObjectListchildren () const const
 
QMetaObject::Connection connect (const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type) const const
 
void deleteLater ()
 
void destroyed (QObject *obj)
 
bool disconnect (const char *signal, const QObject *receiver, const char *method) const const
 
bool disconnect (const QObject *receiver, const char *method) const const
 
void dumpObjectInfo () const const
 
void dumpObjectTree () const const
 
QList< QByteArraydynamicPropertyNames () const const
 
virtual bool event (QEvent *e)
 
virtual bool eventFilter (QObject *watched, QEvent *event)
 
findChild (const QString &name, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QRegularExpression &re, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QString &name, Qt::FindChildOptions options) const const
 
QList< T > findChildren (Qt::FindChildOptions options) const const
 
bool inherits (const char *className) const const
 
void installEventFilter (QObject *filterObj)
 
bool isQuickItemType () const const
 
bool isWidgetType () const const
 
bool isWindowType () const const
 
void killTimer (int id)
 
virtual const QMetaObjectmetaObject () const const
 
void moveToThread (QThread *targetThread)
 
QString objectName () const const
 
void objectNameChanged (const QString &objectName)
 
QObjectparent () const const
 
QVariant property (const char *name) const const
 
 Q_CLASSINFO (Name, Value)
 
 Q_EMIT Q_EMIT
 
 Q_ENUM (...)
 
 Q_ENUM_NS (...)
 
 Q_ENUMS (...)
 
 Q_FLAG (...)
 
 Q_FLAG_NS (...)
 
 Q_FLAGS (...)
 
 Q_GADGET Q_GADGET
 
 Q_GADGET_EXPORT (EXPORT_MACRO)
 
 Q_INTERFACES (...)
 
 Q_INVOKABLE Q_INVOKABLE
 
 Q_MOC_INCLUDE Q_MOC_INCLUDE
 
 Q_NAMESPACE Q_NAMESPACE
 
 Q_NAMESPACE_EXPORT (EXPORT_MACRO)
 
 Q_OBJECT Q_OBJECT
 
 Q_PROPERTY (...)
 
 Q_REVISION Q_REVISION
 
 Q_SET_OBJECT_NAME (Object)
 
 Q_SIGNAL Q_SIGNAL
 
 Q_SIGNALS Q_SIGNALS
 
 Q_SLOT Q_SLOT
 
 Q_SLOTS Q_SLOTS
 
qobject_cast (const QObject *object)
 
qobject_cast (QObject *object)
 
 QT_NO_NARROWING_CONVERSIONS_IN_CONNECT QT_NO_NARROWING_CONVERSIONS_IN_CONNECT
 
void removeEventFilter (QObject *obj)
 
void setObjectName (const QString &name)
 
void setObjectName (QAnyStringView name)
 
void setParent (QObject *parent)
 
bool setProperty (const char *name, const QVariant &value)
 
bool setProperty (const char *name, QVariant &&value)
 
bool signalsBlocked () const const
 
int startTimer (int interval, Qt::TimerType timerType)
 
int startTimer (std::chrono::milliseconds interval, Qt::TimerType timerType)
 
QThreadthread () const const
 

Protected Slots

void emitSignal (KGamePropertyBase *me)
 
void sendProperty (int msgid, QDataStream &stream, bool *sent)
 
void slotClientConnected (quint32 clientId)
 
void slotClientDisconnected (quint32 clientId, bool broken)
 
void slotServerDisconnected ()
 
- Protected Slots inherited from KGameNetwork
void aboutToLoseConnection (quint32 id)
 
void receiveNetworkTransmission (const QByteArray &a, quint32 clientID)
 
void slotAdminStatusChanged (bool isAdmin)
 
void slotResetConnection ()
 

Protected Member Functions

void deleteInactivePlayers ()
 
void deletePlayers ()
 
virtual bool loadgame (QDataStream &stream, bool network, bool reset)
 
KPlayerloadPlayer (QDataStream &stream, bool isvirtual=false)
 
virtual void negotiateNetworkGame (quint32 clientID)
 
virtual void newPlayersJoin (KGamePlayerList *oldplayer, KGamePlayerList *newplayer, QList< int > &inactivate)
 
virtual bool playerInput (QDataStream &msg, KPlayer *player)=0
 
KPlayerplayerInputFinished (KPlayer *player)
 
virtual bool savegame (QDataStream &stream, bool network, bool saveplayers)
 
void savePlayer (QDataStream &stream, KPlayer *player)
 
void savePlayers (QDataStream &stream, KGamePlayerList *list=nullptr)
 
bool systemActivatePlayer (KPlayer *player)
 
bool systemAddPlayer (KPlayer *newplayer)
 
bool systemInactivatePlayer (KPlayer *player)
 
void systemRemovePlayer (KPlayer *player, bool deleteit)
 
- Protected Member Functions inherited from KGameNetwork
void setMaster ()
 
- Protected Member Functions inherited from QObject
virtual void childEvent (QChildEvent *event)
 
virtual void connectNotify (const QMetaMethod &signal)
 
virtual void customEvent (QEvent *event)
 
virtual void disconnectNotify (const QMetaMethod &signal)
 
bool isSignalConnected (const QMetaMethod &signal) const const
 
int receivers (const char *signal) const const
 
QObjectsender () const const
 
int senderSignalIndex () const const
 
virtual void timerEvent (QTimerEvent *event)
 

Additional Inherited Members

- Properties inherited from QObject
 objectName
 
- Static Public Member Functions inherited from QObject
QMetaObject::Connection connect (const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, Functor functor)
 
bool disconnect (const QMetaObject::Connection &connection)
 
bool disconnect (const QObject *sender, const char *signal, const QObject *receiver, const char *method)
 
bool disconnect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method)
 
bool disconnect (const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method)
 
QString tr (const char *sourceText, const char *disambiguation, int n)
 
- Public Attributes inherited from QObject
typedef QObjectList
 

Detailed Description

The main KDE game object.

The KGame class is the central game object. A game basically consists of following features:

  • Player handling (add, remove,...)
  • Game status (end,start,pause,...)
  • load/save
  • Move (and message) handling
  • nextPlayer and gameOver()
  • Network connection (for KGameNetwork)

Example:

KGame *game=new KGame;
The main KDE game object.
Definition kgame.h:47
KGame(int cookie=42, QObject *parent=nullptr)
Create a KGame object.
Definition kgame.cpp:60

Definition at line 46 of file kgame.h.

Member Typedef Documentation

◆ KGamePlayerList

Definition at line 51 of file kgame.h.

Member Enumeration Documentation

◆ GamePolicy

The policy of the property.

This can be PolicyClean (setVale uses send), PolicyDirty (setValue uses changeValue) or PolicyLocal (setValue uses setLocal).

A "clean" policy means that the property is always the same on every client. This is achieved by calling send which actually changes the value only when the message from the MessageServer is received.

A "dirty" policy means that as soon as setValue is called the property is changed immediately. And additionally sent over network. This can sometimes lead to bugs as the other clients do not immediately have the same value. For more information see changeValue.

PolicyLocal means that a KGameProperty behaves like ever "normal" variable. Whenever setValue is called (e.g. using "=") the value of the property is changes immediately without sending it over network. You might want to use this if you are sure that all clients set the property at the same time.

Definition at line 74 of file kgame.h.

◆ GameStatus

Game status - Use this to Control the game flow.

The KGame e.g. sets the status to Pause when you have less player than the minimum amount

Definition at line 98 of file kgame.h.

Constructor & Destructor Documentation

◆ KGame()

KGame::KGame ( int cookie = 42,
QObject * parent = nullptr )
explicit

Create a KGame object.

The cookie is used to identify your game in load/save and network operations. Change this between games.

Definition at line 60 of file kgame.cpp.

◆ ~KGame()

KGame::~KGame ( )
override

Destructs the game.

Definition at line 90 of file kgame.cpp.

Member Function Documentation

◆ activatePlayer()

bool KGame::activatePlayer ( KPlayer * player)

sends activate player: internal use only?

Definition at line 552 of file kgame.cpp.

◆ addPlayer()

bool KGame::addPlayer ( KPlayer * newplayer)

Note that KPlayer::save must be implemented properly, as well as KPlayer::rtti This will only send a message to all clients.

The player is not added directly! See also playerInput which will be called as soon as the player really has been added.

Note that an added player will first get into a "queue" and won't be in the game. It will be added to the game as soon as systemAddPlayer is called what will happen as soon as IdAddPlayer is received.

Note: you probably want to connect to signalPlayerJoinedGame for further initialization!

Parameters
newplayerThe player you want to add. KGame will send a message to all clients and add the player using systemAddPlayer

Definition at line 365 of file kgame.cpp.

◆ addProperty()

bool KGame::addProperty ( KGamePropertyBase * data)

docu: see KPlayer

Definition at line 1240 of file kgame.cpp.

◆ createPlayer()

KPlayer * KGame::createPlayer ( int rtti,
int io,
bool isvirtual )
virtual

This virtual function is called if the KGame needs to create a new player.

This happens only over a network and with load/save. Doing nothing will create a default KPlayer. If you want to have your own player you have to create one with the given rtti here. Note: If your game uses a player class derived from KPlayer you MUST override this function and create your player here. Otherwise the game will crash. Example:

KPlayer *MyGame::createPlayer(int rtti,int io,bool isvirtual)
{
KPlayer *player=new MyPlayer;
if (!isvirtual) // network player ?
{
// Define something like this to add the IO modules
}
return player;
}
IOMode
Identifies the KGameIO via the rtti function.
Definition kgameio.h:76
Base class for a game player.
Definition kplayer.h:60
T qobject_cast(QObject *object)
Parameters
rttiis the type of the player (0 means default KPlayer)
iois the 'or'ed rtti of the KGameIO's
isvirtualtrue if player is virtual

Definition at line 308 of file kgame.cpp.

◆ dataHandler()

KGamePropertyHandler * KGame::dataHandler ( ) const

Returns a pointer to the KGame property handler.

Definition at line 627 of file kgame.cpp.

◆ Debug()

void KGame::Debug ( )
overridevirtual

Gives debug output of the game status.

Reimplemented from KGameNetwork.

Definition at line 1063 of file kgame.cpp.

◆ deleteInactivePlayers()

void KGame::deleteInactivePlayers ( )
protected

Definition at line 124 of file kgame.cpp.

◆ deletePlayers()

void KGame::deletePlayers ( )
protected

Definition at line 107 of file kgame.cpp.

◆ emitSignal

void KGame::emitSignal ( KGamePropertyBase * me)
protectedslot

Called by KGamePropertyHandler only! Internal function!

Definition at line 1258 of file kgame.cpp.

◆ findPlayer()

KPlayer * KGame::findPlayer ( quint32 id) const

Returns the player object for a given player id.

Parameters
idPlayer id
Returns
player object

Definition at line 343 of file kgame.cpp.

◆ findProperty()

KGamePropertyBase * KGame::findProperty ( int id) const

This function allows to find the pointer to a player property when you know its id.

Definition at line 1263 of file kgame.cpp.

◆ gameSequence()

KGameSequence * KGame::gameSequence ( ) const
Returns
The KGameSequence object that is currently in use.
See also
setGameSequence

Definition at line 729 of file kgame.cpp.

◆ gameStatus()

int KGame::gameStatus ( ) const

returns the game status, ie running,pause,ended,...

Returns
game status

Definition at line 617 of file kgame.cpp.

◆ inactivatePlayer()

bool KGame::inactivatePlayer ( KPlayer * player)

sends inactivate player: internal use only?

Definition at line 510 of file kgame.cpp.

◆ inactivePlayerList() [1/2]

KGame::KGamePlayerList * KGame::inactivePlayerList ( )

Returns a list of all inactive players.

Returns
the list of players

Definition at line 632 of file kgame.cpp.

◆ inactivePlayerList() [2/2]

const KGame::KGamePlayerList * KGame::inactivePlayerList ( ) const

The same as inactivePlayerList but returns a const pointer.

Definition at line 637 of file kgame.cpp.

◆ isRunning()

bool KGame::isRunning ( ) const

Is the game running.

Returns
true/false

Definition at line 622 of file kgame.cpp.

◆ load() [1/2]

bool KGame::load ( const QString & filename,
bool reset = true )
virtual

Same as above function but with different parameters.

Parameters
filename- the filename of the file to be opened
reset- shall the game be reset before loading
Returns
true?

Definition at line 130 of file kgame.cpp.

◆ load() [2/2]

bool KGame::load ( QDataStream & stream,
bool reset = true )
virtual

Load a saved game, from file OR network.

This function has to be overwritten or you need to connect to the load signal if you have game data other than KGameProperty. For file load you should reset() the game before any load attempt to make sure you load into an clear state.

Parameters
streama data stream where you can stream the game from
reset- shall the game be reset before loading
Returns
true?

Definition at line 145 of file kgame.cpp.

◆ loadgame()

bool KGame::loadgame ( QDataStream & stream,
bool network,
bool reset )
protectedvirtual

Load a saved game, from file OR network.

Internal. Warning: loadgame must not rely that all players all already activated. Actually the network will activate a player AFTER the loadgame only. This is not true anymore. But be careful anyway.

Parameters
streama data stream where you can stream the game from
networkis it a network call -> make players virtual
resetshall the game be reset before loading
Returns
true?

Definition at line 150 of file kgame.cpp.

◆ loadPlayer()

KPlayer * KGame::loadPlayer ( QDataStream & stream,
bool isvirtual = false )
protected

Load the player list from a stream.

Used for network game and load/save. Can be overwritten if you know what you are doing

Parameters
streamis the stream to save the player to
isvirtualwill set the virtual flag true/false

Definition at line 313 of file kgame.cpp.

◆ maxPlayers()

int KGame::maxPlayers ( ) const

What is the maximal number of players?

Returns
maximal number of players

Definition at line 607 of file kgame.cpp.

◆ minPlayers()

uint KGame::minPlayers ( ) const

What is the minimal number of players?

Returns
minimal number of players

Definition at line 602 of file kgame.cpp.

◆ negotiateNetworkGame()

void KGame::negotiateNetworkGame ( quint32 clientID)
protectedvirtual

This member function will transmit e.g.

all players to that client, as well as all properties of these players (at least if they have been added by KPlayer::addProperty) so that the client will finally have the same status as the master. You want to overwrite this function if you expand KGame by any properties which have to be known by all clients.

Only the ADMIN is allowed to call this.

Parameters
clientIDThe ID of the message client which has connected

Definition at line 1190 of file kgame.cpp.

◆ networkTransmission()

void KGame::networkTransmission ( QDataStream & stream,
int msgid,
quint32 receiver,
quint32 sender,
quint32 clientID )
overridevirtual

This will either forward an incoming message to a specified player (see KPlayer::networkTransmission) or handle the message directly (e.g.

if msgif==IdRemovePlayer it will remove the (in the stream) specified player). If both is not possible (i.e. the message is user specified data) the signal signalNetworkData is emitted.

This emits signalMessageUpdate before doing anything with the message. You can use this signal when you want to be notified about an update/change.

Parameters
msgidSpecifies the kind of the message. See messages.txt for further information
streamThe message that is being sent
receiverThe is of the player this message is for. 0 For broadcast.
sender
clientIDthe client from which we received the transmission - hardly used

Implements KGameNetwork.

Definition at line 744 of file kgame.cpp.

◆ newPlayersJoin()

virtual void KGame::newPlayersJoin ( KGamePlayerList * oldplayer,
KGamePlayerList * newplayer,
QList< int > & inactivate )
inlineprotectedvirtual

This virtual function can be overwritten for your own player management.

It is called when a new game connects to an existing network game or to the network master. In case you do not want all players of both games to be present in the new network game, you can deactivate players here. This is of particular importance if you have a game with fixed number of player like e.g. chess. A network connect needs to disable one player of each game to make sense.

Not overwriting this function will activate a default behaviour which will deactivate players until the maxPlayers() number is reached according to the KPlayer::networkPriority() value. Players with a low value will be kicked out first. With equal priority players of the new client will leave first. This means, not setting this value and not overwriting this function will never allow a chess game to add client players!!! On the other hand setting one player of each game to a networkPriorty of say 10, already does most of the work for you.

The parameters of this function are the playerlist of the network game, which is playerList(). The second argument is the player list of the new client who wants to join and the third argument serves as return parameter. All player ID's which are written into this list will be removed from the created game. You do this by an

inactivate.append(player->id());
Parameters
oldplayer- the list of the network players
newplayer- the list of the client players
inactivate- the value list of ids to be deactivated

Definition at line 698 of file kgame.h.

◆ playerCount()

uint KGame::playerCount ( ) const

Returns how many players are plugged into the game.

Returns
number of players

Definition at line 612 of file kgame.cpp.

◆ playerDeleted()

void KGame::playerDeleted ( KPlayer * player)

Called by the destructor of KPlayer to remove itself from the game.

Definition at line 435 of file kgame.cpp.

◆ playerInput()

virtual bool KGame::playerInput ( QDataStream & msg,
KPlayer * player )
protectedpure virtual

A player input occurred.

This is the most important function as the given message will contain the current move made by the given player. Note that you HAVE to overwrite this function. Otherwise your game makes no sense at all. Generally you have to return TRUE in this function. Only then the game sequence is proceeded by calling playerInputFinished which in turn will check for game over or the next player However, if you have a delayed move, because you e.g. move a card or a piece you want to return FALSE to pause the game sequence and then manually call playerInputFinished to resume it. Example:

bool MyClass::playerInput(QDataStream &msg,KPlayer *player)
{
qint32 move;
msg >> move;
qDebug() << " Player" << player->id() << "moved to" << move;
return true;
}
quint32 id() const
Returns the id of the player.
Definition kplayer.cpp:227
Parameters
msgthe move message
playerthe player who did the move
Returns
true - input ready, false: input manual

◆ playerInputFinished()

KPlayer * KGame::playerInputFinished ( KPlayer * player)
protected

Called after the player input is processed by the game.

Here the checks for game over and nextPlayer (in the case of turn base games) are processed. Call this manually if you have a delayed move, i.e. your playerInput function returns FALSE. If it returns true you need not do anything here.

Returns
the current player

Definition at line 692 of file kgame.cpp.

◆ playerList() [1/2]

KGame::KGamePlayerList * KGame::playerList ( )

Returns a list of all active players.

Returns
the list of players

Definition at line 642 of file kgame.cpp.

◆ playerList() [2/2]

const KGame::KGamePlayerList * KGame::playerList ( ) const

The same as playerList but returns a const pointer.

Definition at line 647 of file kgame.cpp.

◆ policy()

KGame::GamePolicy KGame::policy ( ) const
Returns
The default policy of the property

Definition at line 1268 of file kgame.cpp.

◆ removePlayer()

bool KGame::removePlayer ( KPlayer * player)
inline

Sends a message over the network, msgid=IdRemovePlayer.

As soon as this message is received by networkTransmission systemRemovePlayer is called and the player is removed.

Definition at line 183 of file kgame.h.

◆ reset()

bool KGame::reset ( )
virtual

Resets the game, i.e.

puts it into a state where everything can be started from, e.g. a load game Right now it does only need to delete all players

Returns
true on success

Definition at line 100 of file kgame.cpp.

◆ save() [1/2]

bool KGame::save ( const QString & filename,
bool saveplayers = true )
virtual

Same as above function but with different parameters.

Parameters
filenamethe filename of the file to be saved
saveplayersIf true then all players wil be saved too
Returns
true?

Definition at line 234 of file kgame.cpp.

◆ save() [2/2]

bool KGame::save ( QDataStream & stream,
bool saveplayers = true )
virtual

Save a game to a file OR to network.

Otherwise the same as the load function

Parameters
streama data stream to load the game from
saveplayersIf true then all players wil be saved too
Returns
true?

Definition at line 249 of file kgame.cpp.

◆ savegame()

bool KGame::savegame ( QDataStream & stream,
bool network,
bool saveplayers )
protectedvirtual

Save a game, to file OR network.

Internal.

Parameters
streama data stream where you can stream the game from
networkis it a call from the network or from a file (unused but informative)
saveplayersshall the players be saved too (should be TRUE)
Returns
true?

Definition at line 254 of file kgame.cpp.

◆ savePlayer()

void KGame::savePlayer ( QDataStream & stream,
KPlayer * player )
protected

Prepare a player for being added.

Put all data about a player into the stream so that it can be sent to the KGameCommunicationServer using addPlayer (e.g.)

This function ensures that the code for adding a player is the same in addPlayer as well as in negotiateNetworkGame

Parameters
streamis the stream to add the player
playerThe player to add

Definition at line 284 of file kgame.cpp.

◆ savePlayers()

void KGame::savePlayers ( QDataStream & stream,
KGamePlayerList * list = nullptr )
protected

Save the player list to a stream.

Used for network game and load/save. Can be overwritten if you know what you are doing

Parameters
streamis the stream to save the player ot
listthe optional list is the player list to be saved, default is playerList()

Definition at line 293 of file kgame.cpp.

◆ sendGroupMessage() [1/3]

bool KGame::sendGroupMessage ( const QByteArray & msg,
int msgid,
quint32 sender,
const QString & group )

See KGameNetwork::sendMessage.

Send a network message msg with a given message ID msgid to all players of a given group (see KPlayer::group)

Parameters
msgthe message which will be send. See messages.txt for contents
msgidan id for this message
senderthe id of the sender
groupthe group of the receivers
Returns
true if worked

Definition at line 1213 of file kgame.cpp.

◆ sendGroupMessage() [2/3]

bool KGame::sendGroupMessage ( const QDataStream & msg,
int msgid,
quint32 sender,
const QString & group )

Definition at line 1227 of file kgame.cpp.

◆ sendGroupMessage() [3/3]

bool KGame::sendGroupMessage ( const QString & msg,
int msgid,
quint32 sender,
const QString & group )

Definition at line 1232 of file kgame.cpp.

◆ sendPlayerInput()

bool KGame::sendPlayerInput ( QDataStream & msg,
KPlayer * player,
quint32 sender = 0 )
virtual

Called by KPlayer to send a player input to the KMessageServer.

Definition at line 652 of file kgame.cpp.

◆ sendPlayerProperty()

bool KGame::sendPlayerProperty ( int msgid,
QDataStream & s,
quint32 playerId )

This is called by KPlayer::sendProperty only! Internal function!

Definition at line 1245 of file kgame.cpp.

◆ sendProperty

void KGame::sendProperty ( int msgid,
QDataStream & stream,
bool * sent )
protectedslot

Called by KGamePropertyHandler only! Internal function!

Definition at line 1250 of file kgame.cpp.

◆ setGameSequence()

void KGame::setGameSequence ( KGameSequence * sequence)

Set a new KGameSequence to control player management.

By default KGame uses a normal KGameSequence object. You might want to subclass that and provide your own object.

The previous sequence will get deleted.

Parameters
sequenceThe new game sequence object. KGame takes ownership and will delete it on destruction!

Definition at line 720 of file kgame.cpp.

◆ setGameStatus()

void KGame::setGameStatus ( int status)

sets the game status

Parameters
statusthe new status

Definition at line 734 of file kgame.cpp.

◆ setMaxPlayers()

void KGame::setMaxPlayers ( uint maxnumber)

Set the maximal number of players.

After this is reached no more players can be added. You must be ADMIN to call this (

See also
isAdmin).
Parameters
maxnumbermaximal number of players

Definition at line 588 of file kgame.cpp.

◆ setMinPlayers()

void KGame::setMinPlayers ( uint minnumber)

Set the minimal number of players.

A game can not be started with less player resp. is paused when already running. You must be ADMIN to call this (see isAdmin)!

Parameters
minnumberminimal number of players

Definition at line 595 of file kgame.cpp.

◆ setPolicy()

void KGame::setPolicy ( GamePolicy p,
bool recursive = true )

Changes the consistency policy of a property.

The GamePolicy is one of PolicyClean (default), PolicyDirty or PolicyLocal.

It is up to you to decide how you want to work.

Definition at line 1272 of file kgame.cpp.

◆ signalClientJoinedGame

void KGame::signalClientJoinedGame ( quint32 clientid,
KGame * me )
signal

Is emitted after a client is successfully connected to the game.

The client id is the id of the new game client. An easy way to check whether that's us is

if (clientid==gameid()) .. // we joined
else ... // someone joined the game
Parameters
clientid- The id of the new client
me- our game pointer

◆ signalClientLeftGame

void KGame::signalClientLeftGame ( int clientID,
int oldgamestatus,
KGame * me )
signal

This signal is emitted after a network partner left the game (either by a broken connection or voluntarily).

All changes to the network players have already be done. If there are not enough players left, the game might have been paused. To check this you get the old gamestatus before the disconnection as argument here. The id of the client who left the game allows to distinguish who left the game. If it is 0, the server disconnected and you were a client which has been switched back to local play. You can use this signal to, e.g. set some menus back to local player when they were network before.

Parameters
clientID- 0:server left, otherwise the client who left
oldgamestatus- the gamestatus before the loss
me- our game pointer

◆ signalGameOver

void KGame::signalGameOver ( int status,
KPlayer * current,
KGame * me )
signal

Is emitted after a call to gameOver() returns a non zero return code.

This code is forwarded to this signal as 'status'.

Parameters
statusthe return code of gameOver()
currentthe player who did the last move
mea pointer to the KGame object

◆ signalLoad

void KGame::signalLoad ( QDataStream & stream)
signal

The game will be loaded from the given stream.

Load from here the data which is NOT a game or player property. It is not necessary to use this signal for a full property game.

Parameters
streamthe load stream

◆ signalLoadError

void KGame::signalLoadError ( QDataStream & stream,
bool network,
int cookie,
bool & result )
signal

Is emitted if a game with a different version cookie is loaded.

Normally this should result in an error. But maybe you do support loading of older game versions. Here would be a good place to do a conversion.

Parameters
stream- the load stream
network- true if this is a network connect. False for load game
cookie- the saved cookie. It differs from KGame::cookie()
result- set this to true if you managed to load the game

◆ signalLoadPrePlayers

void KGame::signalLoadPrePlayers ( QDataStream & stream)
signal

The game will be loaded from the given stream.

Load from here the data which is NOT a game or player property. It is not necessary to use this signal for a full property game.

This signal is emitted before the players are loaded by KGame. See also signalLoad

You must load exactly the same data from the stream that you have saved in signalSavePrePlayers. Otherwise player loading will not work anymore.

Parameters
streamthe load stream

◆ signalMessageUpdate

void KGame::signalMessageUpdate ( int msgid,
quint32 receiver,
quint32 sender )
signal

We got an network message.

this can be used to notify us that something changed. What changed can be seen in the message id. Whether this is the best possible method to do this is unclear...

◆ signalNetworkData

void KGame::signalNetworkData ( int msgid,
const QByteArray & buffer,
quint32 receiver,
quint32 sender )
signal

We got an user defined update message.

This is usually done by a sendData in a inherited KGame Object which defines its own methods and has to synchronize them over the network. Reaction to this is usually a call to a KGame function.

◆ signalPlayerJoinedGame

void KGame::signalPlayerJoinedGame ( KPlayer * player)
signal

a player joined the game

Parameters
playerthe player who joined the game

◆ signalPlayerLeftGame

void KGame::signalPlayerLeftGame ( KPlayer * player)
signal

a player left the game because of a broken connection or so!

Note that when this signal is emitted the player is not part of playerList anymore but the pointer is still valid. You should do some final cleanups here since the player is usually deleted after the signal is emitted.

Parameters
playerthe player who left the game

◆ signalPropertyChanged

void KGame::signalPropertyChanged ( KGamePropertyBase * property,
KGame * me )
signal

This signal is emitted if a player property changes its value and the property is set to notify this change.

◆ signalReplacePlayerIO

void KGame::signalReplacePlayerIO ( KPlayer * player,
bool * remove )
signal

When a client disconnects from the game usually all players from that client are removed.

But if you use completely the KGame structure you probably don't want this. You just want to replace the KGameIO of the (human) player by a computer KGameIO. So this player continues game but is from this point on controlled by the computer.

You achieve this by connecting to this signal. It is emitted as soon as a client disconnects on all other clients. Make sure to add a new KGameIO only once! you might want to use isAdmin for this. If you added a new KGameIO set *remove=false otherwise the player is completely removed.

Parameters
playerThe player that is about to be removed. Add your new KGameIO here - but only on one client!
removeSet this to FALSE if you don't want this player to be removed completely.

◆ signalSave

void KGame::signalSave ( QDataStream & stream)
signal

The game will be saved to the given stream.

Fill this with data which is NOT a game or player property. It is not necessary to use this signal for a full property game.

Parameters
streamthe save stream

◆ signalSavePrePlayers

void KGame::signalSavePrePlayers ( QDataStream & stream)
signal

The game will be saved to the given stream.

Fill this with data which is NOT a game or player property. It is not necessary to use this signal for a full property game.

This signal is emitted before the players are saved by KGame. See also signalSave

If you can choose between signalSavePrePlayers and signalSave then better use signalSave

Parameters
streamthe save stream

◆ slotClientConnected

void KGame::slotClientConnected ( quint32 clientId)
protectedslot

◆ slotClientDisconnected

void KGame::slotClientDisconnected ( quint32 clientId,
bool broken )
protectedslot

This slot is called whenever the connection to a client is lost (ie the signal KGameNetwork::signalClientDisconnected is emitted) and will remove the players from that client.

Parameters
clientIdThe client the connection has been lost to
broken(ignore this - not used)

Definition at line 1142 of file kgame.cpp.

◆ slotServerDisconnected

void KGame::slotServerDisconnected ( )
protectedslot

This slot is called whenever the connection to the server is lost (ie the signal KGameNetwork::signalConnectionBroken is emitted) and will switch to local game mode.

Definition at line 1083 of file kgame.cpp.

◆ systemActivatePlayer()

bool KGame::systemActivatePlayer ( KPlayer * player)
protected

activates player.

Use activatePlayer instead!

Definition at line 568 of file kgame.cpp.

◆ systemAddPlayer()

bool KGame::systemAddPlayer ( KPlayer * newplayer)
protected

Adds a player to the game.

Use addPlayer to send KGameMessage::IdAddPlayer. As soon as this Id is received this function is called, where the player (see KPlayer::rtti) is added as well as its properties (see KPlayer::save and KPlayer::load)

This method calls the overloaded systemAddPlayer with the created player as argument. That method will really add the player. If you need to do some changes to your newly added player just connect to signalPlayerJoinedGame Finally adds a player to the game and therefore to the list.

Definition at line 407 of file kgame.cpp.

◆ systemInactivatePlayer()

bool KGame::systemInactivatePlayer ( KPlayer * player)
protected

inactivates player.

Use inactivatePlayer instead!

Definition at line 528 of file kgame.cpp.

◆ systemPlayerInput()

bool KGame::systemPlayerInput ( QDataStream & msg,
KPlayer * player,
quint32 sender = 0 )
virtual

Called when a player input arrives from KMessageServer.

Calls prepareNext (using QTimer::singleShot) if gameOver() returns 0. This function should normally not be used outside KGame. It could be made non-virtual,protected in a later version. At the moment it is a virtual function to give you more control over KGame.

For documentation see playerInput.

Definition at line 668 of file kgame.cpp.

◆ systemRemovePlayer()

void KGame::systemRemovePlayer ( KPlayer * player,
bool deleteit )
protected

Removes a player from the game.

Use removePlayer to send KGameMessage::IdRemovePlayer. As soon as this Id is received systemRemovePlayer is called and the player is removed directly.

Definition at line 470 of file kgame.cpp.


The documentation for this class was generated from the following files:
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Tue Mar 26 2024 11:16:50 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.