Skip to content

Commit 457e04e

Browse files
committed
Code refactor, moved all logic from main to terrarium class
1 parent 4b766c3 commit 457e04e

File tree

3 files changed

+112
-101
lines changed

3 files changed

+112
-101
lines changed

SFML/main.cpp

Lines changed: 7 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,18 @@
44
#include <iostream>
55
int main()
66
{
7-
Terrarium terrarium = Terrarium(Terrarium::mapType::pusta);
8-
int windowWidth= terrarium.rozmiarPlanszy * 50, windowHeight= terrarium.rozmiarPlanszy * 50;
9-
10-
sf::Font arial;
11-
if (!arial.loadFromFile("C:/Windows/Fonts/Arial.ttf"))
12-
std::cout << "Nie udalo sie wczytaæ czcionki\n";
13-
sf::Text score;
14-
score.setFont(arial);
15-
score.setPosition(sf::Vector2f(350, 0));
16-
7+
Terrarium terrarium = Terrarium(Terrarium::mapType::pusta);
8+
//obiekt ktory zajmuje sie logik¹ i wyœwietlaniem gry
9+
int windowWidth= terrarium.rozmiarPlanszy * 50,
10+
windowHeight= terrarium.rozmiarPlanszy * 50;
1711
sf::Clock fruitClock, gameClock; //zegary gry
18-
1912
sf::RenderWindow window(
2013
sf::VideoMode(windowWidth, windowHeight),
2114
"Snake");
2215
unsigned int fps = 60;
2316
window.setFramerateLimit(fps);
24-
2517
while (window.isOpen())
2618
{
27-
2819
sf::Event event;
2920
while (
3021
window.pollEvent(event)) {
@@ -54,47 +45,15 @@ int main()
5445
terrarium.changeDirection(Terrarium::moveType::left);
5546
break;
5647
}
48+
//zmiana kierunku poruszania siê wê¿a
49+
//niedozwolona jest zmiana kierunku o 180 stopni
5750
break;
5851
default:
5952
break;
6053
}
6154
}
6255
window.clear();
63-
for (int i = 0; i < terrarium.rozmiarPlanszy; i++) {
64-
for (int j = 0; j < terrarium.rozmiarPlanszy; j++) {
65-
window.draw(terrarium.plansza[i][j]->sprite);
66-
}
67-
}
68-
if (!terrarium.isEnd) {
69-
if (gameClock.getElapsedTime() >= sf::milliseconds(150)) {
70-
terrarium.move();
71-
gameClock.restart();
72-
score.setString(std::to_string(terrarium.snakeLenght));
73-
}
74-
}
75-
else {
76-
std::cout << "Koniec gry!" << std::endl;
77-
std::cout << "Twoj wynik to " <<terrarium.snakeLenght<< std::endl;
78-
score.setString("Koniec gry!\nTwoj wynik to " + std::to_string(terrarium.snakeLenght));
79-
score.setOrigin(sf::Vector2f(score.getGlobalBounds().width/2,score.getGlobalBounds().height/2));
80-
score.setPosition(sf::Vector2f(windowWidth/2, windowHeight/2));
81-
82-
window.draw(score);
83-
window.display();
84-
sf::sleep(sf::milliseconds(5000));
85-
window.close();
86-
return 0;
87-
}
88-
89-
if (fruitClock.getElapsedTime() >= sf::seconds(3)) {
90-
terrarium.generateFruit();
91-
fruitClock.restart();
92-
}
93-
94-
95-
96-
97-
window.draw(score);
56+
terrarium.updateGameState(&window,&gameClock,&fruitClock);
9857
window.display();
9958
}
10059
return 0;

SFML/terrarium.cpp

