-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFigure.h
135 lines (91 loc) · 2.3 KB
/
Figure.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
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
123
124
125
126
127
128
129
130
131
132
133
134
135
//
// Created by Wangdawei on 2018/12/5.
//
#ifndef MANUAL_PROJECT3_INTERSTELLAR_FIGURE_H
#define MANUAL_PROJECT3_INTERSTELLAR_FIGURE_H
#include "vector.h"
#include <vector>
#include "Shape.h"
#include "slot.h"
#include "ParkingLot.h"
using namespace std;
class MainFigure {
public:
// static MainFigure &getInstance();
static void draw(int *argc, char **argv);
static void initPark(int column);
private:
static ParkingLot parkingLot;
static void glDraw();
static void TimeStep(int n);
MainFigure();
~MainFigure();
MainFigure(MainFigure const &);
MainFigure &operator=(MainFigure const &);
};
class Group : public Figure {
public:
void draw() const override;
void setAnchor(Vec v);
const Vec &getAnchor() const;
void setDestination(const Slot *desti);
const Vec &getDestination() const;
const Slot *retSlot() const;
void move(Vec v);
void rotate(Point center, double angle);
virtual void specialMove() = 0;
virtual ~Group();
protected:
std::vector<Shape *> shapes;
double size;
private:
Vec anchor;
Vec destination;
const Slot *desti;
};
class Car : public Group {
public:
explicit Car(Vec v = Vec(0, 0), double angle = 0, double size = 1);
void set(double w, double h);
void specialMove() override;
private:
double width, height;
};
class Teleported : public Group {
public:
explicit Teleported(Vec v = Vec(0, 0), double size = 1);
void set(double w, double h);
void specialMove() override;
private:
double width, height;
};
class UFO : public Group {
public:
explicit UFO(Vec initial = Vec(0, 0), double angle = 0, double size = 1);
void specialMove() override;
private:
double angle;
double bodyRadius;
double wheelUpLength;
double wheelDownLength;
double wheelHeight;
double antennaLength;
};
class Rocket : public Group {
public:
explicit Rocket(Vec initial = Vec(0, 0), double angle = 0, double size = 1);
void specialMove() override;
private:
double angle;
double bodyWidth;
double bodyHeight;
double wingLength;
double wingHeight;
double jetHeight;
double roofHeight;
double jetUpLength;
void zoomIn();
void zoomOut();
};
inline double rand0to1();
#endif //MANUAL_PROJECT3_INTERSTELLAR_FIGURE_H