-
Notifications
You must be signed in to change notification settings - Fork 0
/
Snake.cpp
61 lines (61 loc) · 2.36 KB
/
Snake.cpp
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
#include "Snake.h"
#include <gl/glut.h>
#include "utils.h"
using namespace GraphUtils;
Snake::Snake() {
snake.push_back(new Block(0.0, 0.0, 0.0, 1, diffBlue, ambiBlue, specBlue));
snake.push_back(new Block(0.0 - snake.size(), 0.0, 0.0, 1, diffLightBlue, ambiLightBlue, specLightBlue));
snake.push_back(new Block(0.0 - snake.size(), 0.0, 0.0, 1, diffLightBlue, ambiLightBlue, specLightBlue));
snake[0]->setColors(diffBlue, ambiBlue, specBlue);
snake[1]->setColors(diffLightBlue, ambiLightBlue, specLightBlue);
snake[2]->setColors(diffLightBlue, ambiLightBlue, specLightBlue);
}
void Snake::draw() {
for (int i = 0; i < snake.size(); i++)
snake[i]->draw();
}
void Snake::move(int key, bool borders) {
switch (key)
{case GLUT_KEY_RIGHT:
if (snake[0]->getXCenter() + 1 >= 12 && !borders)
snake[snake.size() - 1]->setXCenter(-11);
else
snake[snake.size() - 1]->setXCenter(snake[0]->getXCenter() + 1);
snake[snake.size() - 1]->setZCenter(snake[0]->getZCenter());
direction = RIGHT;
break;
case GLUT_KEY_LEFT:
if (snake[0]->getXCenter() - 1 <= -12 && !borders)
snake[snake.size() - 1]->setXCenter(11);
else
snake[snake.size() - 1]->setXCenter(snake[0]->getXCenter() - 1);
snake[snake.size() - 1]->setZCenter(snake[0]->getZCenter());
direction = LEFT;
break;
case GLUT_KEY_UP:
if (snake[0]->getZCenter() - 1 <= -12 && !borders)
snake[snake.size() - 1]->setZCenter(11);
else
snake[snake.size() - 1]->setZCenter(snake[0]->getZCenter() - 1);
snake[snake.size() - 1]->setXCenter(snake[0]->getXCenter());
direction = UP;
break;
case GLUT_KEY_DOWN:
if (snake[0]->getZCenter() + 1 >= 12 && !borders)
snake[snake.size() - 1]->setZCenter(-11);
else
snake[snake.size() - 1]->setZCenter(snake[0]->getZCenter() + 1);
snake[snake.size() - 1]->setXCenter(snake[0]->getXCenter());
direction = DOWN;
break;
default:
break;
}
snake.insert(snake.begin(), snake[snake.size() - 1]);
snake.pop_back();
snake[0]->setColors(diffBlue, ambiBlue, specBlue);
snake[1]->setColors(diffLightBlue, ambiLightBlue, specLightBlue);
}
void Snake::addBlock() {
snake.push_back(new Block(snake[snake.size() - 1]->getXCenter(), snake[snake.size() - 1]->getYCenter(), snake[snake.size() - 1]->getZCenter(), 1, diffLightBlue, ambiLightBlue, specLightBlue));
}