-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
276 lines (241 loc) · 7.88 KB
/
main.cpp
File metadata and controls
276 lines (241 loc) · 7.88 KB
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#include <cmath>
#define PI 3.14159265
#include <iostream>
#include <time.h>
#include <sstream>
using namespace sf;
std::ostringstream score_string; // òåêñòîâàÿ ïåðåìåííàÿ äëÿ êîëè÷åñòâà î÷êîâ
std::ostringstream level_string; // òåêñòîâàÿ ïåðåìåííàÿ äëÿ íîìåðà óðîâíÿ
int deg = 0, // óãîë ïîâîðîòà øïðèöà â ãðàäóñàõ
d = 0, // âåëè÷èíà ñìåùåíèÿ øïðèöà
score = 0, // êîëè÷åñòâî î÷êîâ
score_from_begin_level = 0, // êîëè÷åñòâî íàáðàííûõ î÷êîâ ñ íà÷àëà óðîâíÿ
level = 1, // óðîâåíü
//i = 0, // ñ÷¸ò÷èê ïîïàäàíèé
num_for_sound_check = 1, // ÷òîáû çâóê ïîïàäàíèÿ áûë 1 ðàç
num_for_sound_start = 1, // ÷òîáû çâóê ñòàðòà áûë 1 ðàç
num_for_sound_off = 1; // ÷òîáû çâóê ïðîïóñêà áûë 1 ðàç
float k = 0.1, h = 0.1, // ìàñøòàáû "ïðîèãðàë" è "â ÿáëî÷êî"
speed_ass = 4; // ñêîðîñòü ïîïû
double rad = 0, // óãîë ïîâîðîòà øïðèöà â ðàäèàíàõ
dx = 0, // êîýôôèöèåíò ñìåùåíèÿ øïðèöà ïî ïñè Õ
dy = 0, // êîýôôèöèåíò ñìåùåíèÿ øïðèöà ïî ïñè Ó
x_ass = 400, // êîîðäèíàòà ïîïû Õ
y_ass = 80, // êîîðäèíàòà ïîïû Ó
x_arrow = 0, // êîîðäèíàòà øïðèöà Õ
y_arrow = 0, // êîîðäèíàòà øïðèöà Ó
scale = 1, // ìàñøòàá øïðèöà
x2 = 0, // êîîðäèíàòà êîíöà èãëû Õ
y2 = 0, // êîîðäèíàòà êîíöà èãëû Ó
timer = 0, // ìåòêà âðåìåíè
delay = 0.01; // çàäåðæêà äëÿ ìàñøòàáèðîâàíèÿ ÿáëî÷êà
bool start = false, // ñòàðò øïðèöà
check = false; // ïîïàäàíèå â öåëü
const int def = 40; // òî÷íîñòü äëÿ ïîïàäàíèÿ ( +/- )
const int speed_arrow = 17; // ñêîðîñòü øïðèöà
const float scale_factor = 0.1; // âåëè÷èíà èçìåíåíèÿ ìàñøòàáà â ÿáëî÷êî
const int score_add = 100; // ñòîëüêî î÷êîâ äîáàâëÿåì ïðè ïîïàäàíèè
const float speed_ass_add = 1.1; // âî ñòîëüêî ðàç óâèëè÷èâàåì ñêîðîñòü ïîïû ïðè ïîïàäàíèè
//const int num_for_add_level = 3; // ñòîëüêî ðàç íàäî ïîïàñòü, ÷òîáû ïîâûñèëñÿ óðîâåíü
const float speed_ass_ini = 4; // íà÷àëüíàÿ ñêîðîñòü ïîïû
const int score_next = 300; // ñòîëüêî î÷êîâ íàäî íàáðàòü äëÿ ïåðåõîäà íà ñëåäóùèé óðîâåíü
Clock cl;
int main()
{
Font font;
font.loadFromFile("font\\CyrilicOld.TTF");
Text score_text("", font, 25);
Text level_text("", font, 25);
ContextSettings settings;
settings.antialiasingLevel = 8;
RenderWindow window(VideoMode(800, 600), "Doctor Ass", Style::Default, settings);
// çàãðóæàåì çâóêè
SoundBuffer buffer, buffer_start, buffer_off;
Sound check_sound;
Sound start_sound;
Sound off_sound;
score_string << "0"; level_string << "1";
while (window.isOpen())
{
Event event;
while (window.pollEvent(event))
{
// Ïîëüçîâàòåëü íàæàë íà «êðåñòèê» è õî÷åò çàêðûòü îêíî?
if (event.type == Event::Closed) window.close();
// Ïîâîðîò øïðèöà (åñëè îí íå ëåòèò)
if (event.key.code == Keyboard::Right && (!start)) deg += 5;
if (event.key.code == Keyboard::Left && (!start)) deg -= 5;
// çàïóñêàåì øïðèö
if (event.key.code == Keyboard::Space)
{
if (num_for_sound_start == 1)
{
buffer_start.loadFromFile("sound\\start.ogg");
start_sound.setBuffer(buffer_start);
start_sound.play();
}
num_for_sound_start++;
start = true;
}
}
window.clear(Color::White);
// òåêñòóðà øïðèö
Texture t_arrow;
t_arrow.loadFromFile("textures\\shpritz.png");
Sprite s_arrow(t_arrow);
t_arrow.setSmooth(true);
// òåêñòóðà ïîïà
Texture t_ass;
t_ass.loadFromFile("textures\\ass.png");
Sprite s_ass(t_ass);
//t_ass.setSmooth(true);
s_ass.setOrigin(65.f, 70.f);
// òåêñòóðà ïîïà ñ êðîâüþ
Texture t_ass_blood;
t_ass_blood.loadFromFile("textures\\ass_blood.png");
Sprite s_ass_blood(t_ass_blood);
t_ass_blood.setSmooth(true);
s_ass_blood.setOrigin(65.f, 70.f);
// òåêñòóðà â ÿáëî÷êî
Texture t_apple;
t_apple.loadFromFile("textures\\apple.jpg");
Sprite s_apple(t_apple);
s_apple.setOrigin(150.f, 110.f);
// òåêñòóðà ÏÐÎÈÃÐÀË
Texture t_over;
t_over.loadFromFile("textures\\over.png");
Sprite s_over(t_over);
s_over.setOrigin(124.f, 90.f);
rad = (PI * deg) / 180; // ïåðåâîäèì ãðàäóñû â ðàäèàíû
// êîýôôèöèåíò ñìåùåíèÿ ïî îñÿì (çàâèñèò îò óãëà íàêëîíà)
dx = sin(rad);
dy = cos(rad);
if (start) // çàïóñêàåì øïðèö ïðè íàæàòèè íà ïðîáåë
{
d += speed_arrow; //âåëè÷èíà ñìåùåíèÿ øïðèöà
if (!check) scale -= 0.01; //èçìåíåíèå ðàçìåðà øïðèöà
}
if (x_ass > 720 || x_ass < 60) speed_ass = -speed_ass; // åñëè ïîïà äîåõàëà äî êîíöà, ðàçâîðà÷èâàåì å¸
// ïðîâåðêà ïîïàäàíèÿ
if (x_arrow > (x_ass - def) && x_arrow < (x_ass + def) && y_arrow >(y_ass - def) && y_arrow < (y_ass + def) && start) check = true;
if (!check) // åñëè ïîïàëè - øïðèö è ïîïà îñòàþòñÿ íà ìåñòå
{
x_ass += speed_ass; // ñìåùàåì ïîïó
//êîîðäèíàòû øïðèöà
x_arrow = 400 + d * dx;
y_arrow = 500 - d * dy;
}
// îòðèñîâêà ïîïû
s_ass.setPosition(Vector2f(x_ass, y_ass));
if (!check) window.draw(s_ass);
else // åñëè ïîïàëè - ðèñóåì ñ êðîâüþ
{
s_ass_blood.setPosition(Vector2f(x_ass, y_ass));
window.draw(s_ass_blood);
}
// îòðèñîâêà øïðèöà
s_arrow.setOrigin(32.f, 150.f);
s_arrow.rotate(deg);
s_arrow.setPosition(Vector2f(x_arrow, y_arrow));
s_arrow.scale(scale, scale);
window.draw(s_arrow);
// ïîïàë
if (check)
{
if (num_for_sound_check == 1)
{
buffer.loadFromFile("sound\\check.ogg");
check_sound.setBuffer(buffer);
check_sound.play();
}
num_for_sound_check++;
//çàïóñêàåì òàéìåð
float time = cl.getElapsedTime().asSeconds();
cl.restart();
timer += time;
if (timer > delay)
{
timer = 0;
if (k < 1) k += scale_factor; // ìàñøòàáèðóåì  ÿáëî÷êî
}
s_apple.scale(k, k);
s_apple.setPosition(Vector2f(400, 300));
window.draw(s_apple);
}
// íå ïîïàë
if (y_arrow < 0)
{
if (num_for_sound_off == 1)
{
buffer_off.loadFromFile("sound\\off.ogg");
off_sound.setBuffer(buffer_off);
off_sound.play();
}
num_for_sound_off++;
//çàïóñêàåì òàéìåð
float time = cl.getElapsedTime().asSeconds();
cl.restart();
timer += time;
if (timer > delay)
{
timer = 0;
if (h < 1) h += scale_factor; // ìàñøòàáèðóåì Ïðîèãðàë
}
s_over.scale(h, h);
s_over.setPosition(Vector2f(400, 300));
window.draw(s_over);
}
if (Keyboard::isKeyPressed(Keyboard::Enter)) // Íàæàëè íà ïðîáåë - ïåðåçàïóñê èãðû
{
if (check) // åñëè ïîïàëè
{
score += (score_add + abs(deg)); // äîáàâëÿåì î÷êè ïðè ïîïàäàíèè
score_from_begin_level += (score_add + abs(deg));
if (score_from_begin_level >= score_next) // ïåðåõîä íà ñëåäóþùèé óðîâåíü ïðè íàáîðå score_next î÷êîâ
{
score_from_begin_level = 0;
level++;
speed_ass *= speed_ass_add;
}
}
if (y_arrow < 0) // åñëè íå ïîïàëè
{
speed_ass = speed_ass_ini;
level = 1;
score = 0;
score_from_begin_level = 0;
}
// ïåðåçàïóñê èãðû
x_arrow = 0; y_arrow = 0; deg = 0; d = 0;
scale = 1;
x_ass = 400;
start = false;
check = false;
k = 0.1;
h = 0.1;
num_for_sound_check = 1;
num_for_sound_start = 1;
num_for_sound_off = 1;
}
level_string.str(""); // î÷èùàåì ñòðîêîâóþ ïåðåìåííóþ óðîâíÿ
level_string << level; // óðîâåíü
score_string.str(""); // î÷èñòêà ñòðîêîâîé ïåðåìåííîé î÷êîâ
score_string << score; // ïðèñâàèâàåì òåêñòîâîé ïåðåìåííîé çíà÷åíèå ÷èñëîâîé ïåðåìåííîé (äëÿ âûâîäà â âèäå òåêñòà)
// âûâîäèì êîëè÷åñòâî î÷êîâ
score_text.setPosition(10, 480);
score_text.setString("Î÷êè: " + score_string.str());
score_text.setColor(Color::Blue);
score_text.setStyle(Text::Bold);
window.draw(score_text);
// âûâîäèì óðîâåíü
level_text.setPosition(10, 520);
level_text.setString("Óðîâåíü: " + level_string.str());
level_text.setColor(Color::Red);
level_text.setStyle(Text::Bold);
window.draw(level_text);
window.display();
}
return 0;
}