Coś nie działa w kodzie.

Odpowiedz Nowy wątek
2019-08-04 19:34

Rejestracja: 1 rok temu

Ostatnio: 10 miesięcy temu

0

Witam, piszę aktualnie małą grę, która polega na tym że domki zbierają zasoby i za te zasoby możemy ulepszyć te domki tak aby wytwarzały zasoby szybciej.
Programuje dopiero od mniej więcej 2 tygodni, więc nie potrafię zbyt wiele, nie wiem co nie działa w kodzie i nie potrafie tego znależć.
Wszystko działa, oprócz złota, które się nie nalicza, tylko stoi w miesjcu.
Oto kod:

#include <iostream>
#include <windows.h>
#include <cstdlib>

using namespace std;

int x, p, y=0, kl, k=9999, z, dl, m, b, l=2000;

int main()
{

{
    system("cls");
    cout << "Witaj w grze Twierdza!" << endl;
    cout << "Wybierz:"<<endl;
    cout <<"1 - graj"<<endl;
    cout <<"2 - wyjdz"<<endl;
    cin>>p;
    switch(p)

    case 1:
        {
            goto gra;
            break;
        }

    gra:

        {
            system("cls");
            for(int i=0;i<=k;i++)
            {

Sleep(l);
system("cls");
            cout <<"Zloto: "<<i<<endl;
                        cout <<" "<<endl; cout <<" "<<endl; cout <<" "<<endl; cout <<" "<<endl;
cout <<"kopalnia zlota "<<"["<<kl<<"]"<<endl;
cout <<"Chata drwala "<<"["<<dl<<"]"<<endl;
cout<<""<<endl;

if(i>=5)
{
cout <<"1 - ulepszenie kopalni zlota (5 zlota)"<<endl;
}
if(i>=10)
{

cout <<"2 - ulepszenie Chaty drwala (10 zlota) "<<endl;
}
cout<<"Wybierz:"<<endl;
cin>>b;
if(b==1)
{

    kl=kl+1;
    i=i-5;
   l=l-200;
}
else if(b==2)  //////Ta funkcja jak narazie nic nie robi oprócz zmiany poziomu chaty drwala i zmiany ilosci złota.
{
    dl=dl+1;
    i=i-10;
}
        }

        }

        }

    return 0;
}
edytowany 1x, ostatnio: furious programming, 2019-08-04 22:51
wysil się bardziej przy wymyślaniu tytułu wątku. Obecny nic nie mówi. Prawie każdy wątek pasuje do takiego tytułu. - MarekR22 2019-08-04 20:43

Pozostało 580 znaków

2019-08-04 19:51

Rejestracja: 3 lata temu

Ostatnio: 1 godzina temu

6

Goto widze w tym tęczu 🤪

Pozostało 580 znaków

2019-08-04 20:19

Rejestracja: 1 rok temu

Ostatnio: 10 miesięcy temu

0

Wziąłem goto z programów które kiedyś pisałem, zapis plików kończył się .bat, w c++ goto nie przejdzie?

Zła praktyka pozostanie złą niezależnie od przyczyny. Goto przydaje się naprawdę bardzo rzadko. Ja tylko raz w karierze miałem powód do użycia. - PerlMonk 2019-08-04 20:32
Czym moge zastąpić goto? Mogę to jakoś zastopić czy lepiej pisać kod po kolei? - Trykpa 2019-08-04 21:28
Wywolaniem metody. Trudno powiedziec bo nie wiadomo co tam jest napisane. - stivens 2019-08-04 21:34

Pozostało 580 znaków

2019-08-04 20:21

Rejestracja: 3 lata temu

Ostatnio: 1 godzina temu

1

Zadziala ale jest karygodny

PS: no sformatujzesz to!

edytowany 1x, ostatnio: stivens, 2019-08-04 20:21

Pozostało 580 znaków

2019-08-04 21:27

Rejestracja: 1 rok temu

Ostatnio: 10 miesięcy temu

0

To masz jakiś pomysł co zmienić w kodzie żeby się złoto naliczało?

Skasować, napisać od nowa - AnyKtokolwiek 2019-08-04 21:40

Pozostało 580 znaków

2019-08-05 11:07

Rejestracja: 11 lat temu

Ostatnio: 3 dni temu

1

@stivens sformatowany kod. @Trykpa jak nazywasz zmienne pojedynczymi literkami i do tego bez pecjalnego sensu to się nie dziw, że nikomu nie chce się na to patrzeć. Masz tu niby jakiś domki i złoto ale po pięciu sekundach czytania nie wiem gdzie Ty je tu schowałeś. Nie zamierzam się męczyć dłużej.

#include <iostream>
#include <windows.h>
#include <cstdlib>

using namespace std;

int x, p, y = 0, kl, k = 9999, z, dl, m, b, l = 2000;

