Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z nieskończoną pętlą w funkcji void

Ostatnio zmodyfikowano 2017-09-12 20:35
Autor Wiadomość
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?
C/C++
#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(;; )
    { //Menu główne clickera
        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 )
                { //Menu główne sklepu boostów
                    system( "cls" );
                    cout << endl;
                    cout << "MENU ZAKUPU BOOSTOW: " << endl;
                    cout << "1. Boost x1." << endl;
                    cout << "Wybierz nr. boost'a:";
                    cin >> choice;
                   
                    // Wybór boosta
                    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();
                   
                }
            }
        }
        { // Naliczanie punktów
            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;
}
P-164829
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
P-164830
piotrusinio
Temat założony przez niniejszego użytkownika
» 2017-09-12 11:12:09
A czemu niby nie ma sensu?
P-164831
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ą.
P-164832
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 )

C/C++
void Funk1( int & zmienna ); // referencja
void Funk2( int * zmienna ); // wskaznik

int zmienna = 10;

Funk1( zmienna );

Funk2( & zmienna ); // & to pobranie adresu zmiennej

//lub

int * wskaznik = & zmienna;

Funk2( wskaznik );
P-164837
« 1 »
  Strona 1 z 1