Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SMFL] Odliczanie czasu

Ostatnio zmodyfikowano 2012-01-21 22:25
Autor Wiadomość
tomek5321
Temat założony przez niniejszego użytkownika
[SMFL] Odliczanie czasu
» 2012-01-21 18:52:28
Mając taki kodzik:
C/C++
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#include "Collision.h"
#include <sstream>
#include <iostream>
float zycie;
int dziki;
int c_dz, c_nie, c_wilk, gczas;

sf::Event zdarzenie;
sf::String tekst;
sf::Image obohater, owrog, otlo, oserce, okursor, olas1, optak, oniedzwiedz, optak2, ozegar;
sf::Sprite tlo, bohater, wrog, serce, kursor, las1, ptak, niedzwiedz, ptak2, zegar;
sf::Music dzik, dzwiek_kolizji, klik, dz_ptaki;
sf::Clock z_dzik, z_niedzwiedz, z_wilk, glowny_czas;
sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Dzik i Indyk", sf::Style::Fullscreen );
//funkcje

/*void menu_gry()
{
    while(!oknoAplikacji.GetEvent( zdarzenie ) )
{
     if( zdarzenie.Type == sf::Event::Closed || (zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code == sf::Key::Escape) )oknoAplikacji.Close();
}

}*/

int main()
{
   
    oknoAplikacji.ShowMouseCursor( false );
    oknoAplikacji.SetFramerateLimit( 500 );
    zycie = 10; dziki = 10;
    //grafika
    if(
    !obohater.LoadFromFile( "Obiekty/dzik.png" ) ||
    !owrog.LoadFromFile( "Obiekty/wilk.png" ) ||
    !ozegar.LoadFromFile( "Obiekty/zegar.png" ) ||
    !otlo.LoadFromFile( "Obiekty/tlo1.jpg" ) ||
    !olas1.LoadFromFile( "Obiekty/las1.png" ) ||
    !optak.LoadFromFile( "Obiekty/ptak.png" ) ||
    !optak2.LoadFromFile( "Obiekty/ptak2.png" ) ||
    !oniedzwiedz.LoadFromFile( "Obiekty/mis.png" ) ||
    !okursor.LoadFromFile( "Obiekty/kursor.png" )
    ) return EXIT_FAILURE;
   
    //dzwieki
    if(
    !dz_ptaki.OpenFromFile( "Muzyka/ptaki.wav" ) ||
    !klik.OpenFromFile( "Muzyka/klik.wav" ) ||
    !dzik.OpenFromFile( "Muzyka/dzik1.wav" ) ||
    !dzwiek_kolizji.OpenFromFile( "Muzyka/kolizja.wav" )
    ) return EXIT_FAILURE;
   
    //obiekty
    tlo.SetImage( otlo ); las1.SetImage( olas1 );
    kursor.SetImage( okursor ); kursor.SetScale( 0.5, 0.5 );
    ptak.SetImage( optak ); ptak.SetPosition( 540, 250 );
    ptak2.SetImage( optak2 ); ptak2.SetPosition( 500, 180 );
    zegar.SetImage( ozegar ); zegar.SetPosition( 300, 60 );
    niedzwiedz.SetImage( oniedzwiedz ); niedzwiedz.SetPosition( 500, 100 ); niedzwiedz.SetCenter( oniedzwiedz.GetWidth() / 2.0f, oniedzwiedz.GetHeight() / 2.0f );
    bohater.SetImage( obohater ); bohater.SetPosition( 300, 300 ); bohater.SetScale( 0.5, 0.5 ); bohater.SetCenter( obohater.GetWidth() / 2.0f, obohater.GetHeight() / 2.0f );
    wrog.SetImage( owrog ); wrog.SetPosition( 100, 100 ); wrog.SetScale( 0.5, 0.5 ); wrog.SetCenter( owrog.GetWidth() / 2.0f, owrog.GetHeight() / 2.0f );
   
   
   
    //muzyka gry
    /*dz_ptaki.Play();
        dz_ptaki.SetLoop(true);*/
   
    while( oknoAplikacji.IsOpened() ) // petla glowna
    {
        //menu_gry();
        while( oknoAplikacji.GetEvent( zdarzenie ) )
        {
           
            if( zdarzenie.Type == sf::Event::Closed ||( zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code == sf::Key::Escape ) ) oknoAplikacji.Close();
           
            const sf::Input & mysz = oknoAplikacji.GetInput();
            kursor.SetPosition( mysz.GetMouseX(), mysz.GetMouseY() );
           
            if( zdarzenie.Type == sf::Event::MouseButtonReleased && Collision::PixelPerfectTest( bohater, kursor ) == true )
            {
                klik.Play();
                dziki--;
                bohater.SetX( 1000 ); bohater.SetY( 1000 );
                z_dzik.Reset();
            }
           
            if( zdarzenie.Type == sf::Event::MouseButtonReleased && Collision::PixelPerfectTest( niedzwiedz, kursor ) == true )
            {
                klik.Play();
                niedzwiedz.SetX( 1000 ); niedzwiedz.SetY( 1000 );
                z_niedzwiedz.Reset();
            }
           
            if( zdarzenie.Type == sf::Event::MouseButtonReleased && Collision::PixelPerfectTest( wrog, kursor ) == true )
            {
                klik.Play();
                wrog.SetX( 1000 ); wrog.SetY( 1000 );
                z_wilk.Reset();
            }
           
            if( zdarzenie.Type == sf::Event::MouseButtonReleased && Collision::PixelPerfectTest( ptak, kursor ) == true )
            {
                klik.Play();
                dz_ptaki.Play();
                ptak.SetX( 1000 ); ptak.SetY( 1000 );
            }
           
            if( zdarzenie.Type == sf::Event::MouseButtonReleased && Collision::PixelPerfectTest( ptak2, kursor ) == true )
            {
                klik.Play();
                dz_ptaki.Play();
                ptak2.SetX( 1000 ); ptak2.SetY( 1000 );
            }
           
            if( zdarzenie.Key.Code == sf::Key::F1 ) { sf::Image zrzutEkranu = oknoAplikacji.Capture(); zrzutEkranu.SaveToFile( "zrzut-ekranu.png" ); }
           
        }
        //RESZTA
        const sf::Input & sterowanie = oknoAplikacji.GetInput();
       
        if( sterowanie.IsKeyDown( sf::Key::Left ) ) { if( Collision::PixelPerfectTest( bohater, wrog ) == true ) bohater.Move( + 30, 0 ); else bohater.Move( - 0.2, 0 ); bohater.FlipX( false ); }
        if( sterowanie.IsKeyDown( sf::Key::Right ) ) { if( Collision::PixelPerfectTest( bohater, wrog ) == true ) bohater.Move( - 30, 0 ); else bohater.Move( + 0.2, 0 ); bohater.FlipX( true ); }
        if( sterowanie.IsKeyDown( sf::Key::Up ) ) { if( Collision::PixelPerfectTest( bohater, wrog ) == true ) bohater.Move( 0, + 30 ); else bohater.Move( 0, - 0.2 ); }
        if( sterowanie.IsKeyDown( sf::Key::Down ) ) { if( Collision::PixelPerfectTest( bohater, wrog ) == true ) bohater.Move( 0, - 30 ); else bohater.Move( 0, + 0.2 ); }
       
        /*srand( time( NULL ) );
                 int los1 =( rand() % 4 ) + 1;
                 if(los1==1){if (Collision::PixelPerfectTest(wrog,bohater)==true)wrog.Move( + 30, 0 );else wrog.Move( -0.2, 0 );}
                 if(los1==2){if (Collision::PixelPerfectTest(wrog,bohater)==true)wrog.Move( - 30, 0 );else wrog.Move( +0.2, 0 );}
                 if(los1==3){if (Collision::PixelPerfectTest(wrog,bohater)==true)wrog.Move( 0, + 30 );else wrog.Move( 0, -0.2 );}
                 if(los1==4){if (Collision::PixelPerfectTest(wrog,bohater)==true)wrog.Move( 0, - 30 );else wrog.Move( 0, +0.2 );}
       
                 //kolizje
                if (Collision::PixelPerfectTest(wrog,bohater)==true) {dzwiek_kolizji.Play();zycie-=0.5;}*/
       
        //zegary
        c_dz =( rand() % 3 ) + 1;
        c_nie =( rand() % 4 ) + 2;
        c_wilk =( rand() % 6 ) + 2;
       
        if( z_dzik.GetElapsedTime() > c_dz )
        {
            int los1 =( rand() % 3 ) + 1;
            if( los1 == 1 ) { bohater.SetX( 247 ); bohater.SetY( 264 ); bohater.FlipX( true ); }
            if( los1 == 2 ) { bohater.SetX( 580 ); bohater.SetY( 520 ); bohater.FlipX( false ); }
            if( los1 == 3 ) { bohater.SetX( 94 ); bohater.SetY( 530 ); }
            if( los1 == 4 ) { bohater.SetX( 300 ); bohater.SetY( 600 ); }
            if( los1 == 5 ) { bohater.SetX( 200 ); bohater.SetY( 450 ); }
            z_dzik.Reset();
        }
       
        if( z_niedzwiedz.GetElapsedTime() > c_nie )
        {
            int los1 =( rand() % 5 ) + 1;
            if( los1 == 1 ) { niedzwiedz.SetX( 100 ); niedzwiedz.SetY( 300 ); }
            if( los1 == 2 ) { niedzwiedz.SetX( 300 ); niedzwiedz.SetY( 100 ); }
            if( los1 == 3 ) { niedzwiedz.SetX( 400 ); niedzwiedz.SetY( 500 ); }
            if( los1 == 4 ) { niedzwiedz.SetX( 300 ); niedzwiedz.SetY( 600 ); }
            if( los1 == 5 ) { niedzwiedz.SetX( 200 ); niedzwiedz.SetY( 450 ); }
            z_niedzwiedz.Reset();
        }
       
        if( z_wilk.GetElapsedTime() > c_wilk )
        {
           
            int los1 =( rand() % 5 ) + 1;
            if( los1 == 1 ) { wrog.SetX( 100 ); wrog.SetY( 300 ); }
            if( los1 == 2 ) { wrog.SetX( 300 ); wrog.SetY( 100 ); }
            if( los1 == 3 ) { wrog.SetX( 400 ); wrog.SetY( 500 ); }
            if( los1 == 4 ) { wrog.SetX( 300 ); wrog.SetY( 600 ); }
            if( los1 == 5 ) { wrog.SetX( 200 ); wrog.SetY( 450 ); }
            z_wilk.Reset();
        }
       
        srand( time( NULL ) );
        int los1 =( rand() % 4 ) + 1;
        if( los1 == 1 ) { ptak2.Move( + 0.1, - 0.1 ); ptak2.FlipX( true ); ptak2.FlipY( false ); }
        if( los1 == 2 ) { ptak2.Move( - 0.1, - 0.1 ); ptak2.FlipX( false ); ptak2.FlipY( false ); }
        if( los1 == 3 ) { ptak2.Move( + 0.1, + 0.1 ); ptak2.FlipX( true ); ptak2.FlipY( true ); }
        if( los1 == 4 ) { ptak2.Move( - 0.1, + 0.1 ); ptak2.FlipX( false ); ptak2.FlipY( true ); }
       
        /*zycie
                if (zycie==10)oserce.LoadFromFile( "Obiekty/serce.png" );
                if (zycie<10 && zycie>=6)oserce.LoadFromFile( "Obiekty/serce1.png" );
                if (zycie<6  && zycie>=3)oserce.LoadFromFile( "Obiekty/serce2.png" );
                if (zycie<3 && zycie>=0.1)oserce.LoadFromFile( "Obiekty/serce3.png" );
                if (zycie<0.1)oserce.LoadFromFile( "Obiekty/serce4.png" );
                serce.SetImage( oserce );
                serce.SetPosition( 650, 10 );*/
       
        //tekst
        gczas = glowny_czas.GetElapsedTime();
        std::ostringstream buffer;
        buffer << "Dziki: " << dziki << "   Czas: " << gczas;
        tekst.SetText( buffer.str() );
        tekst.SetPosition( 70, 540 );
       
        oknoAplikacji.Clear( sf::Color::Black );
        oknoAplikacji.Draw( tlo );
        oknoAplikacji.Draw( niedzwiedz ); oknoAplikacji.Draw( wrog ); oknoAplikacji.Draw( bohater );
        oknoAplikacji.Draw( ptak2 ); oknoAplikacji.Draw( ptak );
        oknoAplikacji.Draw( las1 );
        oknoAplikacji.Draw( serce ); oknoAplikacji.Draw( tekst );
        oknoAplikacji.Draw( kursor );
        oknoAplikacji.Display();
    }
    return 0;
}