int main() {
  {
    system("cls");
    cout << "Witaj w grze Twierdza!" << endl;
    cout << "Wybierz:" << endl;
    cout << "1 - graj" << endl;
    cout << "2 - wyjdz" << endl;
    cin >> p;
    switch (p)

    case 1: {
      goto gra;
      break;
    }

  gra :

  {
    system("cls");
    for (int i = 0; i <= k; i++) {
      Sleep(l);
      system("cls");
      cout << "Zloto: " << i << endl;
      cout << " " << endl;
      cout << " " << endl;
      cout << " " << endl;
      cout << " " << endl;
      cout << "kopalnia zlota "
           << "[" << kl << "]" << endl;
      cout << "Chata drwala "
           << "[" << dl << "]" << endl;
      cout << "" << endl;

      if (i >= 5) {
        cout << "1 - ulepszenie kopalni zlota (5 zlota)" << endl;
      }
      if (i >= 10) {
        cout << "2 - ulepszenie Chaty drwala (10 zlota) " << endl;
      }
      cout << "Wybierz:" << endl;
      cin >> b;
      if (b == 1) {
        kl = kl + 1;
        i = i - 5;
        l = l - 200;
      } else if (b == 2)  //////Ta funkcja jak narazie nic nie robi oprócz
      /// zmiany poziomu chaty drwala i zmiany ilosci złota.
      {
        dl = dl + 1;
        i = i - 10;
      }
    }
  }
  }

  return 0;

edytowany 2x, ostatnio: several, 2019-08-05 11:12
Przedtem po prostu w ogole nie bylo formatowania tylko plain text. A teraz to po prostu bym go odeslal do jakiegos tutoriala/ksiazki ale nie wiem jakiego - stivens 2019-08-05 11:16

Pozostało 580 znaków

2019-08-05 12:31

Rejestracja: 5 lat temu

Ostatnio: 1 godzina temu

0

O ile <ironic>prościej</ironic> byłoby zacząć od takiego kodu :)

#include <iostream>
#include <windows.h>
#include <thread>
#include <atomic>

using namespace std;

class StrongHold
{

public:

    void start()
    {
        if( !initGame() ) return;
        thread background( &StrongHold::run , this  );

        string input;
        while( getline( cin , input ) )
        {
            if( input == "1" )
            {
                if( gold>5 ){ ++mineLevel ; gold -= 5; };
            }

            if( input == "2" )
            {
                if( gold>10 ){ ++lumberjackLevel ; gold -= 10; };
            }

            if( input == "3" )
            {
                isRun.store(false);
                background.join();
                break;
            }
        }
    }

private:

    void run()
    {
        while( isRun )
        {
            printGameInfo();
            Sleep(1000);
            ++day;
            gold += mineLevel;
        }
    }

    bool initGame()
    {
        printStartMenu();

        string input;
        while( getline( cin , input ) )
        {
            if( input == "1" ) return true;
            if( input == "2" ) return false;
            printStartMenu();
        }
    }

    void printStartMenu()
    {
        system("cls");
        cout << "Welcome in StrongHold game!" << endl;
        cout << "1 - play" << endl;
        cout << "2 - exit" << endl;
    }

    void printGameInfo()
    {
        system("cls");
        cout << "Day : " << day << endl;
        cout << "Gold : " << gold << endl;
        cout << "Mine Level : " << mineLevel << endl;
        cout << "Lumberjack Level : " << lumberjackLevel << endl;
        cout << "1 - add new mine level [5 gold]" << endl;
        cout << "2 - add new lumberjack level [10 gold]" << endl;
        cout << "3 - exit game" << endl;
    }

    int day  {1};
    atomic<int> gold {0};
    atomic<int> mineLevel {1};
    atomic<int> lumberjackLevel {1};
    atomic<bool> isRun {true};

};

int main()
{
    StrongHold game;
    game.start();

    return 0;
}

Pozostało 580 znaków

2019-08-05 22:57

Rejestracja: 1 rok temu

Ostatnio: 10 miesięcy temu

0

Ok, już nie ważne, znalazłem problem, cin blokował proces for.

Pozostało 580 znaków

2019-08-18 15:30

Rejestracja: 2 lata temu

Ostatnio: 1 minuta temu

2
Trykpa napisał(a):

... cin blokował proces for.

Używanie strasznie naukowego słownictwa w sposób totalnie błędny nie przybliża do samo-zrozumienia / rozwiązania

edytowany 1x, ostatnio: AnyKtokolwiek, 2019-08-18 15:31
Kazdy wie o co chodzi i naprawiłem, z reszta to jest stary kod i nie używałem nawet pętli. - Trykpa 2019-08-18 18:43
Najwidoczniej nie każdy. for jest pętlą. - Delor 2019-08-21 13:41

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0