• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Co można jeszcze poprawić w tym kodzie, aby był bardziej czytelny i optymalny ???

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
233 wizyt
pytanie zadane 9 czerwca 2019 w C i C++ przez SCpl Użytkownik (590 p.)
zamknięte 2 lipca 2020 przez SCpl

Jestem początkującym programistą i niedawno zaprogramowałem moją pierwszą grę w c++. Chcę spytać się
o poradę kogoś bardziej doświadczonego co można poprawić i zoptymalizować w moim kodzie oczywiście używając tylko instrukcji, które już użyłem. Z góry bardzo dziękuję. smiley

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int liczba1,liczba2,liczba3,liczba4,tryb=0,prob=10,punkty1=1,punkty2=1,runda=1,a=1,b=100,y=1,x=100;
int main()
{
    srand(time(NULL));
    while (true)
    {
        while (tryb==0)
        {
            while (tryb==0)
            {
                cout << "Wybierz tryb gry!!!" << endl;
                cout << "1. Gra solo." << endl;
                cout << "2. Gra z komputerem." << endl;
                cout << "Tryb gry: ";
                cin >> tryb;
                system("cls");
            }
            if (tryb!=1&&tryb!=2)
            {
                cout << "Musisz wybrac opcje dostepna w menu." << endl;
                tryb=0;
            }
        }
        while (tryb==1)
        {
            cout << "Sprobuj zgadnac liczbe od 1 do 100 ktora wylosowal komputer, masz 10 prob." << endl;
            liczba1=rand()%100+1;
            while (prob>0)
            {
                cout << "Wpisz liczbe: ";
                cin >> liczba2;
                if (liczba1==liczba2)
                {
                    cout << "Zgadles/as liczbe." << endl;
                    prob=10;
                    tryb=0;
                    system("cls");
                    break;
                }
                else if (prob==1)
                {
                    cout << "Przegrales/as." << endl;
                    prob=10;
                    tryb=0;
                    system("cls");
                    break;
                }
                else if (liczba1>liczba2)
                {
                    cout << "Niestety jest to za mala liczba." << endl;
                    prob--;
                }
                else if (liczba1<liczba2)
                {
                    cout << "Niestety jest to za duza liczba." << endl;
                    prob--;
                }
            }
        }
        while (tryb==2)
        {
            a=1,b=100,y=1,x=100;
            liczba1=rand()%100+1;
            liczba4=rand()%2+1;
            if (runda==1)
            {
                cout << "Grasz z komputerem do trzech punktow!!!" << endl << "Powodzenia!!!" << endl;
            }
            cout << "Runda " << runda << endl;
            cout << "Sprobuj zgadnac liczbe od 1 do 100, ktora zostala wylosowana przed komputerem." << endl;
            if (liczba4==1)
            {
                cout << "Zaczynasz runde!!!" << endl;
            }
            else if (liczba4==2)
            {
                cout << "Komputer zaczyna runde!!!" << endl;
            }
            while (liczba4==1)
            {
                cout << "Wpisz liczbe: ";
                cin >> liczba2;
                if (liczba1==liczba2)
                {
                    cout << "Wygrales/as ta runde!!!" << endl << "Zdobywasz jeden punkt!!!" << endl << endl;
                    punkty1++;
                    break;
                }
                else if (liczba1>liczba2&&liczba2>a-1)
                {
                    cout << "Niestety jest to za mala liczba." << endl;
                    a=liczba2+1;
                    x=b-a+1;
                    y=a;
                }
                else if (liczba1>liczba2)
                {
                    cout << "Niestety jest to za mala liczba." << endl;
                }
                else if (liczba1<liczba2&&liczba2<b+1)
                {
                    cout << "Niestety jest to za duza liczba." << endl;
                    b=liczba2-1;
                    x=b-a+1;
                }
                else if (liczba1<liczba2)
                {
                    cout << "Niestety jest to za duza liczba." << endl;
                }
                else
                {
                    cout << "ERROR_404!!!" << endl;
                    break;
                }
                liczba3=rand()%x+y;
                if (liczba1==liczba3)
                {
                    cout << "Komputer zgaduje, ze ta liczba jest " << liczba3 << ". Jest to poprawna odpowiedz." << endl;
                    cout << "Przegrales/as ta runde!!!" << endl << "Komputer zdobywa jeden punkt" << endl << endl;
                    punkty2++;
                    break;
                }
                else if (liczba1>liczba3)
                {
                    cout << "Komputer zgaduje, ze ta liczba jest " << liczba3 << ". Jednak jest to za mala liczba." << endl;
                    a=liczba3+1;
                    x=b-a+1;
                    y=a;
                }
                else if (liczba1<liczba3)
                {
                    cout << "Komputer zgaduje, ze ta liczba jest " << liczba3 << ". Jednak jest to za duza liczba." << endl;
                    b=liczba3-1;
                    x=b-a+1;
                }
            }
            while (liczba4==2)
            {
                liczba3=rand()%x+y;
                if (liczba1==liczba3)
                {
                    cout << "Komputer zgaduje, ze ta liczba jest " << liczba3 << ". Jest to poprawna odpowiedz." << endl;
                    cout << "Przegrales/as ta runde!!!" << endl << "Komputer zdobywa jeden punkt" << endl << endl;
                    punkty2++;
                    break;
                }
                else if (liczba1>liczba3)
                {
                    cout << "Komputer zgaduje, ze ta liczba jest " << liczba3 << ". Jednak jest to za mala liczba." << endl;
                    a=liczba3+1;
                    x=b-a+1;
                    y=a;
                }
                else if (liczba1<liczba3)
                {
                    cout << "Komputer zgaduje, ze ta liczba jest " << liczba3 << ". Jednak jest to za duza liczba." << endl;
                    b=liczba3-1;
                    x=b-a+1;
                }
                cout << "Wpisz liczbe: ";
                cin >> liczba2;
                if (liczba1==liczba2)
                {
                    cout << "Wygrales/as ta runde!!!" << endl << "Zdobywasz jeden punkt!!!" << endl << endl;
                    punkty1++;
                    break;
                }
                else if (liczba1>liczba2&&liczba2>a-1)
                {
                    cout << "Niestety jest to za mala liczba." << endl;
                    a=liczba2+1;
                    x=b-a+1;
                    y=a;
                }
                else if (liczba1>liczba2)
                {
                    cout << "Niestety jest to za mala liczba." << endl;
                }
                else if (liczba1<liczba2&&liczba2<b+1)
                {
                    cout << "Niestety jest to za duza liczba." << endl;
                    b=liczba2-1;
                    x=b-a+1;
                }
                else if (liczba1<liczba2)
                {
                    cout << "Niestety jest to za duza liczba." << endl;
                }
                else
                {
                    cout << "ERROR_404!!!" << endl;
                    break;
                }
            }
            runda++;
            if (punkty1==3)
            {
                cout << "Wygrales/as cala gre!!!" << endl << endl;
                runda=1;
                punkty1=0;
                punkty2=0;
                tryb=0;
                system("cls");
            }
            else if (punkty2==3)
            {
                cout << "Przegrales/as cala gre!!!" << endl << endl;
                runda=1;
                punkty1=0;
                punkty2=0;
                tryb=0;
                system("cls");
            }
        }
    }
    return 0;
}

 

