예제 #1
0
        void CreateSnake()
        {
            //Inicializar a matriz.
            for (int x = 0; x < 50; x++)
            {
                for (int y = 0; y < 50; y++)
                {
                    matrizJogo[x, y] = 0;
                }
            }

            for (int i = 4; i > 1; i--)
            {
                //Cria a peça do Snake. Adiciona na lista e logo após na matriz.
                SnakePiece temp = new SnakePiece(i, 10, 1);
                snakesList[0].Add(temp);
                matrizJogo[i, 10] = 1;
            }

            for (int i = 44; i < 47; i++)
            {
                SnakePiece temp = new SnakePiece(i, 10, 2);
                snakesList[1].Add(temp);
                matrizJogo[i, 10] = 2;
            }
        }
예제 #2
0
        void CreateSnake()
        {
            //Inicializar a matriz.
            for (int x = 0; x < 50; x++)
                for (int y = 0; y < 50; y++)
                    matrizJogo[x, y] = 0;

            for (int i = 4; i > 1; i--)
            {
                //Cria a peça do Snake. Adiciona na lista e logo após na matriz.
                SnakePiece temp = new SnakePiece(i, 10, 1);
                snakesList[0].Add(temp);
                matrizJogo[i, 10] = 1;
            }

            for (int i = 44; i < 47; i++)
            {
                SnakePiece temp = new SnakePiece(i, 10, 2);
                snakesList[1].Add(temp);
                matrizJogo[i, 10] = 2;
            }
        }
예제 #3
0
        internal void AddMoveFromPlayer(int _id, string data)
        {
            Console.WriteLine("addmove from " + _id + " data=" + data);

            StringBuilder builder = new StringBuilder("");
            snakeArray = snakesList[_id].ToArray();

            switch (data)
            {
                case "Down": moveX = 0; moveY = 1; break;

                case "Up": moveX = 0; moveY = -1; break;

                case "Left": moveX = -1; moveY = 0; break;

                case "Right": moveX = 1; moveY = 0; break;
            }

            //Coleta a posicao da 1ª parte da cobra, soma a mesma com o movimento realizado pelo jogador para ser criado entao uma nova cabeça.
            posX = snakeArray[0].x + moveX;
            posY = snakeArray[0].y + moveY;

            if (matrizJogo[posX, posY] == 1 || matrizJogo[posX, posY] == 2 || matrizJogo[posX, posY] == 4)
            {
                wall.Death(players[_id]);
                placar.Morreu();
            }

            else if (matrizJogo[posX, posY] != 3)
            {
                // A posicao do ultimo pedaco da cobra será zerada e deletada da lista.
                matrizJogo[snakeArray[snakeArray.Length - 1].x, snakeArray[snakeArray.Length - 1].y] = 0;
                snakesList[_id].RemoveAt(snakeArray.Length - 1);
            }

            else
            {
                //Caso tenha colidido com a comida, trocar a posicao do alimento e nao deletar a ultima posicao da lista de pedacos de cobra.
                matrizJogo = food.NewPosition(matrizJogo);
                food.SendToClient(matrizJogo, players);

                //Enviar placar ao cliente e averiguar se os 02 podem passar de fase.
                placar.SendToClient(_id, players);

                if (!wentToPhase2)
                    goToPhaseTwo =  placar.VerificarPontos();
            }

            //Insere o novo pedaço da cobra na matriz e na lista (1ª posicao).
            SnakePiece snakeTemp = new SnakePiece(posX, posY, (_id + 1));
            snakesList[_id].Insert(0, snakeTemp);
            matrizJogo[posX, posY] = (_id + 1);

            snakeArrayFinal = snakesList[_id].ToArray();

            for (int i = 0; i < snakeArrayFinal.Length; i++)
            {
                builder.Append(snakeArrayFinal[i].x.ToString() + "," + snakeArrayFinal[i].y.ToString() + ";");
            }

            // notifica a todos o estado atual do jogo.
            foreach (ClientProcessor processor in players)
            {
                processor.SendMatriz(builder, (_id + 1));
                Console.WriteLine(builder);
            }

            if (goToPhaseTwo)
            {
                //Servidor escreve ao cliente que todas as snakes estão vivas.
                wall.Life(players);

                snakesList[0].Clear();
                snakesList[1].Clear();

                CreateSnake();

                matrizJogo = food.NewPosition(matrizJogo);
                food.SendToClient(matrizJogo, players);

                matrizJogo = wall.CreateWallPhase01(matrizJogo);
                matrizJogo = wall.CreateWallPhase02(matrizJogo);

                wall.SendToCLient(players, matrizJogo);

                goToPhaseTwo = false;
                wentToPhase2 = true;
            }
        }
