[SFML 2.0] 1 klikniecie 8 akcji ... ,czyli miało być inaczej...
Ostatnio zmodyfikowano 2013-02-17 22:32
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 ...
#include <SFML/Graphics.hpp> using namespace sf;
int main() { 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 ); 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óż . |
|
pekfos |
» 2013-02-17 18:59:54 Zastanów się, jaki to ma sens? 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.. |
|
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 |
|
pekfos |
» 2013-02-17 19:09:39 |
|
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"...
#include <SFML/Graphics.hpp> using namespace sf;
int main() { 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(); } }
|
|
Monika90 |
» 2013-02-17 22:32:11 no chyba to: 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 . |
|
« 1 » |