-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathArkanoidGame.cpp
127 lines (99 loc) · 2.48 KB
/
ArkanoidGame.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
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
#include "ArkanoidGame.h"
const int ROWS = 10;
const int COLS = 10;
ArkanoidGame::ArkanoidGame(int width, int height) : Game(width, height)
{
static_assert(BLOCKS_MAX >= COLS * ROWS, "Increase max blocks");
}
ArkanoidGame::~ArkanoidGame()
{
}
void ArkanoidGame::OnInit()
{
ballCoord.x = 250;
ballCoord.y = 400;
ballDiff.x = 6;
ballDiff.y = -5;
textureBall.loadFromFile("ball.png");
spriteBall.setTexture(textureBall);
spriteBall.setPosition(ballCoord);
textureBackground.loadFromFile("background.jpg");
spriteBackground.setTexture(textureBackground);
spriteBackground.setPosition(sf::Vector2f(0, 0));
texturePaddle.loadFromFile("paddle.png");
spritePaddle.setTexture(texturePaddle);
spritePaddle.setPosition(sf::Vector2f(300, 440));
textureBlock.loadFromFile("block01.png");
for (int i = 0; i < COLS; i++)
{
for (int j = 0; j < ROWS; j++)
{
spriteBlock[i * COLS + j].setTexture(textureBlock);
spriteBlock[i * COLS + j].setPosition((i + 1) * 43, (j + 1) * 20);
}
}
}
void ArkanoidGame::OnUpdate()
{
ballCoord.x += ballDiff.x;
float x = ballCoord.x;
float y = ballCoord.y;
for (int i = 0; i < COLS; i++)
{
for (int j = 0; j < ROWS; j++)
{
if (sf::FloatRect(x + 3, y + 3, 6, 6).intersects(spriteBlock[i * COLS + j].getGlobalBounds()))
{
spriteBlock[i * COLS + j].setPosition(-200, -100);
ballDiff.x = - ballDiff.x;
}
}
}
ballCoord.y += ballDiff.y;
x = ballCoord.x;
y = ballCoord.y;
for (int i = 0; i < COLS; i++)
{
for (int j = 0; j < ROWS; j++)
{
if (sf::FloatRect(x + 3, y + 3, 6, 6).intersects(spriteBlock[i * COLS + j].getGlobalBounds()))
{
spriteBlock[i * COLS + j].setPosition(-200, -100);
ballDiff.y = - ballDiff.y;
}
}
}
if (ballCoord.y < 0 || ballCoord.y > Game::windowHeight)
{
ballDiff.y = -ballDiff.y;
}
if (ballCoord.x < 0 || ballCoord.x > Game::windowWidth)
{
ballDiff.x = -ballDiff.x;
}
if (sf::FloatRect(x, y, 12, 12).intersects(spritePaddle.getGlobalBounds()))
{
ballDiff.y = -(rand() % 5 + 2);
}
spriteBall.setPosition(ballCoord);
}
void ArkanoidGame::OnDraw(Window& window)
{
window.Draw(spriteBackground);
for (int i = 0; i < COLS; i++)
{
for (int j = 0; j < ROWS; j++)
{
window.Draw(spriteBlock[i * COLS + j]);
}
}
window.Draw(spriteBall);
window.Draw(spritePaddle);
}
void ArkanoidGame::OnHandleInput()
{
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
spritePaddle.move(6, 0);
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
spritePaddle.move(-6, 0);
}