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

[SFML 2.0] 1 klikniecie 8 akcji ... ,czyli miało być inaczej...

Ostatnio zmodyfikowano 2013-02-17 22:32
Autor Wiadomość
Alan468
Temat założony przez niniejszego użytkownika
[SFML 2.0] 1 klikniecie 8 akcji ... ,czyli miało być inaczej...
» 2013-02-17 18:51:11
Witam,
    Chciałem sobie napisać "Grę w Kółko i Krzyżyk", wyliczyłem sobie wielkości i pozycje wszystkich "okienek", dopasowałem kółka i krzyżyki, wszystko zaczęło pasować to zacząłem pisać
if()
'y , parę zmiennych
bool
 dla sprawdzenia
CzyKliknieto_1 = false
(nie używałem tablic, aby uniknąć błędów w numeracji),... tylko że po pół godzinie jak skończyłem pisać i uruchomiłem program to tylko pole "1" reaguje tak jak powinno + zapełnia resztę ,albo jeśli kliknę na innych to wypełnia wszystkie oprócz pierwszego ...
C/C++
#include <SFML/Graphics.hpp>
using namespace sf;

int main()
{ //kz -Kzyrzyk; ko-kolo; kw-kwadrat; // Wiem "PARE" zmiennych to to nie jest :/:)
    bool kz1 = false, kz2 = false, kz3 = false, kz4 = false, kz5 = false, kz6 = false, kz7 = false, kz8 = false, kz9 = false;
    bool ko1 = false, ko2 = false, ko3 = false, ko4 = false, ko5 = false, ko6 = false, ko7 = false, ko8 = false, ko9 = false;
    bool kw1 = false, kw2 = false, kw3 = false, kw4 = false, kw5 = false, kw6 = false, kw7 = false, kw8 = false, kw9 = false;
   
    Texture tlo; tlo.loadFromFile( "data/tlo/tlo.bmp" ); Sprite Tlo; Tlo.setTexture( tlo );
    /* i wiele innych textur i sprajtów */
   
    RenderWindow Okno_Gry( VideoMode( 500, 500, 32 ), "Kolko i Krzyzyk" );
    Event Zdarzenie;
    while( Okno_Gry.isOpen() ) {
       
        int X_Myszy = Zdarzenie.mouseMove.x;
        int Y_Myszy = Zdarzenie.mouseMove.y;
       
        while( Okno_Gry.pollEvent( Zdarzenie ) ) {
            if( Zdarzenie.type == Event::Closed ) { Okno_Gry.close(); }
           
            if( kw1 == false ) {
                if(( X_Myszy >= 5 && X_Myszy <= 165 ) &&( Y_Myszy >= 5 && Y_Myszy <= 165 ) )
                {
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Left )
                    { kz1 = true; kw1 = true; }
                   
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Right )
                    { ko1 = true; kw1 = true; }
                }
            }
           
            if( kw2 == false ) {
                if(( X_Myszy >= 170 && X_Myszy <= 330 ) &&( Y_Myszy >= 5 && Y_Myszy <= 165 ) );
               
                {
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Left )
                    { kz2 = true; kw2 = true; }
                   
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Right )
                    { ko2 = true; kw2 = true; }
                }
            }
           
            if( kw3 == false ) {
                if(( X_Myszy >= 335 && X_Myszy <= 490 ) &&( Y_Myszy >= 5 && Y_Myszy <= 165 ) );
               
                {
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Left )
                    { kz3 = true; kw3 = true; }
                   
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Right )
                    { ko3 = true; kw3 = true; }
                }
            }
           
            if( kw4 == false ) {
                if(( X_Myszy >= 5 && X_Myszy <= 165 ) &&( Y_Myszy >= 170 && Y_Myszy <= 330 ) );
               
                {
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Left )
                    { kz4 = true; kw4 = true; }
                   
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Right )
                    { ko4 = true; kw4 = true; }
                }
            }
           
            if( kw5 == false ) {
                if(( X_Myszy >= 170 && X_Myszy <= 330 ) &&( Y_Myszy >= 170 && Y_Myszy <= 330 ) );
               
                {
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Left )
                    { kz5 = true; kw5 = true; }
                   
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Right )
                    { ko5 = true; kw5 = true; }
                }
            }
           
            if( kw6 == false ) {
                if(( X_Myszy >= 335 && X_Myszy <= 490 ) &&( Y_Myszy >= 170 && Y_Myszy <= 330 ) );
               
                {
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Left )
                    { kz6 = true; kw6 = true; }
                   
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Right )
                    { ko6 = true; kw6 = true; }
                }
            }
           
            if( kw7 == false ) {
                if(( X_Myszy >= 5 && X_Myszy <= 160 ) &&( Y_Myszy >= 335 && Y_Myszy <= 490 ) );
               
                {
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Left )
                    { kz7 = true; kw7 = true; }
                   
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Right )
                    { ko7 = true; kw7 = true; }
                }
            }
           
            if( kw8 == false ) {
                if(( X_Myszy >= 170 && X_Myszy <= 330 ) &&( Y_Myszy >= 335 && Y_Myszy <= 490 ) );
               
                {
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Left )
                    { kz8 = true; kw8 = true; }
                   
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Right )
                    { ko8 = true; kw8 = true; }
                }
            }
           
            if( kw9 == false ) {
                if(( X_Myszy >= 335 && X_Myszy <= 490 ) &&( Y_Myszy >= 335 && Y_Myszy <= 490 ) );
               
                {
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Left )
                    { kz9 = true; kw9 = true; }
                   
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Right )
                    { ko9 = true; kw9 = true; }
                }
            }
        }
        Okno_Gry.clear();
        Okno_Gry.draw( Tlo );
        if( kz1 == true ) { Okno_Gry.draw( Krzyzyk_1 ); }
        if( kz2 == true ) { Okno_Gry.draw( Krzyzyk_2 ); }
        if( kz3 == true ) { Okno_Gry.draw( Krzyzyk_3 ); }
        if( kz4 == true ) { Okno_Gry.draw( Krzyzyk_4 ); }
        if( kz5 == true ) { Okno_Gry.draw( Krzyzyk_5 ); }
        if( kz6 == true ) { Okno_Gry.draw( Krzyzyk_6 ); }
        if( kz7 == true ) { Okno_Gry.draw( Krzyzyk_7 ); }
        if( kz8 == true ) { Okno_Gry.draw( Krzyzyk_8 ); }
        if( kz9 == true ) { Okno_Gry.draw( Krzyzyk_9 ); }
       
        if( ko1 == true ) { Okno_Gry.draw( Kolko_1 ); }
        if( ko2 == true ) { Okno_Gry.draw( Kolko_2 ); }
        if( ko2 == true ) { Okno_Gry.draw( Kolko_3 ); }
        if( ko2 == true ) { Okno_Gry.draw( Kolko_4 ); }
        if( ko2 == true ) { Okno_Gry.draw( Kolko_5 ); }
        if( ko2 == true ) { Okno_Gry.draw( Kolko_6 ); }
        if( ko2 == true ) { Okno_Gry.draw( Kolko_7 ); }
        if( ko2 == true ) { Okno_Gry.draw( Kolko_8 ); }
        if( ko2 == true ) { Okno_Gry.draw( Kolko_9 ); }
       
        Okno_Gry.display();
    }
}
Wiem ,że można by było napisać to w o wiele krótszej formie ,ale tak też powinno działać ...(chyba) .
Skoro zmieniam
kz3 = true
 to reszta nie powinna się zmieniać ,... ale cóż .
