-
Notifications
You must be signed in to change notification settings - Fork 0
/
Snake.hpp
122 lines (98 loc) · 2.35 KB
/
Snake.hpp
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// MIT License
//
// Copyright (c) 2024 Tomáš Mark
//
#ifndef __SNAKE_H__
#define __SNAKE_H__
#include <map>
#include <string>
#include <memory>
static const short MAX_SNAKE_LENGTH = 256 + 1;
class Snake
{
int totalW;
int totalH;
std::shared_ptr<int[]> snakeCoosX;
std::shared_ptr<int[]> snakeCoosY;
std::shared_ptr<int[]> backupCoosX;
std::shared_ptr<int[]> backupCoosY;
int id;
int stepDivider;
int length;
int direction;
bool isDead;
int deadCode;
const std::map<int, std::string> deadDescription{
{0, "is living"}, {1, "wall"}, {2, "self"}, {3, "another Snake"}};
void inhumeSnake();
void backupCoordinates();
void restoreCoordinatesShifted();
bool isStepBack(int directionPassed) const;
public:
Snake(int id, int stepDivider, int totalW, int totalH, int spawnX, int spawnY);
~Snake();
void setMyDirectionAndShift(int directionPassed, bool stopSnake = false);
int getDirection() const
{
return this->direction;
};
void setDeadAndCode(int deadCode)
{
this->deadCode = deadCode;
this->isDead = true;
};
int getDeadCode() const
{
return this->deadCode;
};
bool getIsDead() const
{
return this->isDead;
};
std::string getDeadDescripion() const
{
return this->deadDescription.at(deadCode);
};
// eat fruit and grow up
int getElementOfEattenFruit(
const int *FruitX,
const int *FruitY,
int fruitCount) const;
void growUp()
{
this->length += 1;
};
int getLength() const
{
return this->length;
};
int getXHead() const
{
return this->snakeCoosX[0];
};
int getYHead() const
{
return this->snakeCoosY[0];
}
const int *getX() const
{
return this->snakeCoosX.get();
};
const int *getY() const
{
return this->snakeCoosY.get();
};
void setX(int index, int value)
{
this->snakeCoosX[index] = value;
}
const int *getBackupX() const
{
return this->backupCoosX.get();
};
const int *getBackupY() const
{
return this->backupCoosY.get();
};
};
#endif // __SNAKE_H__