czwartek, 3 listopada 2016

Menu gry

Witam 

Dziś zrobimy podstawowe menu dodajmy więc dwa pliki game.h i game.cpp odrazy otwórzmy ten pierwszy i zadeklarujmy wszystkie potrzebne zmienne i funkcje.

game.h

#include <SFML\Graphics.hpp>
#include <Windows.h>
#include <string>
#include "pole.h"

using namespace std;
using nam espace sf;
//dodanie potrzebnych bibliotek i zadeklarowanie przestrzeni nazw

class Game
{
public:
Game(void);
~Game(void)
//konstruktor i destruktor

void runGame(); //główna funkcja obsługująca grę

protected:
enum GameState {MENU,GAME,GAME_OVER,END}; //zmienna określająca status gry
GameState state

private:
Font font;

void menu(); //funkcja wyświetlająca grę
void single(); //funkcja wyświetlająca grę
};

Teraz zajmijmy się plikiem game.cpp 

#include "game.h"

RenderWindow window

Game::Game(void)
{
ContextSettings settings;
settings.antialiasingLevel = 8;
//stworzenie okna
window.create(VideoMode(1280,720),"Statki",Style::Default,
settings);

state = END;
window.setFramerateLimit(60);
//załadowanie czcionki
if(!font.loadFromFile("tahoma.ttf"))
{
MessageBox(NULL,"Font not found!","ERROR",NULL);
return;
}

state = MENU;
}


Game::~Game(void)
{
}


void Game::runGame()//sprawdza jaki jest status gry i wywołuje odpowiednią funkcję
{
while(state != END)
{
switch (state)
{
case MENU:
menu();
break;
case GAME:
single();
break;
}
}
}


void Game::menu()
{
//ustawienie i sformatowanie tytułu gry
Text title("STATKI",font,80);
title.setStyle(Text::Bold);
title.setColor(Color::Black);

title.setPosition(1280/2-title.getGlobalBounds().width/2,20);

const int ile = 2;
//ustawienie i sformatowanie opcji wyboru
Text tekst[ile];

string str[] = {"Play","Exit"};
for(int i=0;i<ile;i++)
{
tekst[i].setFont(font);
tekst[i].setCharacterSize(65);

tekst[i].setString(str[i]);
tekst[i].setPosition(1280/2-tekst[i].getGlobalBounds().width/2,250+i*120);
}

while(state == MENU)
{
Vector2f mouse(Mouse::getPosition(window));
Event event;

while(window.pollEvent(event))
{
//Wciśnięcie ESC lub przycisk X
if(event.type == Event::Closed || event.type == Event::KeyPressed &&
event.key.code == Keyboard::Escape)
state = END;

//kliknięcie MENU
else if(tekst[0].getGlobalBounds().contains(mouse&&
event.type == Event::MouseButtonReleased && event.key.code == Mouse::Left)
{
state = GAME;
}

//kliknięcie EXIT
else if(tekst[1].getGlobalBounds().contains(mouse&&
event.type == Event::MouseButtonReleased && event.key.code == Mouse::Left)
{
state = END;
}
}
//sprawdzenie czy gracz najechał na tekst i udpowiednie ustawienie koloru
for(int i=0;i<ile;i++)
if(tekst[i].getGlobalBounds().contains(mouse))
tekst[i].setColor(Color::Cyan);
else tekst[i].setColor(Color::Black);

//narysowanie wszystkich elementów
window.clear(Color::White);

window.draw(title);
for(int i=0;i<ile;i++)
window.draw(tekst[i]);

window.display();
}
}
// funkcja wywołująca właściwą grę
void Game::single()
{
Engine engine(window,font);

engine.runEngine();

state = MENU;
}

Na razie zawartość funkcji single dajmy sobie w komentarze ponieważ klasa engine nie została utworzona i program się nie wykona.


Teraz skompilujmy nasz program i podziwiajmy nasze menu

Podsumowanie

Dziś zrobiliśmy dużo, udało nam się stworzyć piękne menu. w następnej części zajmiemy się klasą engine. Jak zwykle cały kod aplikacji znajdziecie na moim profilu github. Jak zawsze zachęcam do zadawania pytań i komentowania.



Brak komentarzy:

Prześlij komentarz