#include <SFML/Graphics/RenderWindow.hpp>
#include <SFML/Graphics.hpp>
#include <ctime>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <sstream>
using namespace std;
using namespace sf;
RenderWindow Okno;
View cam;
bool noc;
bool PokazZnacznik;
int licznik_Czasu, godzina, minuta, dzien;
void ObliczanieCzasu()
{
licznik_Czasu++;
if( licznik_Czasu == 60 )
{
licznik_Czasu = 0;
minuta++;
}
if( minuta == 60 )
{
minuta = 0;
godzina++;
}
if( godzina == 24 )
{
godzina = 0;
dzien++;
}
if( godzina >= 20 || godzina < 5 )
noc = true;
if( godzina >= 6 && godzina < 20 )
noc = false;
}
class Pole
{
public:
Texture tekstura;
Sprite obraz;
string nazwa;
Texture Powiekszone_pole;
Sprite Obraz_zBliska;
Texture zna;
Sprite Znacznik;
Texture drzewo;
Sprite obraz_drzewa;
bool myszka;
RectangleShape podswietlenie;
RectangleShape P_noc;
bool krzak;
};
Pole Mapa[ 30 ][ 30 ];
void Generowanie_Mapy()
{
srand( time( NULL ) );
for( int a = 0; a < 25; a++ )
{
for( int b = 0; b < 25; b++ )
{
int los = rand() % 2;
if( los == 0 )
{
int losKrzak = rand() % 2;
if( losKrzak == 0 )
{
Mapa[ a ][ b ].tekstura.loadFromFile( "txt/lakakrzak.PNG" );
Mapa[ a ][ b ].obraz.setTexture( Mapa[ a ][ b ].tekstura );
Mapa[ a ][ b ].obraz.setScale( 2, 2 ); Mapa[ a ][ b ].krzak = true;
Mapa[ a ][ b ].obraz.setPosition( b * 64, a * 64 );
Mapa[ a ][ b ].nazwa = "Polana";
int losDrzewo = rand() % 2;
if( losDrzewo == 0 )
{
Mapa[ a ][ b ].drzewo.loadFromFile( "txt/greentree.PNG" );
Mapa[ a ][ b ].obraz_drzewa.setTexture( Mapa[ a ][ b ].drzewo );
Mapa[ a ][ b ].obraz_drzewa.setPosition( Mapa[ a ][ b ].obraz.getPosition().x + 10, Mapa[ a ][ b ].obraz.getPosition().y + 11 );
Mapa[ a ][ b ].obraz_drzewa.setScale( 1.75, 1.75 );
}
}
else
{
Mapa[ a ][ b ].tekstura.loadFromFile( "txt/lakabezkrzaka.PNG" );
Mapa[ a ][ b ].obraz.setTexture( Mapa[ a ][ b ].tekstura );
Mapa[ a ][ b ].obraz.setScale( 2, 2 );
Mapa[ a ][ b ].obraz.setPosition( b * 64, a * 64 );
Mapa[ a ][ b ].nazwa = "Polana";
int losDrzewo = rand() % 2;
if( losDrzewo == 0 )
{
Mapa[ a ][ b ].drzewo.loadFromFile( "txt/greentree.PNG" );
Mapa[ a ][ b ].obraz_drzewa.setTexture( Mapa[ a ][ b ].drzewo );
Mapa[ a ][ b ].obraz_drzewa.setPosition( b * 64 + 5, a * 64 + 8 );
Mapa[ a ][ b ].obraz_drzewa.setScale( 1.75, 1.75 );
}
}
}
else
{
Mapa[ a ][ b ].tekstura.loadFromFile( "txt/lasDS.PNG" );
Mapa[ a ][ b ].obraz.setTexture( Mapa[ a ][ b ].tekstura );
Mapa[ a ][ b ].obraz.setScale( 2, 2 );
Mapa[ a ][ b ].obraz.setPosition( b * 64, a * 64 );
Mapa[ a ][ b ].nazwa = "las";
}
}
}
for( int a = 0; a < 25; a++ )
{
for( int b = 0; b < 25; b++ )
{
Mapa[ a ][ b ].podswietlenie.setPosition( b * 64 + 2, a * 64 + 2 );
Mapa[ a ][ b ].podswietlenie.setFillColor( Color( 255, 255, 200, 90 ) );
Mapa[ a ][ b ].podswietlenie.setSize( Vector2f( 60, 60 ) );
Mapa[ a ][ b ].P_noc.setPosition( b * 64, a * 64 );
Mapa[ a ][ b ].P_noc.setFillColor( Color( 0, 0, 0, 150 ) );
Mapa[ a ][ b ].P_noc.setSize( Vector2f( 64, 64 ) );
Mapa[ a ][ b ].zna.loadFromFile( "txt/znacznik.PNG" );
Mapa[ a ][ b ].Znacznik.setTexture( Mapa[ a ][ b ].zna );
Mapa[ a ][ b ].Znacznik.setScale( 2, 2 );
Mapa[ a ][ b ].Znacznik.setPosition( b * 64, a * 64 );
}
}
}
class Gracz
{
public:
Texture tekstura, miniglowa;
Sprite obraz, obrazMini;
int x, y;
int hp, energia, Najedzenie;
bool PytRuch;
void Wykonanie_Ruchu( int MousePosX, int MousePosY )
{
x = MousePosX; y = MousePosY;
}
};
Gracz Postac;
void Ladowanie_Postaci()
{
Postac.tekstura.loadFromFile( "txt/glowa.PNG" );
Postac.obraz.setTexture( Postac.tekstura );
Postac.obraz.setPosition( Mapa[ Postac.x ][ Postac.y ].obraz.getPosition() );
Postac.obraz.setScale( 2, 2 );
Okno.draw( Postac.obraz );
}
void Wyswietlanie_Mapy( int PoleX, int PoleY )
{
for( int a = 0; a < 25; a++ )
{
for( int b = 0; b < 25; b++ )
{
Okno.draw( Mapa[ a ][ b ].obraz );
Okno.draw( Mapa[ a ][ b ].obraz_drzewa );
if( noc == true )
Okno.draw( Mapa[ a ][ b ].P_noc );
if( Mapa[ a ][ b ].myszka == true )
Okno.draw( Mapa[ a ][ b ].podswietlenie );
if( PokazZnacznik == true )
Okno.draw( Mapa[ PoleX ][ PoleY ].Znacznik );
}
}
}
RectangleShape StatOgolne, StatOgolne2, kreska1, kreska2, hp, energia, najedzenie;
void Interfejs()
{
StatOgolne.setSize( Vector2f( Okno.getSize().x, Okno.getSize().y / 9 ) );
StatOgolne.setFillColor( Color( 105, 105, 105 ) );
StatOgolne.setPosition( 0, 0 );
StatOgolne2.setSize( Vector2f( Okno.getSize().x / 5, Okno.getSize().y ) );
StatOgolne2.setFillColor( Color( 105, 105, 105 ) );
Postac.miniglowa.loadFromFile( "txt/miniglowa.PNG" );
Postac.obrazMini.setTexture( Postac.miniglowa );
Postac.obrazMini.setScale( 2.25, 2.25 );
kreska1.setSize( Vector2f( StatOgolne.getSize().x / 75, StatOgolne.getSize().y ) );
kreska2.setSize( Vector2f( StatOgolne.getSize().x / 75, StatOgolne.getSize().y ) );
}
void Rysowani_Interfejsu()
{
StatOgolne2.setPosition( StatOgolne.getPosition().x + Okno.getSize().x - Okno.getSize().x / 5, StatOgolne.getPosition().y );
Postac.obrazMini.setPosition( StatOgolne.getPosition().x, StatOgolne.getPosition().y );
kreska1.setPosition( StatOgolne.getPosition().x + StatOgolne.getSize().y, StatOgolne.getPosition().y );
hp.setSize( Vector2f( Postac.hp * 1.5, StatOgolne.getSize().y / 5 ) );
hp.setFillColor( Color::Red );
hp.setPosition( StatOgolne.getPosition().x + Okno.getSize().x / 12, StatOgolne.getPosition().y + StatOgolne.getSize().y / 10 );
energia.setSize( Vector2f( Postac.energia * 1.5, StatOgolne.getSize().y / 5 ) );
energia.setFillColor( Color( 34, 139, 34 ) );
energia.setPosition( StatOgolne.getPosition().x + Okno.getSize().x / 12, StatOgolne.getPosition().y + Okno.getSize().y / 25 );
najedzenie.setSize( Vector2f( Postac.Najedzenie * 1.5, StatOgolne.getSize().y / 5 ) );
najedzenie.setFillColor( Color( 255, 222, 173 ) );
najedzenie.setPosition( StatOgolne.getPosition().x + Okno.getSize().x / 12, StatOgolne.getPosition().y + Okno.getSize().y / 14.5 );
kreska2.setPosition( StatOgolne.getPosition().x +( 100 * 1.5 ) + Okno.getSize().x / 8, StatOgolne.getPosition().y );
Okno.draw( StatOgolne );
Okno.draw( StatOgolne2 );
Okno.draw( Postac.obrazMini );
Okno.draw( kreska1 );
Okno.draw( hp );
Okno.draw( energia );
Okno.draw( najedzenie );
Okno.draw( kreska2 );
}
Text HP, ENERGIA, NAJEDZENIE, Min, Hour, Day;
void RysowanieNapisy_interfejs()
{
Font nr; nr.loadFromFile( "Fonts/asInterfejs.otf" );
stringstream pkthp, pkten, pktna, M, H, D;
pkthp << Postac.hp;
pkten << Postac.energia;
pktna << Postac.Najedzenie;
HP.setFont( nr );
HP.setString( pkthp.str() );
HP.setPosition( Postac.hp * 1.5 + StatOgolne.getPosition().x + Okno.getSize().x / 11.5, hp.getPosition().y );
HP.setCharacterSize( 16 );
HP.setFillColor( Color::White );
ENERGIA.setFont( nr );
ENERGIA.setString( pkten.str() );
ENERGIA.setPosition( Postac.energia * 1.5 + StatOgolne.getPosition().x + Okno.getSize().x / 11.5, energia.getPosition().y );
ENERGIA.setCharacterSize( 16 );
ENERGIA.setFillColor( Color::White );
NAJEDZENIE.setFont( nr );
NAJEDZENIE.setString( pktna.str() );
NAJEDZENIE.setPosition( Postac.Najedzenie * 1.5 + StatOgolne.getPosition().x + Okno.getSize().x / 11.5, najedzenie.getPosition().y );
NAJEDZENIE.setCharacterSize( 16 );
NAJEDZENIE.setFillColor( Color::White );
M << minuta;
H << godzina;
D << dzien;
Text czas;
czas.setFont( nr ); czas.setCharacterSize( 16 );
czas.setString( H.str() + ":" + M.str() );
if( minuta < 10 )
czas.setString( H.str() + ":0" + M.str() );
if( godzina < 10 )
czas.setString( "0" + H.str() + ":" + M.str() );
if( godzina < 10 && minuta < 10 )
czas.setString( "0" + H.str() + ":0" + M.str() );
czas.setPosition( kreska2.getPosition().x + Okno.getSize().x / 45, hp.getPosition().y );
Text Pokaz_dzien;
Pokaz_dzien.setCharacterSize( 16 ); Pokaz_dzien.setFont( nr );
Pokaz_dzien.setPosition( kreska2.getPosition().x + Okno.getSize().x / 45, energia.getPosition().y );
Pokaz_dzien.setString( "Dzien: " + D.str() );
Okno.draw( HP );
Okno.draw( ENERGIA );
Okno.draw( NAJEDZENIE );
Okno.draw( Pokaz_dzien );
Okno.draw( czas );
}
void InfoRuch()
{
Font as;
as.loadFromFile( "Fonts/asInterfejs.otf" );
Text PressE( "Ruch (E)", as ); PressE.setCharacterSize( 16 );
PressE.setPosition( StatOgolne2.getPosition().x, StatOgolne2.getPosition().y );
Text AnulujRuch( "Anuluj (Escape)", as ); AnulujRuch.setCharacterSize( 16 );
AnulujRuch.setPosition( StatOgolne2.getPosition().x, StatOgolne2.getPosition().x / 8 );
Okno.draw( PressE );
Okno.draw( AnulujRuch );
}
int main()
{
bool W_Menu = true;
bool GameStarted = false;
bool Ruch = false;
PokazZnacznik = false;
Okno.create( VideoMode( 1366, 768, 32 ), "Projekt Gry", Style::Fullscreen );
Okno.setFramerateLimit( 60 ); Okno.setActive( true );
cam.setSize( Okno.getSize().x, Okno.getSize().y );
cam.setCenter( Okno.getSize().x / 2, Okno.getSize().y / 2 );
Font mh; mh.loadFromFile( "Fonts/mh.otf" );
Text Start( "Start", mh, 38 );
Start.setFillColor( Color::White ); Start.setPosition( 300, 300 );
Text Ustawienia( "Ustawienia", mh, 38 );
Ustawienia.setFillColor( Color::White ); Ustawienia.setPosition( 300, 340 );
Text R1( "1280x800", mh, 38 ); R1.setPosition( 300, 300 ); R1.setFillColor( Color::White );
Text R2( "1280x1024", mh, 38 ); R1.setPosition( 300, 340 ); R1.setFillColor( Color::White );
Text R3( "1366x768", mh, 38 ); R1.setPosition( 300, 380 ); R1.setFillColor( Color::White );
Text R4( "1600x900", mh, 38 ); R1.setPosition( 300, 420 ); R1.setFillColor( Color::White );
Text R5( "1920x1080", mh, 38 ); R1.setPosition( 300, 460 ); R1.setFillColor( Color::White );
Text Wstecz( "Wstecz", mh, 40 ); Wstecz.setPosition( 300, 500 ); Wstecz.setFillColor( Color::White );
Text Wyjscie( "Wyjscie", mh, 38 );
Wyjscie.setFillColor( Color::White ); Wyjscie.setPosition( 300, 380 );
RectangleShape Ramka_Ruch( Vector2f( 50, 50 ) ); Ramka_Ruch.setFillColor( Color( 205, 133, 63, 230 ) );
Postac.hp = 100;
Postac.energia = 100;
Postac.Najedzenie = 100;
Postac.x = 6; Postac.y = 5;
noc = false;
dzien = 4;
minuta = 52;
godzina = 14;
int licznik = 0;
Event Akcja;
while( Okno.isOpen() )
{
Vector2i pixelPos = Mouse::getPosition( Okno );
int Wx = Okno.mapPixelToCoords( pixelPos ).x;
int Wy = Okno.mapPixelToCoords( pixelPos ).y;
int Px = Wy / 64; int Py = Wx / 64;
int znX, znY;
if( Ruch == false )
licznik++;
if( Okno.pollEvent( Akcja ) )
{
if( Akcja.type == Event::Closed )
Okno.close();
if( PokazZnacznik == false && Akcja.type == Event::KeyPressed && Akcja.key.code == Keyboard::Escape )
{
W_Menu = true; Ruch = false; licznik = 0;
}
if( Start.getGlobalBounds().contains( Mouse::getPosition( Okno ).x, Mouse::getPosition( Okno ).y ) )
{
Start.setFillColor( Color::Red );
if( W_Menu == true && Akcja.type == Event::MouseButtonPressed && Akcja.mouseButton.button == Mouse::Left
&& GameStarted == false )
{
Generowanie_Mapy(); W_Menu = false; GameStarted = true; Interfejs();
}
}
if( !Start.getGlobalBounds().contains( Mouse::getPosition( Okno ).x, Mouse::getPosition( Okno ).y ) )
Start.setFillColor( Color::White );
if( Ustawienia.getGlobalBounds().contains( Mouse::getPosition( Okno ).x, Mouse::getPosition( Okno ).y ) )
{
Ustawienia.setFillColor( Color::Red );
}
if( !Ustawienia.getGlobalBounds().contains( Mouse::getPosition( Okno ).x, Mouse::getPosition( Okno ).y ) )
Ustawienia.setFillColor( Color::White );
if( Wyjscie.getGlobalBounds().contains( Mouse::getPosition( Okno ).x, Mouse::getPosition( Okno ).y ) )
{
Wyjscie.setFillColor( Color::Red );
if( W_Menu == true && Akcja.type == Event::MouseButtonPressed && Akcja.mouseButton.button == Mouse::Left )
Okno.close();
}
if( !Wyjscie.getGlobalBounds().contains( Mouse::getPosition( Okno ).x, Mouse::getPosition( Okno ).y ) )
Wyjscie.setFillColor( Color::White );
if( Start.getGlobalBounds().contains( Mouse::getPosition( Okno ).x, Mouse::getPosition( Okno ).y ) )
{
Start.setFillColor( Color::Red );
if( W_Menu == true && Akcja.type == Event::MouseButtonPressed && Akcja.mouseButton.button == Mouse::Left
&& GameStarted == true )
W_Menu = false;
}
if( W_Menu == false )
{
for( int a = 0; a < 25; a++ )
{
for( int b = 0; b < 25; b++ )
{
if( Mapa[ a ][ b ].myszka == true )
Mapa[ a ][ b ].myszka = false;
}
}
if( Mapa[ Px ][ Py ].obraz.getGlobalBounds().contains( Wx, Wy ) && !StatOgolne.getGlobalBounds().contains( Wx, Wy )
&& !StatOgolne2.getGlobalBounds().contains( Wx, Wy ) )
{
Mapa[ Px ][ Py ].myszka = true;
if( Ruch == true && Akcja.type == Event::MouseButtonPressed && Akcja.mouseButton.button == Mouse::Left )
{
PokazZnacznik = true; znX = Wy / 64; znY = Wx / 64;
}
}
if( Ruch == true && PokazZnacznik == true && Akcja.type == Event::KeyPressed && Akcja.key.code == Keyboard::E )
{
PokazZnacznik = false; Postac.Wykonanie_Ruchu( znX, znY );
}
if( PokazZnacznik == true && Akcja.type == Event::KeyPressed && Akcja.key.code == Keyboard::Escape )
{
PokazZnacznik = false;
}
}
if( Akcja.type == Event::KeyPressed && Akcja.key.code == Keyboard::W )
{
cam.move( 0, - 15 ); StatOgolne.move( 0, - 15 );
}
if( Akcja.type == Event::KeyPressed && Akcja.key.code == Keyboard::S )
{
cam.move( 0, 15 ); StatOgolne.move( 0, 15 );
}
if( Akcja.type == Event::KeyPressed && Akcja.key.code == Keyboard::A )
{
cam.move( - 15, 0 ); StatOgolne.move( - 15, 0 );
}
if( Akcja.type == Event::KeyPressed && Akcja.key.code == Keyboard::D )
{
cam.move( 15, 0 ); StatOgolne.move( 15, 0 );
}
}
int CamPosPPx = cam.getCenter().x;
int CamPosPPy = cam.getCenter().y;
if( W_Menu == true )
{
if( GameStarted == true )
{
Start.setString( "Kontynuuj" );
}
cam.setCenter( Okno.getSize().x / 2, Okno.getSize().y / 2 );
Okno.setView( cam );
Okno.draw( Start ); Okno.draw( Ustawienia ); Okno.draw( Wyjscie );
}
cam.setCenter( CamPosPPx, CamPosPPy );
if( W_Menu == false && GameStarted == true )
{
Okno.setView( cam );
Wyswietlanie_Mapy( znX, znY );
Ladowanie_Postaci();
Rysowani_Interfejsu();
RysowanieNapisy_interfejs();
ObliczanieCzasu();
if( PokazZnacznik == true )
InfoRuch();
}
if( licznik == 60 )
{
Ruch = true;
licznik = 0;
}
Okno.display();
Okno.clear();
}
}