komentarz zamknięcia: Już wszystko wiem. :D

3 odpowiedzi

+1 głos
odpowiedź 9 czerwca 2019 przez Ehlert Ekspert (214,470 p.)
wybrane 9 czerwca 2019 przez SCpl
 
Najlepsza
Zmienić nazwy zmiennych, dodać przejścia do nowej linii. Podzielić kod na funkcje. Możesz zainteresować się też maszyną stanów, bo mogłaby być przydatna tutaj.
+1 głos
odpowiedź 9 czerwca 2019 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)

Nazwy zmeinnych: a, b, liczba4... to nic nie mówi. Pozimieniaj je na bardziej zrozumiałe.

Podziel program na funkcje zamiast rzucac wszystko w jedna funkcje. Twój początek kodu może działa poprawnie ale nie wygląda pięknie. 

while (true)
    {
        while (tryb==0)
        {
            while (tryb==0)
            { 
                 //...
}}}

 

+1 głos
odpowiedź 9 czerwca 2019 przez p099 Mądrala (6,390 p.)

1. Proponowałbym zamienić system("cls"); na funkcje clear(); która znajduje się w bibliotece windows.h
funkcja system() wykonuje komendę z cmd gdzie tam też jest interpretowana, jest to wolne i mało wydajne rozwiązanie.
2. Korzystasz z zbyt wielu instrukcji warunkowych, widzę fragmenty w kodzie gdzie możesz to zastąpić switch/casem.