P-76454
pekfos
» 2013-02-17 18:59:54
Zastanów się, jaki to ma sens?
C/C++
if( ko1 == true ) { Okno_Gry.draw( Kolko_1 ); }
if( ko2 == true ) { Okno_Gry.draw( Kolko_2 ); }
if( ko2 == true ) { Okno_Gry.draw( Kolko_3 ); }
if( ko2 == true ) { Okno_Gry.draw( Kolko_4 ); }
if( ko2 == true ) { Okno_Gry.draw( Kolko_5 ); }
if( ko2 == true ) { Okno_Gry.draw( Kolko_6 ); }
if( ko2 == true ) { Okno_Gry.draw( Kolko_7 ); }
if( ko2 == true ) { Okno_Gry.draw( Kolko_8 ); }
if( ko2 == true ) { Okno_Gry.draw( Kolko_9 ); }

PS: gdy już piszesz kod przez ctrl+c i ctrl+v, to jest coś nie tak..
P-76456
Alan468
Temat założony przez niniejszego użytkownika
» 2013-02-17 19:05:18
oooo :o tego nie zauważyłem ,(kopiowałem bo co to za sens pisać 9x to samo ...), ale cóż wciąż to samo
P-76457
pekfos
» 2013-02-17 19:09:39
P-76458
Alan468
Temat założony przez niniejszego użytkownika
» 2013-02-17 21:52:54
Było trochę zabawy ,ale wkomponowałem tablice i pętle ,... lecz wciąż mam ten sam błąd ,a jestem
100 %
 pewien że współrzędne kwadratów są poprawne i zmienne
