Ĺadny brzuch
Witam,
Aktualnie robię w Visual Studio 2005 grę MEMO. Używam do tego MFC (Dialog based). Dlatego MFC bo tego akurat u nas na studiach wymagają.
No i pisząc algorytm do porównywania kart napotkałem na problem, a polega on na tym, że nie wiem w jaki sposób program ma wiedzieć które karty porównać. Mam różne zmienne, które sprawdzają czy karta jest odsłonięta i tak dalej, ale samo porównanie kart już mam skopane.
Na czym gra polega to pewnie każdy wie, ale z grubsza powiem tylko że gracz kliknięciem myszy odsłania daną kartę, potem odsłania drugą i jeśli dwie odsłonięte karty nie mają jednakowego obrazka to z powrotem odsłaniane są koszulkami do góry, a jeśli obrazek jest taki sam to tak odwrócone karty pozostają. Gra ma być dla jednego gracza na czas, na różnych poziomach trudności, ale to na razie nie problem.
Algorytm mam prawie cały wykonany, jest on napisany z grubsza, w sensie tych zadeklarowanych zmiennych na początku, bo docelowo mają być one w klasie Karta. Każda karta ma być obiektem klasy. Tak więc na to nie zwracajcie uwagi, że jest błędnie zadeklarowane a inaczej potem w samym kodzie jest. Chodzi tylko o to by wiedzieć jakimi zmiennymi się posługuję. Zaprezentuję mój algorytm napisany już w kodzie, tam gdzie będzie pogrubione jest właśnie źle i nie wiem jak to zrobić :/ Dlatego prosiłbym o pomoc.
int ilosc_par=10; // dla łatwego poziomu, dla średniego = 12, dla trudnego = 15 int ile=2*ilosc_par; int karta[ile]; int nadaj; int nr_pary; bool odsloniete=false; bool odgadniete=false; int ile_odslonietych=0; (Kliknięcie przycisku "Start", Start Timera); nadaj=1; for(int pe=1; pe<=20; pe+2) { karta[pe].nr_pary=nadaj; karta[pe+1].nr_pary=nadaj; nadaj++; }; if (karta[].odsloniete==false) { (Wczytanie obrazka z koszulką karty); }; if (karta[].odsloniete==true) { (Wczytanie obrazka z poszczególnej kategorii, w opcjach będą trzy kategorie do wyboru - film, muzyka, zwierzęta); }; OnMouseClick { odslon(p.x, p.y); }; void odslon (p.x, p.y) { if (p.x>x1 && p.x<x2 && p.y>y1 && p.y<y2) { if (karta[].odsloniete==false) { karta[].odsloniete=true; ile_odslonietych++; }; }; }; [b]if (ile_odslonietych==2) { if (karta[].odgadniete==false) if((karta[x].odsloniete==true && karta[x].nr_pary) == (karta[y].odsloniete==true && karta[y].nr_pary)) { karta[x].odgadniete=true; karta[y].odgadniete=true; ilosc_par--; ile_odslonietych=0; } else { (Widoczny jest obrazek dwóch odsłoniętych kart przez 1 sekundę lub do kliknięcia myszą); karta[x].odsloniete=false; karta[y].odsloniete=false; ile_odslonietych=0; }; }; [/b] if (ilosc_par==0) { KillTimer(); czas=(wartość uzyskana z timera); }
(Rozpoczęcie algorytmu porównania czasów);
Właśnie w tym pogrubionym mam zapisane jako x i y, żeby się różniły, ale to jest źle. I nie wiem co tam ma być aby było dobrze :(
Myślałem aby zmienne x i y przy kliknięciu pobierały numer elementu tablicy, ale nie wiem jaką funkcję dla tego napisać. :/
Oczywiście algorytm można przerobić na tablicę dwuwymiarową.
Z góry dziękuję za pomoc. :)
Użytkownik kopytko edytował ten post 07 grudzień 2008, 20:16
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Aktualnie robię w Visual Studio 2005 grę MEMO. Używam do tego MFC (Dialog based). Dlatego MFC bo tego akurat u nas na studiach wymagają.
No i pisząc algorytm do porównywania kart napotkałem na problem, a polega on na tym, że nie wiem w jaki sposób program ma wiedzieć które karty porównać. Mam różne zmienne, które sprawdzają czy karta jest odsłonięta i tak dalej, ale samo porównanie kart już mam skopane.
Na czym gra polega to pewnie każdy wie, ale z grubsza powiem tylko że gracz kliknięciem myszy odsłania daną kartę, potem odsłania drugą i jeśli dwie odsłonięte karty nie mają jednakowego obrazka to z powrotem odsłaniane są koszulkami do góry, a jeśli obrazek jest taki sam to tak odwrócone karty pozostają. Gra ma być dla jednego gracza na czas, na różnych poziomach trudności, ale to na razie nie problem.
Algorytm mam prawie cały wykonany, jest on napisany z grubsza, w sensie tych zadeklarowanych zmiennych na początku, bo docelowo mają być one w klasie Karta. Każda karta ma być obiektem klasy. Tak więc na to nie zwracajcie uwagi, że jest błędnie zadeklarowane a inaczej potem w samym kodzie jest. Chodzi tylko o to by wiedzieć jakimi zmiennymi się posługuję. Zaprezentuję mój algorytm napisany już w kodzie, tam gdzie będzie pogrubione jest właśnie źle i nie wiem jak to zrobić :/ Dlatego prosiłbym o pomoc.
int ilosc_par=10; // dla łatwego poziomu, dla średniego = 12, dla trudnego = 15 int ile=2*ilosc_par; int karta[ile]; int nadaj; int nr_pary; bool odsloniete=false; bool odgadniete=false; int ile_odslonietych=0; (Kliknięcie przycisku "Start", Start Timera); nadaj=1; for(int pe=1; pe<=20; pe+2) { karta[pe].nr_pary=nadaj; karta[pe+1].nr_pary=nadaj; nadaj++; }; if (karta[].odsloniete==false) { (Wczytanie obrazka z koszulką karty); }; if (karta[].odsloniete==true) { (Wczytanie obrazka z poszczególnej kategorii, w opcjach będą trzy kategorie do wyboru - film, muzyka, zwierzęta); }; OnMouseClick { odslon(p.x, p.y); }; void odslon (p.x, p.y) { if (p.x>x1 && p.x<x2 && p.y>y1 && p.y<y2) { if (karta[].odsloniete==false) { karta[].odsloniete=true; ile_odslonietych++; }; }; }; [b]if (ile_odslonietych==2) { if (karta[].odgadniete==false) if((karta[x].odsloniete==true && karta[x].nr_pary) == (karta[y].odsloniete==true && karta[y].nr_pary)) { karta[x].odgadniete=true; karta[y].odgadniete=true; ilosc_par--; ile_odslonietych=0; } else { (Widoczny jest obrazek dwóch odsłoniętych kart przez 1 sekundę lub do kliknięcia myszą); karta[x].odsloniete=false; karta[y].odsloniete=false; ile_odslonietych=0; }; }; [/b] if (ilosc_par==0) { KillTimer(); czas=(wartość uzyskana z timera); }
(Rozpoczęcie algorytmu porównania czasów);
Właśnie w tym pogrubionym mam zapisane jako x i y, żeby się różniły, ale to jest źle. I nie wiem co tam ma być aby było dobrze :(
Myślałem aby zmienne x i y przy kliknięciu pobierały numer elementu tablicy, ale nie wiem jaką funkcję dla tego napisać. :/
Oczywiście algorytm można przerobić na tablicę dwuwymiarową.
Z góry dziękuję za pomoc. :)
Użytkownik kopytko edytował ten post 07 grudzień 2008, 20:16