Lines changed: 101 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
#include "terrarium.h"
22
#include <iostream>
33
#include <random>
4-
Terrarium::Terrarium(mapType typMapy) {
5-
typMapy = typMapy;
4+
Terrarium::Terrarium(mapType rodzajMapy) {
5+
typMapy = rodzajMapy;
6+
setUpInitialState();
67
rozmiarPlanszy = 8;
8+
initializeFonts();
9+
scoreText.setFont(arial);
10+
scoreText.setPosition(sf::Vector2f(rozmiarPlanszy*50 - 40, 0));
11+
scoreText.setFillColor(sf::Color(0, 0, 0, 255));
712
prepareTextures();
8-
setUpInitialState();
913
setUpTiles();
10-
isEnd = false;
11-
typRuchu = moveType::right;
12-
snakeLenght = 1;
14+
1315
}
1416
bool Terrarium::prepareTextures()
1517
{
@@ -23,6 +25,14 @@ bool Terrarium::prepareTextures()
2325
else
2426
return false;
2527
}
28+
bool Terrarium::initializeFonts()
29+
{
30+
if (!arial.loadFromFile("C:/Windows/Fonts/Arial.ttf")) {
31+
std::cout << "Nie udalo sie wczytaæ czcionki\n";
32+
return false;
33+
}
34+
return true;
35+
}
2636
bool Terrarium::readTexture(std::string name, sf::Texture *texture)
2737
{
2838
if (!texture->loadFromFile(name)) {
@@ -33,57 +43,63 @@ bool Terrarium::readTexture(std::string name, sf::Texture *texture)
3343
return true;
3444
}
3545
void Terrarium::setUpInitialState() {
36-
tailPos = headPos = sf::Vector2i(3,3);
46+
isEnd = false;
47+
headPos = sf::Vector2i(3,3);
48+
typRuchu = moveType::right;
49+
snakeLenght = 1;
3750
}
3851
void Terrarium::setUpTiles() {
3952
plansza.clear();
40-
std::vector<Pole*> pierwszyRzad;
41-
for (int i = 0; i < rozmiarPlanszy; i++) {
42-
pierwszyRzad.push_back(new Pole(&grassTexture, i*50, 0, false));
43-
}
44-
plansza.push_back(pierwszyRzad);
45-
46-
std::vector<Pole*> drugiRzad;
47-
for (int i = 0; i < rozmiarPlanszy; i++) {
48-
drugiRzad.push_back(new Pole(&grassTexture, i * 50, 50, false));
49-
}
50-
plansza.push_back(drugiRzad);
51-
52-
std::vector<Pole*> trzeciRzad;
53-
for (int i = 0; i < rozmiarPlanszy; i++) {
54-
trzeciRzad.push_back(new Pole(&grassTexture, i * 50, 100, false));
55-
}
56-
plansza.push_back(trzeciRzad);
57-
58-
std::vector<Pole*> czwartyRzad;
59-
for (int i = 0; i < rozmiarPlanszy; i++) {
60-
czwartyRzad.push_back(new Pole(&grassTexture, i * 50, 150, false));
61-
}
62-
plansza.push_back(czwartyRzad);
63-
64-
std::vector<Pole*> piatyRzad;
65-
for (int i = 0; i < rozmiarPlanszy; i++) {
66-
piatyRzad.push_back(new Pole(&grassTexture, i * 50, 200, false));
67-
}
68-
plansza.push_back(piatyRzad);
69-
70-
std::vector<Pole*> szostyRzad;
71-
for (int i = 0; i < rozmiarPlanszy; i++) {
72-
szostyRzad.push_back(new Pole(&grassTexture, i * 50, 250, false));
73-
}
74-
plansza.push_back(szostyRzad);
53+
std::vector<Pole*> pierwszyRzad, drugiRzad, trzeciRzad, czwartyRzad, piatyRzad, szostyRzad, siodmyRzad, osmyRzad;;
54+
switch (typMapy)
55+
{
56+
case Terrarium::mapType::pusta:
57+
for (int i = 0; i < rozmiarPlanszy; i++) {
58+
pierwszyRzad.push_back(new Pole(&grassTexture, i * 50, 0, false));
59+
}
60+
plansza.push_back(pierwszyRzad);
61+
for (int i = 0; i < rozmiarPlanszy; i++) {
62+
drugiRzad.push_back(new Pole(&grassTexture, i * 50, 50, false));
63+
}
64+
plansza.push_back(drugiRzad);
65+
for (int i = 0; i < rozmiarPlanszy; i++) {
66+
trzeciRzad.push_back(new Pole(&grassTexture, i * 50, 100, false));
67+
}
68+
plansza.push_back(trzeciRzad);
69+
70+
for (int i = 0; i < rozmiarPlanszy; i++) {
71+
czwartyRzad.push_back(new Pole(&grassTexture, i * 50, 150, false));
72+
}
73+
plansza.push_back(czwartyRzad);
74+
75+
for (int i = 0; i < rozmiarPlanszy; i++) {
76+
piatyRzad.push_back(new Pole(&grassTexture, i * 50, 200, false));
77+
}
78+
plansza.push_back(piatyRzad);
79+
80+
for (int i = 0; i < rozmiarPlanszy; i++) {
81+
szostyRzad.push_back(new Pole(&grassTexture, i * 50, 250, false));
82+
}
83+
plansza.push_back(szostyRzad);
7584

76-
std::vector<Pole*> siodmyRzad;
77-
for (int i = 0; i < rozmiarPlanszy; i++) {
78-
siodmyRzad.push_back(new Pole(&grassTexture, i * 50, 300, false));
79-
}
80-
plansza.push_back(siodmyRzad);
85+
86+
for (int i = 0; i < rozmiarPlanszy; i++) {
87+
siodmyRzad.push_back(new Pole(&grassTexture, i * 50, 300, false));
88+
}
89+
plansza.push_back(siodmyRzad);
8190

82-
std::vector<Pole*> osmyRzad;
83-
for (int i = 0; i < rozmiarPlanszy; i++) {
84-
osmyRzad.push_back(new Pole(&grassTexture, i * 50, 350, false));
91+
for (int i = 0; i < rozmiarPlanszy; i++) {
92+
osmyRzad.push_back(new Pole(&grassTexture, i * 50, 350, false));
93+
}
94+
plansza.push_back(osmyRzad);
95+
break;
96+
case Terrarium::mapType::krzyz:
97+
break;
98+
case Terrarium::mapType::labirynt:
99+
break;
100+
default:
101+
break;
85102
}
86-
plansza.push_back(osmyRzad);
87103
}
88104
void Terrarium::changeDirection(moveType nowyRuch) {
89105
typRuchu = nowyRuch;
@@ -113,6 +129,40 @@ void Terrarium::generateFruit()
113129
plansza[x][y]->setSprite(&fruitTexture);
114130
}
115131

132+
void Terrarium::updateGameState(sf::RenderWindow *window, sf::Clock *gameClock, sf::Clock * fruitClock)
133+
{
134+
for (int i = 0; i < rozmiarPlanszy; i++) {
135+
for (int j = 0; j < rozmiarPlanszy; j++) {
136+
window->draw(plansza[i][j]->sprite);
137+
}
138+
}
139+
if (!isEnd) {
140+
if (gameClock->getElapsedTime() >= sf::milliseconds(150)) {
141+
move();
142+
gameClock->restart();
143+
scoreText.setString(std::to_string(snakeLenght));
144+
}
145+
}
146+
else {
147+
std::cout << "Koniec gry!" << std::endl;
148+
std::cout << "Twoj wynik to " << snakeLenght << std::endl;
149+
scoreText.setString("Koniec gry!\nTwoj wynik to " + std::to_string(snakeLenght));
150+
scoreText.setOrigin(sf::Vector2f(scoreText.getGlobalBounds().width / 2, scoreText.getGlobalBounds().height / 2));
151+
scoreText.setPosition(sf::Vector2f(rozmiarPlanszy*50 / 2, rozmiarPlanszy*50 / 2));
152+
153+
window->draw(scoreText);
154+
window->display();
155+
window->close();
156+
}
157+
158+
if (fruitClock->getElapsedTime() >= sf::seconds(3)) {
159+
generateFruit();
160+
fruitClock->restart();
161+
}
162+
163+
window->draw(scoreText);
164+
}
165+
116166
void Terrarium::move() {
117167
//std::cout << "X = " << headPos.x << std::endl;
118168
//std::cout << "Y = " << headPos.y << std::endl;

SFML/terrarium.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@ class Terrarium
99
enum class mapType{ pusta, krzyz, labirynt };
1010
enum class moveType{up,down,right,left};
1111
sf::Vector2i headPos;
12-
sf::Vector2i tailPos;
1312
int snakeLenght;
1413
std::vector<std::vector<Pole *>> plansza;
14+
sf::Font arial;
15+
sf::Text scoreText;
16+
bool initializeFonts();
1517
sf::Texture grassTexture, bodyTexture, headTexture,fruitTexture;
1618
bool readTexture(std::string, sf::Texture *);
1719
bool prepareTextures();
@@ -27,7 +29,7 @@ class Terrarium
2729
void extendSnake();
2830
int generateRandomNumber();
2931
void generateFruit();
30-
//void updateGameState(sf::Clock);
32+
void updateGameState(sf::RenderWindow *,sf::Clock*, sf::Clock*);
3133

3234
void endGame();
3335
};

0 commit comments

Comments
 (0)