예제 #4
0
        internal void AddMoveFromPlayer(int _id, string data)
        {
            Console.WriteLine("addmove from " + _id + " data=" + data);

            StringBuilder builder = new StringBuilder("");

            snakeArray = snakesList[_id].ToArray();

            switch (data)
            {
            case "Down": moveX = 0; moveY = 1; break;

            case "Up": moveX = 0; moveY = -1; break;

            case "Left": moveX = -1; moveY = 0; break;

            case "Right": moveX = 1; moveY = 0; break;
            }

            //Coleta a posicao da 1ª parte da cobra, soma a mesma com o movimento realizado pelo jogador para ser criado entao uma nova cabeça.
            posX = snakeArray[0].x + moveX;
            posY = snakeArray[0].y + moveY;

            if (matrizJogo[posX, posY] == 1 || matrizJogo[posX, posY] == 2 || matrizJogo[posX, posY] == 4)
            {
                wall.Death(players[_id]);
                placar.Morreu();
            }

            else if (matrizJogo[posX, posY] != 3)
            {
                // A posicao do ultimo pedaco da cobra será zerada e deletada da lista.
                matrizJogo[snakeArray[snakeArray.Length - 1].x, snakeArray[snakeArray.Length - 1].y] = 0;
                snakesList[_id].RemoveAt(snakeArray.Length - 1);
            }

            else
            {
                //Caso tenha colidido com a comida, trocar a posicao do alimento e nao deletar a ultima posicao da lista de pedacos de cobra.
                matrizJogo = food.NewPosition(matrizJogo);
                food.SendToClient(matrizJogo, players);

                //Enviar placar ao cliente e averiguar se os 02 podem passar de fase.
                placar.SendToClient(_id, players);

                if (!wentToPhase2)
                {
                    goToPhaseTwo = placar.VerificarPontos();
                }
            }

            //Insere o novo pedaço da cobra na matriz e na lista (1ª posicao).
            SnakePiece snakeTemp = new SnakePiece(posX, posY, (_id + 1));

            snakesList[_id].Insert(0, snakeTemp);
            matrizJogo[posX, posY] = (_id + 1);

            snakeArrayFinal = snakesList[_id].ToArray();

            for (int i = 0; i < snakeArrayFinal.Length; i++)
            {
                builder.Append(snakeArrayFinal[i].x.ToString() + "," + snakeArrayFinal[i].y.ToString() + ";");
            }

            // notifica a todos o estado atual do jogo.
            foreach (ClientProcessor processor in players)
            {
                processor.SendMatriz(builder, (_id + 1));
                Console.WriteLine(builder);
            }

            if (goToPhaseTwo)
            {
                //Servidor escreve ao cliente que todas as snakes estão vivas.
                wall.Life(players);

                snakesList[0].Clear();
                snakesList[1].Clear();

                CreateSnake();

                matrizJogo = food.NewPosition(matrizJogo);
                food.SendToClient(matrizJogo, players);

                matrizJogo = wall.CreateWallPhase01(matrizJogo);
                matrizJogo = wall.CreateWallPhase02(matrizJogo);

                wall.SendToCLient(players, matrizJogo);

                goToPhaseTwo = false;
                wentToPhase2 = true;
            }
        }