-
Notifications
You must be signed in to change notification settings - Fork 1
/
snake.h
56 lines (36 loc) · 948 Bytes
/
snake.h
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
#pragma once
#include <memory>
#include <deque>
#include <QGraphicsItem>
enum class Direction : uint8_t {
NoMove,
MoveLeft,
MoveRight,
MoveUp,
MoveDown
};
class GameStage;
class Snake final : public QGraphicsItem {
public:
explicit Snake(GameStage* stage);
void setDirection(Direction dir) noexcept;
Direction direction() const noexcept;
QRectF boundingRect() const override;
QPainterPath shape() const override;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) override;
void advance(int step) override;
void setPause(bool pause = true);
QPointF head() const;
QList<QPointF> const & tail() const;
private:
QPointF moveLeft();
QPointF moveRight();
QPointF moveUp();
QPointF moveDown();
bool is_pause_{false};
Direction dir_;
int32_t growing_;
GameStage* stage_;
QPointF head_;
QList<QPointF> tail_;
};