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

[SFML] Złe działanie funkcji

Ostatnio zmodyfikowano 2012-08-19 14:38
Autor Wiadomość
starter
Temat założony przez niniejszego użytkownika
[SFML] Złe działanie funkcji
» 2012-08-18 22:50:40
Witam,
pisze prostą grę używając SFML 1.6. W grze tej jest funkcja (napisane przeze mnie) zamieniająca zmienne
int
 i
float
 na zmienne
sf::String
, aby mogły one być wyświetlane w oknie gry w czasie rzeczywistym. Funkcja ta jest wywoływana przy każdym przebiegu pętli głównej gry.

Problem polega na tym, że:
zmienna scoree przyjmuje tylko wartość "0" i "1";
zmienne predkoscc1 i predkoscc2 przyjmują wartości tylko co "0.5(0,0.5,1,1.5 itd.) oraz "zła wartosc";


C/C++
void sprwydruku( int & wynikk, float & speedd, float & speedd2, sf::String & scoree, sf::String & predkoscc1, sf::String & predkoscc2 )
{
    if( speedd == 0 )
         predkoscc1.SetText( L"0" );
    else
    {
        if( speedd == 0.1 )
             predkoscc1.SetText( L"0.1" );
        else
        {
            if( speedd == 0.2 )
                 predkoscc1.SetText( L"0.2" );
            else
            {
                if( speedd == 0.3 )
                     predkoscc1.SetText( L"0.3" );
                else
                {
                    if( speedd == 0.4 )
                         predkoscc1.SetText( L"0.4" );
                    else
                    {
                        if( speedd == 0.5 )
                             predkoscc1.SetText( L"0.5" );
                        else
                        {
                            if( speedd == 0.6 )
                                 predkoscc1.SetText( L"0.6" );
                            else
                            {
                                if( speedd == 0.7 )
                                     predkoscc1.SetText( L"0.7" );
                                else
                                {
                                    if( speedd == 0.8 )
                                         predkoscc1.SetText( L"0.8" );
                                    else
                                    {
                                        if( speedd == 0.9 )
                                             predkoscc1.SetText( L"0.9" );
                                        else
                                        {
                                            if( speedd == 1 )
                                                 predkoscc1.SetText( L"1" );
                                            else
                                            {
                                                if( speedd == 1.1 )
                                                     predkoscc1.SetText( L"1.1" );
                                                else
                                                {
                                                    if( speedd == 1.2 )
                                                         predkoscc1.SetText( L"1.2" );
                                                    else
                                                    {
                                                        if( speedd == 1.3 )
                                                             predkoscc1.SetText( L"1.3" );
                                                        else
                                                        {
                                                            if( speedd == 1.4 )
                                                                 predkoscc1.SetText( L"1.4" );
                                                            else
                                                            {
                                                                if( speedd == 1.5 )
                                                                     predkoscc1.SetText( L"1.5" );
                                                                else
                                                                {
                                                                    if( speedd == 1.6 )
                                                                         predkoscc1.SetText( L"1.6" );
                                                                    else
                                                                    {
                                                                        if( speedd == 1.7 )
                                                                             predkoscc1.SetText( L"1.7" );
                                                                        else
                                                                        {
                                                                            if( speedd == 1.8 )
                                                                                 predkoscc1.SetText( L"1.8" );
                                                                            else
                                                                            {
                                                                                if( speedd == 1.9 )
                                                                                     predkoscc1.SetText( L"1.9" );
                                                                                else
                                                                                {
                                                                                    if( speedd == 2 )
                                                                                         predkoscc1.SetText( L"2" );
                                                                                    else
                                                                                    {
                                                                                        if( speedd == 2.1 )
                                                                                             predkoscc1.SetText( L"2.1" );
                                                                                        else
                                                                                        {
                                                                                            if( speedd == 2.2 )
                                                                                                 predkoscc1.SetText( L"2.2" );
                                                                                            else
                                                                                            {
                                                                                                if( speedd == 2.3 )
                                                                                                     predkoscc1.SetText( L"2.3" );
                                                                                                else
                                                                                                {
                                                                                                    if( speedd == 2.4 )
                                                                                                         predkoscc1.SetText( L"2.4" );
                                                                                                    else
                                                                                                    {
                                                                                                        if( speedd == 2.5 )
                                                                                                             predkoscc1.SetText( L"2.5" );
                                                                                                        else
                                                                                                        {
                                                                                                            if( speedd == 2.6 )
                                                                                                                 predkoscc1.SetText( L"2.6" );
                                                                                                            else
                                                                                                            {
                                                                                                                if( speedd == 2.7 )
                                                                                                                     predkoscc1.SetText( L"2.7" );
                                                                                                                else
                                                                                                                {
                                                                                                                    if( speedd == 2.8 )
                                                                                                                         predkoscc1.SetText( L"2.8" );
                                                                                                                    else
                                                                                                                    {
                                                                                                                        if( speedd == 2.9 )
                                                                                                                             predkoscc1.SetText( L"2.9" );
                                                                                                                        else
                                                                                                                        {
                                                                                                                            if( speedd == 3 )
                                                                                                                                 predkoscc1.SetText( L"3" );
                                                                                                                            else
                                                                                                                            {
                                                                                                                                if( speedd > 3 )
                                                                                                                                     predkoscc1.SetText( L">3" );
                                                                                                                                else
                                                                                                                                {
                                                                                                                                    if( speedd > 100 )
                                                                                                                                         predkoscc1.SetText( L">100" );
                                                                                                                                    else
                                                                                                                                    {
                                                                                                                                        if( speedd > 1000 )
                                                                                                                                             predkoscc1.SetText( L">1000" );
                                                                                                                                        else
                                                                                                                                             predkoscc1.SetText( L"zla wartosc" );
                                                                                                                                       
                                                                                                                                    }
                                                                                                                                }
                                                                                                                            }
                                                                                                                        }
                                                                                                                       
                                                                                                                    }
                                                                                                                }
                                                                                                            }
                                                                                                        }
                                                                                                    }
                                                                                                }
                                                                                            }
                                                                                        }
                                                                                    }
                                                                                }
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
   
    if( speedd2 == 0 )
         predkoscc2.SetText( L"0" );
    else
    {
        if( speedd2 == 0.1 )
             predkoscc2.SetText( L"0.1" );
        else
        {
            if( speedd2 == 0.2 )
                 predkoscc2.SetText( L"0.2" );
            else
            {
                if( speedd2 == 0.3 )
                     predkoscc2.SetText( L"0.3" );
                else
                {
                    if( speedd2 == 0.4 )
                         predkoscc2.SetText( L"0.4" );
                    else
                    {
                        if( speedd2 == 0.5 )
                             predkoscc2.SetText( L"0.5" );
                        else
                        {
                            if( speedd2 == 0.6 )
                                 predkoscc2.SetText( L"0.6" );
                            else
                            {
                                if( speedd2 == 0.7 )
                                     predkoscc2.SetText( L"0.7" );
                                else
                                {
                                    if( speedd2 == 0.8 )
                                         predkoscc2.SetText( L"0.8" );
                                    else
                                    {
                                        if( speedd2 == 0.9 )
                                             predkoscc2.SetText( L"0.9" );
                                        else
                                        {
                                            if( speedd2 == 1 )
                                                 predkoscc2.SetText( L"1" );
                                            else
                                            {
                                                if( speedd2 == 1.1 )
                                                     predkoscc2.SetText( L"1.1" );
                                                else
                                                {
                                                    if( speedd2 == 1.2 )
                                                         predkoscc2.SetText( L"1.2" );
                                                    else
                                                    {
                                                        if( speedd2 == 1.3 )
                                                             predkoscc2.SetText( L"1.3" );
                                                        else
                                                        {
                                                            if( speedd2 == 1.4 )
                                                                 predkoscc2.SetText( L"1.4" );
                                                            else
                                                            {
                                                                if( speedd2 == 1.5 )
                                                                     predkoscc2.SetText( L"1.5" );
                                                                else
                                                                {
                                                                    if( speedd2 == 1.6 )
                                                                         predkoscc2.SetText( L"1.6" );
                                                                    else
                                                                    {
                                                                        if( speedd2 == 1.7 )
                                                                             predkoscc2.SetText( L"1.7" );
                                                                        else
                                                                        {
                                                                            if( speedd2 == 1.8 )
                                                                                 predkoscc2.SetText( L"1.8" );
                                                                            else
                                                                            {
                                                                                if( speedd2 == 1.9 )
                                                                                     predkoscc2.SetText( L"1.9" );
                                                                                else
                                                                                {
                                                                                    if( speedd2 == 2 )
                                                                                         predkoscc2.SetText( L"2" );
                                                                                    else
                                                                                    {
                                                                                        if( speedd2 == 2.1 )
                                                                                             predkoscc2.SetText( L"2.1" );
                                                                                        else
                                                                                        {
                                                                                            if( speedd2 == 2.2 )
                                                                                                 predkoscc2.SetText( L"2.2" );
                                                                                            else
                                                                                            {
                                                                                                if( speedd2 == 2.3 )
                                                                                                     predkoscc2.SetText( L"2.3" );
                                                                                                else
                                                                                                {
                                                                                                    if( speedd2 == 2.4 )
                                                                                                         predkoscc2.SetText( L"2.4" );
                                                                                                    else
                                                                                                    {
                                                                                                        if( speedd2 == 2.5 )
                                                                                                             predkoscc2.SetText( L"2.5" );
                                                                                                        else
                                                                                                        {
                                                                                                            if( speedd2 == 2.6 )
                                                                                                                 predkoscc2.SetText( L"2.6" );
                                                                                                            else
                                                                                                            {
                                                                                                                if( speedd2 == 2.7 )
                                                                                                                     predkoscc2.SetText( L"2.7" );
                                                                                                                else
                                                                                                                {
                                                                                                                    if( speedd2 == 2.8 )
                                                                                                                         predkoscc2.SetText( L"2.8" );
                                                                                                                    else
                                                                                                                    {
                                                                                                                        if( speedd2 == 2.9 )
                                                                                                                             predkoscc2.SetText( L"2.9" );
                                                                                                                        else
                                                                                                                        {
                                                                                                                            if( speedd2 == 3 )
                                                                                                                                 predkoscc2.SetText( L"3" );
                                                                                                                            else
                                                                                                                            {
                                                                                                                                if( speedd2 > 3 )
                                                                                                                                     predkoscc2.SetText( L">3" );
                                                                                                                                else
                                                                                                                                {
                                                                                                                                    if( speedd2 > 100 )
                                                                                                                                         predkoscc2.SetText( L">100" );
                                                                                                                                    else
                                                                                                                                    {
                                                                                                                                        if( speedd2 > 1000 )
                                                                                                                                             predkoscc2.SetText( L">1000" );
                                                                                                                                        else
                                                                                                                                             predkoscc2.SetText( L"zla wartosc" );
                                                                                                                                       
                                                                                                                                    }
                                                                                                                                }
                                                                                                                            }
                                                                                                                        }
                                                                                                                       
                                                                                                                    }
                                                                                                                }
                                                                                                            }
                                                                                                        }
                                                                                                    }
                                                                                                }
                                                                                            }
                                                                                        }
                                                                                    }
                                                                                }
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
   
    switch( wynikk )
    {
    case 0:
        scoree.SetText( L"0" );
        break;
       
    case 1:
        scoree.SetText( L"1" );
        break;
       
    case 2:
        scoree.SetText( L"2" );
        break;
       
    case 3:
        scoree.SetText( L"3" );
        break;
       
    case 4:
        scoree.SetText( L"4" );
        break;
       
    case 5:
        scoree.SetText( L"5" );
        break;
       
    case 6:
        scoree.SetText( L"6" );
        break;
       
    case 7:
        scoree.SetText( L"7" );
        break;
       
    case 8:
        scoree.SetText( L"8" );
        break;
       
    case 9:
        scoree.SetText( L"9" );
        break;
       
    case 10:
        scoree.SetText( L"10" );
        break;
       
    case 11:
        scoree.SetText( L"11" );
        break;
       
    case 12:
        scoree.SetText( L"12" );
        break;
       
    case 13:
        scoree.SetText( L"13" );
        break;
       
    case 14:
        scoree.SetText( L"14" );
        break;
       
    case 15:
        scoree.SetText( L"15" );
        break;
       
    case 16:
        scoree.SetText( L"16" );
        break;
       
    case 17:
        scoree.SetText( L"17" );
        break;
       
    case 18:
        scoree.SetText( L"18" );
        break;
       
    case 19:
        scoree.SetText( L"19" );
        break;
       
    case 20:
        scoree.SetText( L"20" );
        break;
       
        default:
        if( wynikk > 20 )
             scoree.SetText( L">20" );
        else
             scoree.SetText( L"zla wartosc" );
       
        break;
    }
   
}

Sory za długość funkcji, ale tylko tak potrafiłem zamienić int i float na sf::String.
P-62916
m4tx
» 2012-08-18 23:09:23
Frazy, które należy wpisać w wyszukiwarkę google:
P-62920
starter
Temat założony przez niniejszego użytkownika
» 2012-08-18 23:13:44
potrzebuje sf::String i zamienę zrobiłem tylko źle działa chociaż moim zdanie powinno być okej
P-62922
akwes
» 2012-08-18 23:17:33
@starter


int lub float -> std::string

a potem z tego std::string możesz stworzyć sf::String(std::string) będzie Ci łatwiej..

Aczkolwiek warto też przeglądnąć kurs C++ tutaj
P-62923
starter
Temat założony przez niniejszego użytkownika
» 2012-08-18 23:28:03
int -> std::string
znalazłem metodę:
C/C++
int i = 42;
ostringstream ss;
ss << i;
string str = ss.str();

dalej działa tylko dla wartości 0 i 1

//edit:
a float to string nie mogę znaleźć
P-62924
akwes
» 2012-08-18 23:55:51
C/C++
float i = 42.234f;
ostringstream ss;
ss << i;
string str = ss.str();

Może ;>

P-62925
waxx
» 2012-08-19 00:06:11
C/C++
template < class T >
std::string itos( T i )
{
    std::stringstream ss;
    std::string str;
    ss << i;
    ss >> str;
   
    return str;
   
}


///////
sf::String text;
text.SetText( itos( 0.5f ) );
text.SetText( itos( 2 ) );

??
P-62926
Mrovqa
» 2012-08-19 12:18:34
Możesz użyć wygodniejszego sposobu - sstream - albo itoa oraz ftoa (czy jak to się zapisywało). Osobiście polecam pierwszy sposób (jak przedmówcy), ponieważ jest o wiele wygodniejszy.
P-62934
« 1 » 2
  Strona 1 z 2 Następna strona