Skip to content

Commit 02d4f92

Browse files
committed
Add menu with map selection
1 parent 1d0c5ce commit 02d4f92

File tree

5 files changed

+324
-68
lines changed

5 files changed

+324
-68
lines changed

SFML/main.cpp

Lines changed: 165 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -2,59 +2,177 @@
22
#include <Windows.h>
33
#include "terrarium.h"
44
#include <iostream>
5+
struct Button {
6+
sf::Vector2f position;
7+
sf::Vector2f size;
8+
std::string name;
9+
sf::Text text;
10+
sf::RectangleShape shape;
11+
sf::Font arial;
12+
Button(sf::Vector2f pozycja, sf::Vector2f rozmiar, std::string nazwa) {
13+
position = pozycja;
14+
size = rozmiar;
15+
name = nazwa;
16+
if (!initializeFonts())
17+
return;
18+
19+
text.setFont(arial);
20+
text.setString(name);
21+
text.setOrigin(sf::Vector2f(text.getGlobalBounds().width / 2,
22+
text.getGlobalBounds().height / 2+10));
23+
text.setPosition(position);
24+
shape.setSize(size);
25+
shape.setFillColor(sf::Color(100, 200, 100, 255));
26+
shape.setOrigin(sf::Vector2f(shape.getGlobalBounds().width / 2,
27+
shape.getGlobalBounds().height / 2));
28+
shape.setPosition(position);
29+
}
30+
bool initializeFonts() {
31+
if (!arial.loadFromFile("C:/Windows/Fonts/Arial.ttf")) {
32+
std::cout << "Nie udalo sie wczytaæ czcionki\n";
33+
return false;
34+
}
35+
return true;
36+
}
37+
bool isClicked(sf::Vector2i localPosition) {
38+
if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) {
39+
if (shape.getGlobalBounds().contains(sf::Vector2f(localPosition))) {
40+
return true;
41+
}
42+
}
43+
return false;
44+
}
45+
void setString(std::string newName) {
46+
text.setString(newName);
47+
text.setOrigin(sf::Vector2f(text.getGlobalBounds().width / 2,
48+
text.getGlobalBounds().height / 2 + 10));
49+
}
50+
51+
};
552
int main()//przetwarza sterowanie u¿ytkownika, renderuje okno, tworzy obiekt gry
653
{
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;
11-
sf::Clock fruitClock, gameClock; //zegary gry
12-
sf::RenderWindow window(
13-
sf::VideoMode(windowWidth, windowHeight),
14-
"Snake");
15-
unsigned int fps = 60;
16-
window.setFramerateLimit(fps);
17-
while (window.isOpen())
18-
{
19-
sf::Event event;
20-
while (
21-
window.pollEvent(event)) {
22-
switch (event.type) {
23-
case sf::Event::Closed:
24-
window.close();
25-
break;
26-
case sf::Event::KeyPressed:
27-
switch (event.key.code) {
28-
case sf::Keyboard::Escape:
29-
window.close();
30-
break;
31-
case sf::Keyboard::Up:
32-
if(terrarium.typRuchu!= Terrarium::moveType::down)
33-
terrarium.changeDirection(Terrarium::moveType::up);
34-
break;
35-
case sf::Keyboard::Down:
36-
if (terrarium.typRuchu != Terrarium::moveType::up)
37-
terrarium.changeDirection(Terrarium::moveType::down);
38-
break;
39-
case sf::Keyboard::Right:
40-
if (terrarium.typRuchu != Terrarium::moveType::left)
41-
terrarium.changeDirection(Terrarium::moveType::right);
42-
break;
43-
case sf::Keyboard::Left:
44-
if (terrarium.typRuchu != Terrarium::moveType::right)
45-
terrarium.changeDirection(Terrarium::moveType::left);
54+
bool isEnd=true;
55+
while (isEnd) {
56+
Terrarium::mapType selectedMapType = Terrarium::mapType::pusta;
57+
sf::RenderWindow menu(sf::VideoMode(400, 400), "Menu");
58+
menu.setFramerateLimit(60);
59+
bool isGameStarted = false;
60+
Button startButton(sf::Vector2f(200, 150), sf::Vector2f(140.f, 50.f), "Start");
61+
Button mapTypeButton(sf::Vector2f(200, 225), sf::Vector2f(140.f, 50.f), "Pusta");
62+
Button quitButton(sf::Vector2f(200, 350), sf::Vector2f(140.f, 50.f), "Wyjdz");
63+
sf::Text gameName;
64+
gameName.setFont(startButton.arial);
65+
gameName.setCharacterSize(50);
66+
gameName.setFillColor(sf::Color(20, 255, 30, 255));
67+
gameName.setString("SNAKE");
68+
gameName.setStyle(sf::Text::Bold);
69+
gameName.setPosition(sf::Vector2f(200, 50));
70+
gameName.setOrigin(sf::Vector2f(gameName.getGlobalBounds().width / 2,
71+
gameName.getGlobalBounds().height / 2 + 10));
72+
while (menu.isOpen()) {
73+
sf::Event event;
74+
while (
75+
menu.pollEvent(event)) {
76+
switch (event.type) {
77+
case sf::Event::Closed:
78+
menu.close();
4679
break;
4780
}
48-
//zmiana kierunku poruszania siê wê¿a
49-
//niedozwolona jest zmiana kierunku o 180 stopni
50-
break;
51-
default:
52-
break;
81+
sf::Vector2i localPosition = sf::Mouse::getPosition(menu);
82+
if (startButton.isClicked(localPosition)) {
83+
isGameStarted = true;
84+
menu.close();
85+
}else
86+
if (mapTypeButton.isClicked(localPosition)) {
87+
switch (selectedMapType) {
88+
case Terrarium::mapType::pusta:
89+
selectedMapType = Terrarium::mapType::granice;
90+
mapTypeButton.setString("Granice");
91+
break;
92+
case Terrarium::mapType::granice:
93+
selectedMapType = Terrarium::mapType::labirynt;
94+
mapTypeButton.setString("Labirynt");
95+
break;
96+
case Terrarium::mapType::labirynt:
97+
selectedMapType = Terrarium::mapType::pusta;
98+
mapTypeButton.setString("Pusta");
99+
break;
100+
}
101+
}
102+
else if (quitButton.isClicked(localPosition)) {
103+
isEnd = false;
104+
return 0;
105+
}
106+
}
107+
108+
109+
menu.clear();
110+
menu.draw(gameName);
111+
menu.draw(startButton.shape);
112+
menu.draw(startButton.text);
113+
menu.draw(mapTypeButton.shape);
114+
menu.draw(mapTypeButton.text);
115+
menu.draw(quitButton.shape);
116+
menu.draw(quitButton.text);
117+
menu.display();
118+
}
119+
120+
if (isGameStarted) {
121+
122+
Terrarium terrarium = Terrarium(selectedMapType);
123+
//obiekt ktory zajmuje sie logik¹ i wyœwietlaniem gry
124+
int windowWidth = terrarium.getRozmiarPlanszy() * 50,
125+
windowHeight = terrarium.getRozmiarPlanszy() * 50;
126+
sf::Clock fruitClock, gameClock; //zegary gry
127+
sf::RenderWindow window(
128+
sf::VideoMode(windowWidth, windowHeight),
129+
"Snake");
130+
131+
unsigned int fps = 60;
132+
window.setFramerateLimit(fps);
133+
while (window.isOpen())
134+
{
135+
sf::Event event;
136+
while (
137+
window.pollEvent(event)) {
138+
switch (event.type) {
139+
case sf::Event::Closed:
140+
window.close();
141+
break;
142+
case sf::Event::KeyPressed:
143+
switch (event.key.code) {
144+
case sf::Keyboard::Escape:
145+
window.close();
146+
break;
147+
case sf::Keyboard::Up:
148+
if (terrarium.getTypRuchu() != Terrarium::moveType::down)
149+
terrarium.changeDirection(Terrarium::moveType::up);
150+
break;
151+
case sf::Keyboard::Down:
152+
if (terrarium.getTypRuchu() != Terrarium::moveType::up)
153+
terrarium.changeDirection(Terrarium::moveType::down);
154+
break;
155+
case sf::Keyboard::Right:
156+
if (terrarium.getTypRuchu() != Terrarium::moveType::left)
157+
terrarium.changeDirection(Terrarium::moveType::right);
158+
break;
159+
case sf::Keyboard::Left:
160+
if (terrarium.getTypRuchu() != Terrarium::moveType::right)
161+
terrarium.changeDirection(Terrarium::moveType::left);
162+
break;
163+
}
164+
//zmiana kierunku poruszania siê wê¿a
165+
//niedozwolona jest zmiana kierunku o 180 stopni
166+
break;
167+
default:
168+
break;
169+
}
170+
}
171+
window.clear();
172+
terrarium.updateGameState(&window, &gameClock, &fruitClock);
173+
window.display();
53174
}
54175
}
55-
window.clear();
56-
terrarium.updateGameState(&window,&gameClock,&fruitClock);
57-
window.display();
58176
}
59177
return 0;
60178
}

SFML/media/textures/trawa.jpg

-787 Bytes
Binary file not shown.

SFML/media/textures/wall.png

602 Bytes
Loading

0 commit comments

Comments
 (0)