-
Notifications
You must be signed in to change notification settings - Fork 0
/
GameModel.java
71 lines (64 loc) · 1.82 KB
/
GameModel.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package org.snake.model;
import lombok.Getter;
import lombok.Setter;
/**
* Business model of snake game.
*/
public class GameModel {
public boolean isGameOvered = false;
@Getter
private Snake playerSnake;
@Getter
private Snake gameSnake;
@Getter
private Food food;
private Intelligence intelligence;
@Getter
@Setter
private boolean moving = false;
/**
* GameModel constructor.
*
* @param width with of the firld
* @param height height of the firld
*/
public GameModel(int width, int height) {
playerSnake = new Snake(width, height);
gameSnake = new Snake(width, height);
gameSnake.getHead().setYcord(height - 1);
food = new Food(width, height);
food.generateNew();
intelligence = new Intelligence(gameSnake, playerSnake, food);
}
/**
* Updates the game state.
*/
public void update() {
if (isGameOvered) {
return;
}
moving = false;
playerSnake.move();
intelligence.manageGameSnake();
gameSnake.move();
if (playerSnake.checkHeadCollisionWithItsBody()
|| playerSnake.checkCollisionWithHead(gameSnake.getBody())) {
gameOver();
return;
}
if (gameSnake.checkHeadCollisionWithItsBody()
|| gameSnake.checkCollisionWithHead(playerSnake.getBody())) {
gameSnake = new Snake(playerSnake.getWidth(), playerSnake.getHeight());
}
if (playerSnake.checkCollisionWithHead(food)) {
playerSnake.growUp();
do {
food.generateNew();
} while (playerSnake.checkCollisionWithBody(food));
}
}
private void gameOver() {
isGameOvered = true;
System.out.println("Game over :(");
}
}