Ejemplo n.º 1
0
        private void generateGame()
        {
            for (int i = 0; i < 8; i++)
            {
                BoardUpdate b = new BoardUpdate();
                b.redDir       = 0;
                b.blueDir      = 2;
                b.updateNumber = (uint)i;
                b.blueCoords   = newPos(2 + i, 5); //new int[]{ 2 + i};
                b.redCoords    = newPos(8 - i, 7); //new int[]{ 38 - i};
                moves.Add(b);
            }

            finalBoard              = new BoardUpdate();
            finalBoard.redDir       = 0;
            finalBoard.blueDir      = 2;
            finalBoard.updateNumber = (uint)8;
            finalBoard.blueCoords   = newPos(10, 5);
            finalBoard.redCoords    = newPos(0, 7);
            finalBoard.gameOver     = true;
            finalBoard.winnerColor  = PlayerColor.Blue;
            moves.Add(finalBoard);

            finalMsg = new GameInfo("Some Username", Game.PlayerColor.None,
                                    new int[][] { new int[] { 20, 0 } },
                                    true
                                    );
        }
        //The protocol should later be re-written so we can loop through all the players
        public void handleGameUpdate(BoardUpdate update)
        {
            if (updateCounter == 0)
            {
                initSmoothRenderer(update);
            }
            else if (updateCounter == 1)            //We can't interpolate until we have atleast two updates
            {
                startInterpolation();
            }

            foreach (Position2D i in update.blueCoords.Distinct().Where((c) => !addedPlayerPos[0].Contains(c)))
            {
                distributeNewPosition(0, i);
            }
            foreach (Position2D i in update.redCoords.Distinct().Where((c) => !addedPlayerPos[1].Contains(c)))
            {
                distributeNewPosition(1, i);
            }

            addedPlayerPos [0].AddRange(update.blueCoords);
            addedPlayerPos [1].AddRange(update.redCoords);

            players.ForEach((p) => { p.startNewTargetPos(); });
            interpolationCounter = 0;
            updateCounter++;
        }
 private void broadcastBoard(BoardUpdate b)
 {
     foreach (ConnectedPlayer p in players)
     {
         b.myColor = p.color;
         try{
             protocol.sendBoard(gameMaster.getMatchingPlayer(p.color).client.peerID, b);
         }catch (Exception e) {
             Debug.LogError(e.StackTrace);
             Debug.LogError(e.Message);
             Debug.LogError("Error Send");
         }
     }
 }
        private void initSmoothRenderer(BoardUpdate initUpdate)
        {
            addedPlayerPos [0] = new List <Position2D> ();
            addedPlayerPos [1] = new List <Position2D> ();

            Vector3 firstPosBlue = theRenderer.getBlockFromPos(initUpdate.blueCoords [0]).getPos();
            Vector3 firstPosRed  = theRenderer.getBlockFromPos(initUpdate.redCoords [0]).getPos();

            players.Add(Instantiate(headPrefab, firstPosBlue, Quaternion.identity).GetComponent <SnakeHead> ());
            players.Add(Instantiate(headPrefab, firstPosRed, Quaternion.identity).GetComponent <SnakeHead> ());
            for (int i = 0; i < players.Count; i++)
            {
                players [i].init(playerColors [i]);
            }
        }
        public void sendBoardUpdate(int[,] grid, Position2D[] playerPos, int[] dir)
        {
            List <Position2D> rCoord = new List <Position2D> (), bCoord = new List <Position2D> ();
            int boardSize = grid.GetLength(0);

            bCoord.AddRange(bodies [0].getRecentPlayerBody());
            rCoord.AddRange(bodies [1].getRecentPlayerBody());

            bCoord.Add(playerPos[0]);
            rCoord.Add(playerPos[1]);

            BoardUpdate update = new BoardUpdate(updateCounter++, rCoord.ToArray(), bCoord.ToArray(), dir[0], dir[1]);

            broadcastBoard(update);
        }
Ejemplo n.º 6
0
        protected override void displayNewUpdate(GameLogState update)
        {
            if (gameOver)
            {
                return;
            }

            BoardUpdate state = SnakeGameLogProtocol.parseGameState(update.log[0]);

            if (state.gameOver)
            {
                handleAdminGameOver(state);
            }
            else
            {
                handleBoardUpdate(state);
            }
        }
Ejemplo n.º 7
0
 public void handleAdminGameOver(BoardUpdate state)
 {
     gameOver = true;
     if (state.winnerColor == PlayerColor.None)
     {
         smoothRenderer.explodePlayer(0);
         smoothRenderer.explodePlayer(1);
         displayCrash(GameUtils.pos2DToVec2(state.blueCoords[0]));
         displayCrash(GameUtils.pos2DToVec2(state.redCoords[0]));
     }
     else if (state.winnerColor == PlayerColor.Red)
     {
         displayCrash(GameUtils.pos2DToVec2(state.blueCoords[0]));
         smoothRenderer.explodePlayer(0);
     }
     else
     {
         displayCrash(GameUtils.pos2DToVec2(state.redCoords[0]));
         smoothRenderer.explodePlayer(1);
     }
 }
Ejemplo n.º 8
0
        public void handleBoardUpdate(NetworkMessage msg)
        {
            BoardUpdate updateMsg = Deserialize <BoardUpdate> (msg.reader.ReadBytesAndSize());

            if (updateMsg.updateNumber <= lastUpdateID)
            {
                return;
            }
            lastUpdateID = updateMsg.updateNumber;

            localRenderer.handleBoardUpdate(updateMsg);

            //Extract information and store it
            lastBlocked = new List <Position2D> ();
            lastBlocked.AddRange(updateMsg.blueCoords);
            lastBlocked.AddRange(updateMsg.redCoords);
            lastBluePos = updateMsg.blueCoords [updateMsg.blueCoords.Length - 1];
            lastRedPos  = updateMsg.redCoords [updateMsg.redCoords.Length - 1];
            lastBlueDir = updateMsg.blueDir;
            lastRedDir  = updateMsg.redDir;

            addLocalBoardUpdate(lastBlocked, updateMsg.blueDir, updateMsg.redDir, lastBluePos, lastRedPos, BoardState.ongoing);
        }
Ejemplo n.º 9
0
 public void sendBoard(int targetID, BoardUpdate board)
 {
     sendMsg(board, targetID, (short)MsgType.boardUpdate);
 }
Ejemplo n.º 10
0
 //The protocol should later be re-written so we can loop through all the players
 public void handleBoardUpdate(BoardUpdate updateMsg)
 {
     smoothRenderer.handleGameUpdate(updateMsg);
 }