Prazo de entrega:
Segunda chance:
Esta tarefa tem peso 3.
Para simular um jogo da cobrinha, você precisará implementar uma lista ligada para guardar uma sequência de bloquinhos.
O jogo Snake, também conhecido como “jogo da cobrinha”, é um jogo antigo que ficou conhecido por diversas versões. A primeira versão veio com no jogo Blockade de 1976.
![](cobra.png)
A cobra move-se numa matriz e seu objetivo é passear por essa matriz alimentando-se com frutas que aparecem aleatoriamente em diferentes posições da matriz, sempre uma por vez. A cobra começa com tamanho um e, toda vez que se alimenta, seu tamanho cresce de uma unidade e uma nova fruta aparece. O jogo só para quando um dos dois eventos seguintes ocorrer:
-
A cobra colide com seu próprio corpo (GAME OVER);
-
A cobra ocupa todas as posições da matriz (YOU WIN).
Uma colisão ocorre quando alguma parte da cobra já ocupa a posição para onde a cabeça iria se mover, mesmo que seja a última posição da cauda da cobra.
Em cada passo, a cobra move a cabeça para uma das quatro posições vizinhas (cima, baixo, esquerda e direita) e as posições de seu corpo seguem as posições anteriores. Para controlar a direção do movimento, o jogador pressiona uma de quatro teclas:
-
w move a cabeça para cima, da posição $(i,j)$ para $(i-1,j)$;
-
s move a cabeça para baixo, da posição $(i,j)$ para $(i+1,j)$;
-
a move a cabeça para esquerda, da posição $(i,j)$ para $(i,j-1)$;
-
d move a cabeça para direita, da posição $(i,j)$ para $(i,j+1)$.
De acordo com as regras do jogo, quando a cobra cruza alguma borda da matriz, a cabeça vai para a posição correspondente na borda oposta da posição anterior. Por exemplo, quando a cabeça da cobra está na última coluna e a cobra se move para direta, logo em seguida, a cabeça irá aparecer na mesma linha, mas na primeira coluna. Analogamente, se a cabeça estiver na primeira linha e a cobra se mover para cima, então ela irá aparecer na última linha e assim por diante.
Implemente um programa cobra
que simula o jogo da cobrinha.
Entrada
-
A primeira linha da entrada contém uma linha
MATRIZ <m> <n>
indicando o número de linhas e colunas da matriz. -
Na próxima linha, há uma instrução
COBRA <i> <j>
indicando a linha e a coluna da posição inicial da cobra. -
Depois, há uma sequência de linhas que podem ser:
-
uma instrução
FRUTA <i> <j>
indicando a posição de uma nova fruta; -
algum caractere
w
,s
,a
, oud
representando a direção em que a cabeça da cobra se move no passo atual.
-
MATRIZ 2 2
COBRA 1 1
FRUTA 0 0
w
a
FRUTA 1 1
s
d
FRUTA 0 1
w
Saída
A saída conterá o estado da matriz no início do jogo, após cada passo completo
da cobra e após cada fruta aparecer. Cada posição vazia da matriz será
representada por um caractere _
e cada posição da cobra por um #
. A posição
da fruta conterá um *
. Utilize espaços para separar as colunas e uma quebra de
linha entre as matrizes. No final da saída, deve haver uma linha GAME OVER
ou
YOU WIN
, de acordo com o resultado do jogo.
* _
_ #
* #
_ _
# #
_ _
# #
_ *
# _
# *
# _
# #
# *
# #
# #
# #
YOU WIN
Critérios
É obrigatório utilizar uma lista duplamente ligada para representar as posições da matriz ocupadas pela cobra durante o jogo.