komentarz 9 czerwca 2019 przez DarthMazut Bywalec (2,990 p.)
Cześć, mogę prosić linka do dokumentacji funkcji clear() z windows.h?  Pierwsze słyszę i nie mogę nigdzie tego znaleźć? Zazwyczaj trzeba taką funkcję zaimplementować samemu.
1
komentarz 9 czerwca 2019 przez p099 Mądrala (6,390 p.)
#include <windows.h>

void ClearScreen()
  {
  HANDLE                     hStdOut;
  CONSOLE_SCREEN_BUFFER_INFO csbi;
  DWORD                      count;
  DWORD                      cellCount;
  COORD                      homeCoords = { 0, 0 };

  hStdOut = GetStdHandle( STD_OUTPUT_HANDLE );
  if (hStdOut == INVALID_HANDLE_VALUE) return;

  /* Get the number of cells in the current buffer */
  if (!GetConsoleScreenBufferInfo( hStdOut, &csbi )) return;
  cellCount = csbi.dwSize.X *csbi.dwSize.Y;

  /* Fill the entire buffer with spaces */
  if (!FillConsoleOutputCharacter(
    hStdOut,
    (TCHAR) ' ',
    cellCount,
    homeCoords,
    &count
    )) return;

  /* Fill the entire buffer with the current colors and attributes */
  if (!FillConsoleOutputAttribute(
    hStdOut,
    csbi.wAttributes,
    cellCount,
    homeCoords,
    &count
    )) return;

  /* Move the cursor home */
  SetConsoleCursorPosition( hStdOut, homeCoords );
  }

jest też inne rozwiązanie gdzie możesz użyć:

  #include <stdio.h>

  void ClearScreen()
    {
    int n;
    for (n = 0; n < 10; n++)
      printf( "\n\n\n\n\n\n\n\n\n\n" );
    }

 

Podobne pytania

0 głosów
1 odpowiedź 169 wizyt
0 głosów
1 odpowiedź 131 wizyt
+1 głos
1 odpowiedź 440 wizyt
pytanie zadane 10 sierpnia 2019 w Java przez Szpryca Użytkownik (580 p.)

93,159 zapytań

142,171 odpowiedzi

321,892 komentarzy

62,489 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 453p. - Marcin Putra
  2. 453p. - dia-Chann
  3. 447p. - Łukasz Piwowar
  4. 443p. - CC PL
  5. 431p. - Łukasz Eckert
  6. 428p. - rafalszastok
  7. 423p. - Adrian Wieprzkowicz
  8. 423p. - Michal Drewniak
  9. 418p. - rucin93
  10. 410p. - Piotr Aleksandrowicz
  11. 408p. - ksalekk
  12. 402p. - Mariusz Fornal
  13. 401p. - Dawid128
  14. 383p. - Hubert Chęciński
  15. 340p. - ssynowiec
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...