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; } }
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; } }
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; } }
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; } }