Untitled
unknown
plain_text
10 months ago
3.1 kB
7
Indexable
package org.example;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Random;
public class SnakeGame {
public enum Direction {
UP, DOWN, LEFT, RIGHT;
}
private static final int WIDTH = 3;
private static final int HEIGHT = 3;
private Deque<int[]> snake;
private Direction direction;
private int[] food;
private boolean gameOver;
public SnakeGame() {
snake = new ArrayDeque<>();
snake.addFirst(new int[]{0, 0});
food = new int[2];
direction = Direction.RIGHT;
placeFood();
gameOver = false;
}
private void placeFood() {
Random random = new Random();
food[0] = random.nextInt(WIDTH);
food[1] = random.nextInt(HEIGHT);
}
public void move() {
if(gameOver) {
return;
}
int[] head = snake.peekFirst();
int[] newHead = new int[]{head[0], head[1]};
switch(direction) {
case UP:
newHead[0]--;
break;
case DOWN:
newHead[0]++;
break;
case LEFT:
newHead[1]--;
break;
case RIGHT:
newHead[1]++;
break;
}
if(newHead[0] < 0 || newHead[0] >= HEIGHT || newHead[1] < 0 || newHead[1] >= WIDTH) {
gameOver = true;
return;
}
for(int [] body: snake) {
if(body[0] == newHead[0] && body[1] == newHead[1]) {
gameOver = true;
return;
}
}
snake.push(newHead);
if(newHead[0] == food[0] && newHead[1] == food[1]) {
placeFood();
} else {
snake.removeLast();
}
}
public void changeDirection(Direction newDirection) {
if((direction == Direction.UP && newDirection != Direction.DOWN)
|| (direction == Direction.DOWN && newDirection != Direction.UP)
|| (direction == Direction.LEFT && newDirection != Direction.RIGHT)
|| (direction == Direction.RIGHT && newDirection != Direction.LEFT)) {
direction = newDirection;
}
}
public void display() {
for(int i = 0; i < HEIGHT; i++) {
for(int j = 0; j < WIDTH; j++) {
boolean printed = false;
for(int[] body: snake) {
if(body[0] == i && body[1] == j) {
System.out.print("S ");
printed = true;
break;
}
}
if(!printed && food[0] == i && food[1] == j) {
System.out.print("F ");
printed = true;
}
if(!printed) {
System.out.print(". ");
}
}
System.out.println();
}
System.out.println();
}
public boolean isGameOver() {
return gameOver;
}
}
Editor is loading...
Leave a Comment