bool
 są dobrze oznaczone,ale wciąż na 1 kliknięcie reaguje 8/9 "gry"...

C/C++
#include <SFML/Graphics.hpp>
using namespace sf;

int main()
{ //kz -Kzyrzyk; ko-kolo; kw-kwadrat;
    Event Zdarzenie;
    bool kz[ 9 ], ko[ 9 ], kw[ 9 ];
    Texture krzyzyk[ 9 ], kolko[ 9 ];
    Sprite Krzyzyk[ 9 ], Kolko[ 9 ];
    Texture tlo; tlo.loadFromFile( "data/tlo/tlo.bmp" ); Sprite Tlo; Tlo.setTexture( tlo );
   
    for( int i = 0; i <= 8; i++ ) {
        krzyzyk[ i ].loadFromFile( "data/obiekty/krzyzyk.bmp" ); Krzyzyk[ i ].setTexture( krzyzyk[ i ] );
        kolko[ i ].loadFromFile( "data/obiekty/kolko.bmp" ); Kolko[ i ].setTexture( kolko[ i ] );
        kz[ i ] = false; ko[ i ] = false; kw[ i ] = false; }
   
    RenderWindow Okno_Gry( VideoMode( 500, 500, 32 ), "Kolko i Krzyzyk" );
    while( Okno_Gry.isOpen() ) {
        int X_Myszy = Zdarzenie.mouseMove.x;
        int Y_Myszy = Zdarzenie.mouseMove.y;
       
        while( Okno_Gry.pollEvent( Zdarzenie ) ) {
            if( Zdarzenie.type == Event::Closed ) { Okno_Gry.close(); }
           
            if( kw[ 0 ] == false ) {
                if(( X_Myszy >= 5 && X_Myszy <= 165 ) &&( Y_Myszy >= 5 && Y_Myszy <= 165 ) )
                {
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Left )
                    { kz[ 0 ] = true; kw[ 0 ] = true; Krzyzyk[ 0 ].setPosition( 20, 20 ); }
                   
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Right )
                    { ko[ 0 ] = true; kw[ 0 ] = true; Kolko[ 0 ].setPosition( 20, 20 ); }
                } }
           
            if( kw[ 1 ] == false ) {
                if(( X_Myszy >= 170 && X_Myszy <= 330 ) &&( Y_Myszy >= 5 && Y_Myszy <= 165 ) );
               
                {
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Left )
                    { kz[ 1 ] = true; kw[ 1 ] = true; Krzyzyk[ 1 ].setPosition( 190, 20 ); }
                   
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Right )
                    { ko[ 1 ] = true; kw[ 1 ] = true; Kolko[ 1 ].setPosition( 190, 20 ); }
                } }
           
            if( kw[ 2 ] == false ) {
                if(( X_Myszy >= 335 && X_Myszy <= 490 ) &&( Y_Myszy >= 5 && Y_Myszy <= 165 ) );
               
                {
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Left )
                    { kz[ 2 ] = true; kw[ 2 ] = true; Krzyzyk[ 2 ].setPosition( 350, 20 ); }
                   
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Right )
                    { ko[ 2 ] = true; kw[ 2 ] = true; Kolko[ 2 ].setPosition( 350, 20 ); }
                } }
           
            if( kw[ 3 ] == false ) {
                if(( X_Myszy >= 5 && X_Myszy <= 165 ) &&( Y_Myszy >= 170 && Y_Myszy <= 330 ) );
               
                {
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Left )
                    { kz[ 3 ] = true; kw[ 3 ] = true; Krzyzyk[ 3 ].setPosition( 20, 190 ); }
                   
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Right )
                    { ko[ 3 ] = true; kw[ 3 ] = true; Kolko[ 3 ].setPosition( 20, 190 ); }
                } }
           
            if( kw[ 4 ] == false ) {
                if(( X_Myszy >= 170 && X_Myszy <= 330 ) &&( Y_Myszy >= 170 && Y_Myszy <= 330 ) );
               
                {
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Left )
                    { kz[ 4 ] = true; kw[ 4 ] = true; Krzyzyk[ 4 ].setPosition( 190, 190 ); }
                   
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Right )
                    { ko[ 4 ] = true; kw[ 4 ] = true; Kolko[ 4 ].setPosition( 190, 190 ); }
                } }
           
            if( kw[ 5 ] == false ) {
                if(( X_Myszy >= 335 && X_Myszy <= 490 ) &&( Y_Myszy >= 170 && Y_Myszy <= 330 ) );
               
                {
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Left )
                    { kz[ 5 ] = true; kw[ 5 ] = true; Krzyzyk[ 5 ].setPosition( 350, 190 ); }
                   
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Right )
                    { ko[ 5 ] = true; kw[ 5 ] = true; Kolko[ 5 ].setPosition( 350, 190 ); }
                } }
           
            if( kw[ 6 ] == false ) {
                if(( X_Myszy >= 5 && X_Myszy <= 160 ) &&( Y_Myszy >= 335 && Y_Myszy <= 490 ) );
               
                {
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Left )
                    { kz[ 6 ] = true; kw[ 6 ] = true; Krzyzyk[ 6 ].setPosition( 20, 350 ); }
                   
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Right )
                    { ko[ 6 ] = true; kw[ 6 ] = true; Kolko[ 6 ].setPosition( 20, 350 ); }
                } }
           
            if( kw[ 7 ] == false ) {
                if(( X_Myszy >= 170 && X_Myszy <= 330 ) &&( Y_Myszy >= 335 && Y_Myszy <= 490 ) );
               
                {
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Left )
                    { kz[ 7 ] = true; kw[ 7 ] = true; Krzyzyk[ 7 ].setPosition( 190, 350 ); }
                   
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Right )
                    { ko[ 7 ] = true; kw[ 7 ] = true; Kolko[ 7 ].setPosition( 190, 350 ); }
                } }
           
            if( kw[ 8 ] == false ) {
                if(( X_Myszy >= 335 && X_Myszy <= 490 ) &&( Y_Myszy >= 335 && Y_Myszy <= 490 ) );
               
                {
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Left )
                    { kz[ 8 ] = true; kw[ 8 ] = true; Krzyzyk[ 8 ].setPosition( 350, 350 ); }
                   
                    if( Zdarzenie.type == Event::MouseButtonPressed && Zdarzenie.mouseButton.button == Mouse::Right )
                    { ko[ 8 ] = true; kw[ 8 ] = true; Kolko[ 8 ].setPosition( 350, 350 ); }
                } }
        }
        Okno_Gry.clear();
        Okno_Gry.draw( Tlo );
        for( int o = 0; o <= 8; o++ ) {
            if( kz[ o ] == true ) { Okno_Gry.draw( Krzyzyk[ o ] ); }
            if( ko[ o ] == true ) { Okno_Gry.draw( Kolko[ o ] ); } }
        Okno_Gry.display();
    }
}
P-76471
Monika90
» 2013-02-17 22:32:11
no chyba to:
C/C++
int X_Myszy = Zdarzenie.mouseMove.x;
int Y_Myszy = Zdarzenie.mouseMove.y;
powinno być w wewnętrznej pętli, nie ma sensu pobierać współrzędnych myszy zanim pollEvent nie zapisze czegoś do struktury
Zdarzenie
.
P-76474
« 1 »
  Strona 1 z 1