Głównie chodzi o ten fragment:
C/C++
gczas = glowny_czas.GetElapsedTime();
std::ostringstream buffer;
buffer << "Dziki: " << dziki << "   Czas: " << gczas;
tekst.SetText( buffer.str() );
tekst.SetPosition( 70, 540 );
Jak zrobić, aby czas był odliczany od 60 sekund w dół?
P-49043
pekfos
» 2012-01-21 19:06:57
C/C++
int max = gtime + 60;
//..
gtime_update();
int elapsed = max - gtime;
if( elapsed == 0 ) timeout();
P-49044
tomek5321
Temat założony przez niniejszego użytkownika
» 2012-01-21 22:25:59
Wyskakują mi błędy tego typu:
error: 'gczas_update' was not declared in this scope
error: 'timeout' was not declared in this scope

C/C++
int max = gczas + 60;

while( oknoAplikacji.IsOpened() ) // petla glowna
{
    gczas_update();
    int elapsed = max - gczas;
    if( elapsed == 0 ) timeout();
   

//edit
Dobra, już nie trzeba, sam wpadłem na rozwiązanie:
C/C++
int odliczanie = 60;
//...
if( glowny_czas.GetElapsedTime() > 1 )
{
    odliczanie--;
    glowny_czas.Reset();
}
//...
bt_czas << odliczanie;
t_czas.SetText( bt_czas.str() );
t_czas.SetColor( sf::Color::Blue ); t_czas.SetFont( mojaCzcionka );
t_czas.SetSize( 70 );

Zamykam temat. To już drugi, który niepotrzebnie założyłem ;)
P-49083
« 1 »
  Strona 1 z 1