MrPoxipol |
» 2013-08-09 20:26:43 Monice chodzi o to, że masz np. taką tablicę z liczbami (używając enum, tylko liczbami od 0 do 2, z nazwami). Jeśli zostanie wykonany jakiś ruch, zaktualizowane dane zostaną zapisane do tej tablicy. |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-08-09 23:42:25 Tylko nie wiem jak można by zapisać te wartości w tablicy tak aby potem można było je porównać . Narazie zrobiłem tak ze mam 3x3 tablice i wszystkie pola wypełnione są 1 - krzyżyk , 2 - kółko . Tylko cóż mi. Z tego jak nie wiadomo gdzie one są , jestem jeszcze laikiem , i co prawda podstawy znam ale nie znam rozwiązań na niektóre przypadki . Jak mógłbym zapisywać do tej tablicy liczby aby potem można było je porównać ?? Miałem pomysł żeby sprawdzać pole (miejsce na krzyżyk lub kółko) od 0 do 8 elementu , i jeżeli JAKAŚ figura została przypisana na to pole to zapisz do tablicy dwuwymiarowej rownowaznie . Czyli np : sprawdzam czy aby na polu [0] jakiejś figury , sprawdzam czy to kółko czy krzyżyk , zapisuje do tablicy [0][0] czyli ze byłoby to na swoim miejscu , lecz nie wiem czy to wypali , bardzo liczę na waszą pomoc :) |
|
abdi |
» 2013-08-10 00:26:27 int main() { enum Field { Empty, X, O }; Field board[ 3 ][ 3 ] = { }; board[ 0 ][ 0 ] = X; board[ 1 ][ 0 ] = X; board[ 2 ][ 0 ] = X; if( board[ 0 ][ 0 ] == board[ 1 ][ 0 ] == board[ 2 ][ 0 ] ) { ... } }
Tak się przypisuje i sprawdza. Oczywiście to tylko głupi przykład ale może Cię naprowadzi. |
|
Monika90 |
» 2013-08-10 00:30:38 Moim zdaniem to można zrobić tak: Masz tablicę reprezentującą planszę: enum Symbol { Nic, X, O }; Symbol plansza[ 3 ][ 3 ] = { };
początkowo wszystkie jej elementy są równe Nic. Masz też zmienną, która pamięta kto wykonuje ruch, i zmienną która zlicza ilość ruchów. Symbol kto_teraz_gra = X; int ile_ruchow = 0;
No i jak bieżący gracz kliknie w planszę to na podstawie współrzędnych kliknięcia obliczasz indeksy, wstawiasz jego symbol do tablicy i sprawdzasz czy przypadkiem nie wgrał badź zremisował int i =( mysz_y - plansza_y ) / wysokosc_pola; int j =( mysz_x - plansza_x ) / szerokosc_pola; if( i >= 0 && i < 3 && j >= 0 && j < 3 ) { ++ile_ruchow; plansza[ i ][ j ] = kto_teraz_gra; if( wygrana( i, j, kto_teraz_gra ) ) cout << "wygral " << kto_teraz_gra << endl; else if( ile_ruchow == 9 ) cout << "remis" << endl; else kto_teraz_gra =( kto_teraz_gra == X ? O: X ); }
plansza_x i plansza_y to współrzędne lewego górnego rogu planszy. Pozostaje do napisania funkcja wgrana, może być tak: bool wygrana( int i, int j, Symbol gracz ) { return plansza[ i ][ 0 ] == gracz && plansza[ i ][ 1 ] == gracz && plansza[ i ][ 2 ] == gracz || plansza[ 0 ][ j ] == gracz && plansza[ 1 ][ j ] == gracz && plansza[ 2 ][ j ] == gracz || plansza[ 0 ][ 0 ] == gracz && plansza[ 1 ][ 1 ] == gracz && plansza[ 2 ][ 2 ] == gracz || plansza[ 0 ][ 2 ] == gracz && plansza[ 1 ][ 1 ] == gracz && plansza[ 2 ][ 0 ] == gracz; }
To nie uwzględnia wyświetlania sprite'ów, ale chyba możesz to dodać sam. To tak w skrócie i nie wiem nawet czy to zadziała - mogłam coś przeoczyć, itp. |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-08-10 09:55:05 Najpierw spróbuje mojego pomysłu , jeżeli nie będzie to dobrze to spróbuje zrobić podobnie jak Ty , wielkie dzięki za odp.
|
|
MrPoxipol |
» 2013-08-10 10:00:00 Na przyszłość, żeby popracować nad logicznym myśleniem, radziłbym robić zadanka ze SPOJ'a. |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-08-10 14:09:11 Znalazłem dobre rozwiązanie (to co pisałem wyżej okazało się w 100 % dobre :P ) , w private klasy pole napisałem enum Field { Empty, X, O }; Field board[ 3 ][ 3 ];
Potem gdy ustawiałem pozycje na figure to tak jakby "przechwyciłem ją " sprite[ i ].setTexture( krzyzyk ); sprite[ i ].setPosition( pozycjaNaFigure );
if( sprite[ i ].getPosition() == pole[ 0 ].getPosition() ) { board[ 0 ][ 0 ] = X; }
Potem w metodzie sprawdzającej sprawdzam czy są w odpowiednim położeniu i wszystko ładnie działa if( board[ 0 ][ 0 ] == X && board[ 0 ][ 1 ] == X && board[ 0 ][ 2 ] == X ) { cout << "Udalo sie " << endl; return true; }
Myśle że dużo osób jako pierwszą gre 2d robi kółko i krzyżyk więc tutaj jest dla was poomoc :) . Niedługo wstawie moją grę w temacie "Wasze Prace " . Dzięki za pomoc ! |
|
Monika90 |
» 2013-08-10 15:49:54 To fajnie, że działa. Dodam jeszcze, że moje obliczanie indeksów int i =( mysz_y - plansza_y ) / wysokosc_pola; int j =( mysz_x - plansza_x ) / szerokosc_pola;
|
jest nie do końca poprawne i lepiej będzie tak: int i = std::floor(( mysz_y - plansza_y ) / float( wysokosc_pola ) ); int j = std::floor(( mysz_x - plansza_x ) / float( szerokosc_pola ) );
Albo jak ktoś nie lubi liczb zmiennoprzecinkowych to: int i =( mysz_y - plansza_y + wysokosc_pola ) / wysokosc_pola - 1; int j =( mysz_x - plansza_x + szerokosc_pola ) / szerokosc_pola - 1;
|
|
1 « 2 » 3 |