Problem z nieskończoną pętlą w funkcji void
Ostatnio zmodyfikowano 2017-09-12 20:35
piotrusinio Temat założony przez niniejszego użytkownika |
Problem z nieskończoną pętlą w funkcji void » 2017-09-12 10:36:08 Witam Ostatnio zająłem się pisaniem prymitywnej gry typu clicker w C::B. W założeniu po wykupieniu Boost'a co sekundę nalicza się 1$. W praktyce jednak po skompilowaniu i uruchomieniu programu i wykupieniu Boost'a nie dzieje się nic, a dalsze użytkowanie clickera jest niemożliwe. Gdzie jest błąd i jak mogę go naprawić? Chciałbym aby funkcja void( int kliki ) działała w tle i dodawała jeden punkt co sekundę bez potrzeby tworzenia wątków. Czy jest to możliwe? #include <iostream> #include <windows.h> #include <conio.h>
using namespace std;
void dodaj( int kliki ) { while( true ) kliki++; Sleep( 1000 ); cout << kliki; }
char wybor; bool kliknie_myszka = false, kliknie_myszka1 = false, bonus = false; int kliki, mysz = 0, mysz1 = 0, choice; int main() { for(;; ) { cout << "Clicker v.0.6." << endl; cout << "Masz " << kliki << " dolarow."; { if( HIBYTE( GetKeyState( VK_MBUTTON ) ) ) mysz1 = 1; else mysz1 = 0; if( mysz1 == 1 ) kliknie_myszka1 = true; if( mysz1 == 0 ) { if( kliknie_myszka1 == true ) { system( "cls" ); cout << endl; cout << "MENU ZAKUPU BOOSTOW: " << endl; cout << "1. Boost x1." << endl; cout << "Wybierz nr. boost'a:"; cin >> choice; switch( choice ) { case 1: { if( kliki > 9 ) { kliki - 10; dodaj( kliki ); cout << "KUPIONO"; } else if( kliki < 10 ) { cout << "Za malo pieniedzy!"; } break; } default: { cout << "Nie ma takiej opcji!"; break; } } kliknie_myszka1 = false; getch(); } } } { if( HIBYTE( GetKeyState( VK_LBUTTON ) ) ) mysz = 1; else mysz = 0; if( mysz == 1 ) kliknie_myszka = true; if( mysz == 0 ) { if( kliknie_myszka == true ) { kliki++; kliknie_myszka = false; } } } system( "cls" ); } return 0; }
|
|
pekfos |
» 2017-09-12 11:04:36 Nawet gdyby ta funkcja miała jakiś sens, nie sprawisz że będzie działać w tle bez tworzenia wątków |
|
piotrusinio Temat założony przez niniejszego użytkownika |
» 2017-09-12 11:12:09 A czemu niby nie ma sensu? |
|
pekfos |
» 2017-09-12 11:40:11 Wcięcia nie mają znaczenia, więc twoja nieudana próba umieszczenia Sleep w pętli nawet nie przetrwała formatowania kodu. Kolejna sprawa, że ta funkcja nic nie robi. Wszystkie inkrementacje jakie ta funkcja wykonuje nie będą widoczne poza nią. |
|
latajacaryba |
» 2017-09-12 20:35:29 przekazujesz zmienną kliki przez kopie, co oznacza, że program bierze sobie zmienną którą przekazujesz, robi jej kopię (!), pracuje na kopii, a po zakończeniu funkcji kopia jest usuwana. Aby funkcja pracowała na oryginalnej zmiennej, przekazuj ją przez referencję void Funk( int & referencja ) albo wskaźnik (adres do zmiennej) void Funk2( int * Wskaznik ) void Funk1( int & zmienna ); void Funk2( int * zmienna );
int zmienna = 10;
Funk1( zmienna );
Funk2( & zmienna );
int * wskaznik = & zmienna;
Funk2( wskaznik );
|
|
« 1 » |