コード例 #1
0
        public void requestMove(NetworkMessage boardMsg)
        {
            byte[] bytes = boardMsg.reader.ReadBytesAndSize();
            CommProtocol.StringMessage msg = Deserialize <Game.CommProtocol.StringMessage> (bytes);

            lastRawBoard = msg.msg;
            string formattedBoard = Connect4JsonParser.formatBoardMsgFromServer(msg.msg, msg.color);

            ClientPlayersHandler.onReceiveServerMsg(formattedBoard, msg.color);
        }
コード例 #2
0
        public void onPlayerMove(object stringMsg, ConnectedClient c)
        {
            CommProtocol.StringMessage msg = (CommProtocol.StringMessage)stringMsg;
            mainGame.debugPrint(msg.color + " sent: " + msg.msg);
            ConnectedPlayer p = mainGame.getCurrentPlayer();

            if (msg.color != p.color || c.peerID != p.client.peerID || gameOver)
            {
                return;
            }
            //Parse incoming msg
            string moveString = msg.msg;

            int[] move = new int[2];
            try{
                int chosenMove = int.Parse(moveString);
                move = new int[] { chosenMove % 8, chosenMove / 8 };
            }
            catch (Exception e) {
                protocol.requestMove(mainGame.getCurrentPlayer().client.peerID, board.ToString(), mainGame.getCurrentPlayer().color);
                return;
            }

            //See if the move is a legit move
            if (board.getAvailabeMoves(p.color == Game.PlayerColor.White).Find(x => x[0] == move[0] && x[1] == move[1]) == null)
            {
                protocol.requestMove(mainGame.getCurrentPlayer().client.peerID, board.ToString(), mainGame.getCurrentPlayer().color);
                return;
            }

            board.playMove(move [0], move [1], p.color == Game.PlayerColor.White);
            RPCMove RPCmsg = new RPCMove(move, p.color);

            mainGame.broadcastRPCMove(RPCmsg);

            mainGame.switchToNextPlayer();
            if (gameIsOver())
            {
                gameOver = true;
                mainGame.setWinner(getWinColor());
                return;
            }

            mainGame.startPlayerTimer();
            protocol.requestMove(mainGame.getCurrentPlayer().client.peerID, board.ToString(), mainGame.getCurrentPlayer().color);
        }
コード例 #3
0
        public void onPlayerMove(object stringMsg, ConnectedClient c)
        {
            CommProtocol.StringMessage msg = (CommProtocol.StringMessage)stringMsg;
            ConnectedPlayer            p   = mainGame.getCurrentPlayer();

            mainGame.debugPrint("Incoming from: " + msg.color);
            if (msg.color != p.color || c.peerID != p.client.peerID || gameOver)
            {
                return;
            }

            string move = msg.msg;
            int    col;

            if (!int.TryParse(move, out col) || !board.isAllowedMove(col))
            {
                protocol.requestMove(p.client.peerID, board.ToString(), mainGame.getCurrentPlayer().color);
                return;
            }

            //Valid move was made
            mainGame.pushToRawLog(move);
            moveCounter++;
            board.dropPiece(p.color == Game.PlayerColor.Yellow ? BoardLogic.Piece.Yellow : BoardLogic.Piece.Red, col);
            RPCMove RPCmsg = new RPCMove(int.Parse(move), p.color);

            mainGame.broadcastRPCMove(RPCmsg);

            Game.PlayerColor winColor = board.hasWinner();
            if (winColor != Game.PlayerColor.None || moveCounter == 42)
            {
                mainGame.setGameOver(winColor);
                return;
            }

            mainGame.switchToNextPlayer();
            mainGame.startPlayerTimer();
            protocol.requestMove(mainGame.getCurrentPlayer().client.peerID, board.ToString(), mainGame.getCurrentPlayer().color);
        }