Degezor Temat założony przez niniejszego użytkownika |
Gra przestaje działać - prośba o sprawdzenie kodu » 2012-03-04 12:52:29 Witam! Piszę grę, jednak napotkałem pewien problem. Tu jest kod całej gry: http://wklej.seGra polega na tym, że mamy swoją postać i możemy kupować różne przedmioty, trenować, robić zadania i walczyć. Po uruchomieniu gry, przejściu do miasta(kliknięcie przycisku 'w'), oraz wejściu na arenę(kliknięciu przycisku '2'), znajdujemy się na arenie i mamy 3 przeciwników do wybrania. Kiedy nie chcemy walczyć i chcemy przejść z powrotem do postaci(kliknięcie przycisku 'q'), program przestaje działać. Tak samo się dzieje kiedy stoczymy walkę i będziemy chcieli z powrotem wrócić do postaci. Szukałem dosyć długo w kodzie i nie wiem co się dzieje. Program prawdopodobnie przestaje działać, kiedy wykonuje się 1069. linijka kodu - wtedy to funkcja Arena() zwraca wartość zmiennej wybor dla funkcji Miasto(). Czy mógłby ktoś sprawdzić mój kod? Tu dorzucam jeszcze plik .exe wraz z kodem źródłowym: https://rapidshare.com/files/3533651927/Projekt.rarPS. Gra nie jest dokończona i ma trochę błędów. Jednak jeżeli macie jakieś pomysły na rozwój gry, pisać śmiało! |
|
pekfos |
» 2012-03-04 12:53:06 Wstaw nazwę tematu..
//Zlokalizuj błąd debuggerem. |
|
Degezor Temat założony przez niniejszego użytkownika |
» 2012-03-04 12:54:49 A możesz mi polecić jakiś debugger? Myślałem o Visual C++, ale nie wiem czy jest dobry. |
|
m4tx |
» 2012-03-04 13:09:18 IDE w którym piszesz tę grę powinno posiadać debugger... |
|
Dragonit |
» 2012-03-04 13:12:03 Mi to tam od razu się gra zatnie jak włączę grę i nacisnę [E] lub [R] lub [T].
A powiedz mi co ty zwracasz za pomocą tej funkcji "char Miasto()" i "char Postac()" ?
|
|
Degezor Temat założony przez niniejszego użytkownika |
» 2012-03-04 13:17:15 @Dragonit Tak wygląda główna pętla gry: char wybor = 'q';
while( 1 ) { switch( wybor ) { case 'q': wybor = Postac(); break; case 'w': wybor = Miasto(); break; case 'e': wybor = Wyprawa(); break; case 'r': wybor = Poczta(); break; case 't': wybor = Menu(); break; case 0: return 0; default: wybor = getch(); } }
Jeżeli wejdę teraz w funkcję Miasto(), to jak z tej funkcji będę chciał przejść od razu do np. Postac() to funkcja Miasto zwraca teraz mój wybór, czyli np. 'q', A pętla przenosi mnie do funkcji Postac(). Tak samo działa funkcja Postac() i inne. Mam nadzieję, że wytłumaczyłem. A jak klikasz [e],[r] lub [t] to program się zacina bo te funkcje jeszcze nie są skończone. Narazie mi chodzi o rozwiązanie problemu z funkcją Arena(). |
|
Dragonit |
» 2012-03-04 14:13:38 Coś z tym jest schrzanione, zaraz zobaczę dogłębniej. Trop jest :) EDIT: Już wiem :) Destruktor klasy CPostac() ~CPostac() { if( bron != NULL ) delete bron; if( tarcza != NULL ) delete tarcza; if( glowa != NULL ) delete glowa; if( tulow != NULL ) delete tulow; if( nogi != NULL ) delete nogi; if( rece != NULL ) delete rece; if( naszyjnik != NULL ) delete naszyjnik; if( pierscien != NULL ) delete pierscien; }
|
|
Degezor Temat założony przez niniejszego użytkownika |
» 2012-03-04 14:42:19 @Dragonit Dzięki za zaangażowanie, ale dalej nie wiem co w tym kodzie jest złego :/ //Faktycznie, po zakomentowaniu tego destruktora program działa jak należy. Ale przecież powinno się zwalniać pamięć. Czy ktoś wie jak to rozwiązać? Może zwalnianie ma następować w innym miejscu? //Problem rozwiązany. Dzięki Ci Dragonit, bo nie spodziewałem się, że problemem jest destruktor. Zmieniłem trochę klasę postaci, a gra już się nie zawiesza :D class CPostac { public: string nazwa; int poziom; double zycie; double maxZycie; int doswiadczenie; int zloto; int sila; int szybkosc; int kondycja; int zrecznosc; int wytrzymalosc; int pancerz; int MinObrazenia; int MaxObrazenia; CPrzedmiot * bron; CPrzedmiot * tarcza; CPrzedmiot * glowa; CPrzedmiot * tulow; CPrzedmiot * nogi; CPrzedmiot * rece; CPrzedmiot * naszyjnik; CPrzedmiot * pierscien; CPostac() { nazwa = "Nienazwany"; poziom = 1; zycie = 80; maxZycie = 80; doswiadczenie = 0; zloto = 100; sila = 5; szybkosc = 5; kondycja = 5; zrecznosc = 5; wytrzymalosc = 5; bron = 0; tarcza = 0; glowa = 0; tulow = 0; nogi = 0; rece = 0; naszyjnik = 0; pierscien = 0; } ~CPostac() { delete bron; delete tarcza; delete glowa; delete tulow; delete nogi; delete rece; delete naszyjnik; delete pierscien; } };
|
|
« 1 » |