private void finish() { PlayersReady -= finish; //disconnect(this, SIGNAL(playersReady()), this, SLOT(finish())); for (int i = 0; i < 2; i++) { if (m_player[i] != null) { // Need to simulate Qt's Disconnect funciton here: m_player[i].Disconnect(); // Not exactly sure how to do it, so here's an attempt: m_player[i].ResultClaim -= onResultClaim; m_player[i].MoveMade -= OnMoveMade; m_player[i].Ready -= onPlayerReady; m_player[i].Disconnected -= onPlayerReady; } } Finished(this); // raise Finished event }
private void startGame() { Result = new Result(); // raise HumanEnabled event HumanEnabled(false); PlayersReady -= startGame; //disconnect(this, SIGNAL(playersReady()), this, SLOT(startGame())); if (IsFinished) { return; } m_gameInProgress = true; for (int i = 0; i < 2; i++) { Player player = m_player[i]; //Q_ASSERT(player != 0); //Q_ASSERT(player->isReady()); if (player.State == PlayerState.Disconnected) { return; } /* if (!player->supportsVariant(m_board->variant())) * { * qDebug("%s doesn't support variant %s", * qPrintable(player->name()), qPrintable(m_board->variant())); * m_result = Chess::Result(Chess::Result::ResultError); * stop(); * return; * }*/ } resetBoard(); initializePgn(); Started(this); // Raise a Started event FENChanged(Game.FENStart); // Raise a FENChanged event for (int side = 0; side < 2; side++) { // Q_ASSERT(m_timeControl[side].isValid()); m_player[side].TimeControl = m_timeControl[side]; m_player[side].NewGame(side, m_player[side ^ 1], Game); } // Play the forced opening moves first for (int i = 0; i < Moves.Count; i++) { List <Movement> move = new List <Movement>() { Moves[i] }; // Q_ASSERT(m_board->isLegalMove(move)); addPGNMove(move, "book"); PlayerToMove.MakeBookMove(move); PlayerToWait.MakeMove(move); //Game.PerformMove( move, true ); emitLastMove(); if (!Game.Result.IsNone) { // qDebug("Every move was played from the book"); Stop(); return; } } for (int i = 0; i < 2; i++) { m_player[i].MoveMade += OnMoveMade; // connect(m_player[i], SIGNAL(moveMade(Chess::Move)), this, SLOT(onMoveMade(Chess::Move))); if (m_player[i].IsHuman) { ((HumanPlayer)m_player[i]).WokeUp += Resume; //connect(m_player[i], SIGNAL(wokeUp()), this, SLOT(resume())); } } startTurn(); }