xxxxxxxxxx
129
/*
Roteiro:
1 - Area do jogo (Classe)
- Desenha grade
- Desenha borda
2 - Comidas
- Adicionar pares x e y aleatórios no vetor
- Desenha comida
3 - Cobra
- Definição inicial, "Array" de posições
- Estratégia de movimentação
- Desenha o corpo da cobra na área de desenho
4 - Movimentação com o teclado
5 - Colisão com paredes
6 - Cabeçalho com as informações do jogo
- Método para aumentar a pontuação
- Método para diminuir a vida
- Método para aumentar o nível
7 - Colisão com comidas - retorna o índice
- Cresce o tamanho da cobra
- Aumenta a pontuação
- Se comer todas as comidas segue para o próximo nível
8 - Aumenta de nível
- Amenta a quantidade de comidas
- Cria novas comidas no cenário
- Atualiza o tamanho da cobra
9 - Retira um vida
- Se chegar em zero, vai para tela de game over
Referências:
- Código das setas do teclado https://p5js.org/reference/#/p5/keyCode
*/
const bgColor = "#101010";
const whiteColor = "#F1F1F1";
const grayColor = "#303030";
let header;
let gameArea;
let snake;
let screen = "play";
let foodAmout = 3;
function setup() {
createCanvas(695, 695);
frameRate(10);
header = new Header("Snake Game");
gameArea = new GameArea(30, 120, foodAmout);
snake = new Snake();
gameArea.setSnakeBody(snake.getBody());
}
function gameOverScreen() {
background(bgColor);
fill(whiteColor);
stroke(grayColor);
textAlign(CENTER);
textSize(70);
text("Game Over", width / 2, height / 2);
}
function playGame() {
background(bgColor);
header.show();
gameArea.show();
/*
- - Lógica do jogo - -
*/
//Checa se colidiu com a comida e qual o seu indice no vetor de comidas
let foodIndex = gameArea.foodCollision(snake.getNextMove());
//Checa se colidiu com a parede
if (gameArea.isWallCollision(snake.getNextMove())) {
snake.resetBody();
//Perde uma vida
if (!header.reduceLife()) {
//Se tiver zero vidas o jogo termina
screen = "end";
}
} else if (foodIndex != -1) {
//Remove comida
gameArea.removeFood(foodIndex);
//Aumenta a cobra
snake.grow();
//Ganha pontos
header.increaseScore();
// Muda de nível
if (!gameArea.hasFood()) {
foodAmout = foodAmout + 2;
//Cria novas comidas no cenário
gameArea.generateFoods(foodAmout);
//Aumento o nível do jogo
header.increaseLevel();
//Reinicia o tamanho da cobra
snake.resetBody();
}
} else {
snake.move();
}
}
function draw() {
if (screen == "play") {
playGame();
} else if (screen == "end") {
gameOverScreen();
}
}
function keyPressed() {
//Seta para baixo
if (keyCode == 40) {
snake.setDirection(0, 1);
}
//Seta para esquerda
if (key == "ArrowLeft") {
snake.setDirection(-1, 0);
}
//Seta para direita
if (keyCode == 39) {
snake.setDirection(1, 0);
}
//Seta para cima
if (keyCode == 38) {
snake.setDirection(0, -1);
}
}