Ejemplo n.º 1
0
        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
        }
Ejemplo n.º 2
0
        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();
        }