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

Ocena, mile widziane porady i nagady dotyczace mojej pierwszej "gry"

VPS Starter Arubacloud
+2 głosów
480 wizyt
pytanie zadane 24 czerwca 2017 w C i C++ przez XYZ1234 Użytkownik (620 p.)

Cześć, tak jak w temacie, jako, że są wakacje, studia etc. czas ruszyć 4 litery i w końcu zacząć robić coś pożytecznego. Niżej będzie kod tego "dzieła", a potem   kilka pytań. Proszę o dojrzałe odpowiedzi, bez bezmyślnego hejtu, jestem "poziom 0", ale próbuje coś robić. A więc pytania:

main.cpp

#include <iostream>
#include <cstdlib>
#include "klasy.h"
using namespace std;
string imie;

int main()
{
    cout << "Witaj w grze, Oto kreator postaci" << endl;
    cout << "Podaj imie swojej postaci: " << endl;
    cin >>imie;
    postac glowna;
    for(;;)
    {
        glowna.co_robic();
    }
    return 0;
}
#include <iostream>
#include <cstdlib>
using namespace std;

class postac
{
    public:
    /* Statystyki postaci */
    int Max_zdrowie=100;
    int Akt_zdrowie=98;
    int pancerz=100;
    int zloto=50;
    /* Metody */
    void informacje();
    void co_robic();
    void gdzie_isc();
   void karczma();
    //void konsola();
};



#include <iostream>
#include "klasy.h"
#include <cstdlib>
#include <time.h>
using namespace std;
void postac::co_robic()
{
    string wybor;
    cout<<"Co chcesz zrobic ?"<<endl;
    cin >>wybor;
    if(wybor=="zakoncz") exit(0);
    if(wybor=="idz") gdzie_isc();
    if(wybor=="informacje") informacje();

    }


void postac::gdzie_isc()
{
    string kierunek;
    cout<<"Gdzie chcesz isc ? PLN/POL/WSCH/ZACH"<<endl;
    cin >>kierunek;
    srand(time(NULL));
    int losowanie_sciezki=rand()%20+1;
    if(losowanie_sciezki>=11 && losowanie_sciezki<=20) cout<<"Idziesz dluga, az nagle pojawia sie wielki czarny las, w twoim sercu pojawia sie zwatpienie"<<endl;
    if(losowanie_sciezki<=10) karczma();
    }




void postac::karczma()
{
    string wybor;
    int menu;
    cout<<"Z daleka widzisz puchajace ogien pochodni, oraz odglosy awantur.Tak to karczma."<<endl;
 cout<<"Pytanie czy powinnienes a co wazniejsze czy potrzebujesz tam wejsc?"<<endl;
while(wybor!="tak"||wybor!="nie")
{
      cin>>wybor;

     if(wybor=="tak") {cout<<"Witaj w naszej karczmie przybyszu. Oto co moge Ci zaoferowac"<<endl<<endl;

cout<<"1.Ciepla strawe (koszt:5 zlota) \n2.Pokoj do przenocowania (koszt: 15 zlota) \n3.Mikstury lecznicze (koszt 10 zlota) \n4.Wyjdz"<<endl;cin>>menu; if(menu=1)if(Akt_zdrowie<Max_zdrowie&&Akt_zdrowie+10<=Max_zdrowie){Akt_zdrowie=Akt_zdrowie+10;}else if(Akt_zdrowie+10>Max_zdrowie){int wartosc_jedzenia; wartosc_jedzenia=Max_zdrowie-Akt_zdrowie; Akt_zdrowie=Akt_zdrowie+wartosc_jedzenia;}zloto=zloto-5;}
else
if(menu=4) co_robic();
    else
    if(wybor=="nie") co_robic();

else
   cout<<"nieznane polecenie"<<endl;
}
}

void postac::informacje()
{
    cout<<Akt_zdrowie<<endl;
    cout<<zloto<<endl;
}



A teraz kilka pytań:

1. Czy własnie tak powinien wyglądać main? bo większość "akcji" jest w plik.cpp

2.Czy moje nadużywanie void jest tutaj potrzebne? Jakoś nie mogę się przekonać do używania innych. Oglądałem już kilka razy odcinek o funkcjach/metodach, również czytałem z innych źródeł i nadal jakbym nie czuł różnicy. 

3.Funkcja walki powinna być w klasie czy w pliku main ? Chce napisać metode/funkcje walki bo przecież gra bez walki to słaba gra. Nie wiem gdzie ją napisać, jak napisać pewnie wczesniej czy pozniej wymysle.

4.Szansa % w c++ czy istnieje jakaś funkcja czy mój sposób jest znośny ? 

To chyba tyle z pytań, przypominam: Proszę bez bezsensownego hejtu, w szkole nauka programowania stoi w miejscu a w roku szkolnym cieżko zoorganizować czas. Wiem ze żadna to wymówka, ale mówi sie trudno

 

1
komentarz 24 czerwca 2017 przez Tomek Sochacki Ekspert (227,510 p.)
Nie programuje co prawda w C++ więc nie wypowiem się co do poprawności kodu, ale polecam Ci zacząć stosować angielskie nazwy zmiennych, funkcji itp. Po pierwsze łatwiej znajdziesz w razie czego pomoc na forach zagranicznych, a po drugie jest to ogólnie przyjęty standard i na pewno polskie nazwy nie będą w przyszłości dobrze wyglądać dla potencjalnych pracodawców.
1
komentarz 24 czerwca 2017 przez JAKUBW Nałogowiec (33,470 p.)

Przyjęło się pisać nazwy klas (nie obiektów) z wielkiej litery. W C++ nazwy zmiennych i funkcji w klasie pisze się z małej. Jeżeli chcesz pisać z wielkiej to naucz się C# ;) 

Poza tym:

cout<<"1.Ciepla strawe (koszt:5 zlota) \n2.Pokoj do przenocowania (koszt: 15 zlota) \n3.Mikstury lecznicze (koszt 10 zlota) \n4.Wyjdz"<<endl;cin>>menu; if(menu=1)if(Akt_zdrowie<Max_zdrowie&&Akt_zdrowie+10<=Max_zdrowie){Akt_zdrowie=Akt_zdrowie+10;}else if(Akt_zdrowie+10>Max_zdrowie){int wartosc_jedzenia; wartosc_jedzenia=Max_zdrowie-Akt_zdrowie; Akt_zdrowie=Akt_zdrowie+wartosc_jedzenia;}zloto=zloto-5;}

Nie wiem czy to źle forum zrobiło natomiast tyle operacji w jednej lini jest niedopuszczalne.

No i zamiast

for(;;)

powinno się używać

while(true)

 

komentarz 24 czerwca 2017 przez XYZ1234 Użytkownik (620 p.)
ze względów stylistycznych czy ma jakieś inne konkretne zastosowanie ?

Na dobra sprawe nie wiem czy ta pętla jest tam konieczna, nawet usuwając ją "gra" działa pewnie przez te rozbudowane metody, które jak juz pisałem w głównym temacie nie wiem czy powinny tak wygladać
3
komentarz 24 czerwca 2017 przez Tomek Sochacki Ekspert (227,510 p.)
Drugi wariant, czyli while(true) jest wg mnie dużo czytelniejszy i jasno wskazuje intencje autora.
komentarz 24 czerwca 2017 przez QizmoPL Stary wyjadacz (11,440 p.)

Tomasz Sochacki mam takie samo zdanie 

komentarz 24 czerwca 2017 przez XYZ1234 Użytkownik (620 p.)
No dobrze, a co jeszcze ? Interesuje mnie zdanie, a wlaściwie opnia o tych metodach i pliku main.cpp. Bo trzeba przyznać, że wyglada biednie i dla kogos kto dopiero sie uczy troche dziwnie to wygląda. A z drugiej strony te mody dziwnie wygladają. Wiekoszsc gry opiera sie na pliku klasy.cpp. Nie wiem czy tak to powinno wygladac

2 odpowiedzi

+3 głosów
odpowiedź 25 czerwca 2017 przez niezalogowany

Na twoją prośbę, mam nadzieję w miarę rozbudowany zestaw uwag:

ogólnie

  • [zła praktyka] kod powinien być pisany w języku angielskim (i także w nim komentowany), jednakże na etapie nauki kod w rodzimym języku są akceptowalne
  • ogólnie przyjęta konwencja mówi, że nazwy klas zaczynają się z dużej litery, a więc: Postac glowna
  • niestosowanie się do jednej konwencji (brak identycznych wcięć, sposobu nazywania pól w klasie, mieszanie nazewnictwa ang-pol), np. Max_zdrowie, pancerz; bardziej poprawnie: max_hp, armor

main.cpp

  • [zła praktyka] globalny using namespace dla większych projektów może powodować konflikty, lepszym rozwiązaniem byłoby zastosowanie go lokalnie, np wewnątrz main() lub zaniechanie jego użycia (a więc piszesz: std::cout itp)
  • [brak uzasadnienia] dla zmiennej globalnej string imie
  • mało elegancki kod, raczej powinno unikać się nieskończonych pętli, np poprzez konstrukcję pokazaną w Listingu 1
// Listing 1
bool exit = false;
while(!exit) {
  glowna.co_robic();
  if( /* exit game condition */) {
    exit = true;
  }
}

plik.h

  • brak strażnika w postaci #pragma once lub defineów

plik.cpp

  • duplikowane #include
  • jedyny include jaki powinny tutaj być to #include "plik.h" reszta powinna zawierać się w pliku nagłówkowm tej klasy (plik.h)
  • menu powinno się znaleźć w funkcji main(), kończenie programu funkcją exit() jest raczej złe
  • srand(time(NULL)); powinno być wywołane tylko raz, np w funkcji main()
  • dużo brzydkich wcięć
  • linia if(wybor=="tak") {cout<<"Witaj w naszej karczmie przybyszu. Oto co moge Ci zaoferowac"<<endl<<endl; powinna być rozbita na kilka pojedynczych (Listing 2), raczej staraj trzymać zasady "1 linia = 1 instrukcja)
  • if(menu=4) to oczywisty błąd, bo tutaj nie porównujesz menu z wartością 4, tylko ją przypisujesz
// Listing 2
if(wybor == "tak") {
  cout<<"Witaj w naszej karczmie przybyszu. Oto co moge Ci zaoferowac\n\n";
}

 

komentarz 25 czerwca 2017 przez XYZ1234 Użytkownik (620 p.)

Nie mogę się powstrzymać, muszę zapytać

  • duplikowane #include
  • jedyny include jaki powinny tutaj być to #include "plik.h" reszta powinna zawierać się w pliku nagłówkowm tej klasy (plik.h)

Oglądam własnie kurs programowania autorstwa Pana Zelenta i on w każdym pliku wpisuje właściwie kopiuje wszystkie (zazwyczaj tylko iostream).

  

  • if(menu=4) to oczywisty błąd, bo tutaj nie porównujesz menu z wartością 4, tylko ją przypisujesz

Tak tylko dla pewności powinno byc

if(menu==4) 

 ??

komentarz 25 czerwca 2017 przez niezalogowany

MZ nie jest dobrą osobą do naśladowania, szczególnie jeżeli chodzi o dobre praktyki programowania (zobacz: https://github.com/CodersCommunity/CodeReview-CPP-Podstawy )

Tak tylko dla pewności powinno byc

Tak

+1 głos
odpowiedź 24 czerwca 2017 przez QizmoPL Stary wyjadacz (11,440 p.)
Błędy:

-poslkie nazwy

-zmienna globalna

-przestrzen nazw

-brak camelCase

Ogolne zasady

-funkcja powinna byc prosta, krotka  i najelpiej jak nic nie zwraca

-jest specialna bobilioteka random

Brakuje jednego pliku
komentarz 24 czerwca 2017 przez XYZ1234 Użytkownik (620 p.)
mógłbyś to rozwinąć? Niektóre z tych rzeczy pierwszy raz widze
komentarz 24 czerwca 2017 przez QizmoPL Stary wyjadacz (11,440 p.)
musisz mi powiedziec co dokladnie
komentarz 24 czerwca 2017 przez manjaro Nałogowiec (37,390 p.)
Chłopie nie przejmuj się na tym forum nic więcej się nie dowiesz. Oni w kółko powtarzają tylko te same bzdety typu zmienne piszemy z takiej litery a nie takiej i w dodatku tylko i wyłącznie w jedynym słusznym języku bo jak napiszesz po mandaryńsku to się nie skompiluje.  A tak naprawdę to nie mają pojęcia o zaawansowanym programowaniu więc czepiają się tylko pierdół. Aż się dziwię że jeszcze nikt Ci nie polecił przeczytania książki "Czysty kod".
komentarz 25 czerwca 2017 przez QizmoPL Stary wyjadacz (11,440 p.)

manjaro stary jak sie nieznasz to sie nie odzywaj, sa to zasady ktore w pozniejszym czasie pozwola znalezc mu prace...

komentarz 25 czerwca 2017 przez manjaro Nałogowiec (37,390 p.)
Czy on napisał że szuka pracy?
1
komentarz 25 czerwca 2017 przez QizmoPL Stary wyjadacz (11,440 p.)
niewiem jak bardzo jestes ograniczony, ale kazdy musi pracowac, raczej dobrze jest miec dobre nawyki, niz poprawiac zle
komentarz 25 czerwca 2017 przez manjaro Nałogowiec (37,390 p.)
Może ty jesteś ograniczony bo myślisz że każdy chce być koderem i pracować w jakiejś międzynarodowej korporacji. Wyobraź sobie że ludzie mają inne źródła dochodu i programują dla przyjemności. Albo pracują jako freelancerzy?  I czy zmiennej dadzą nazwę DupaJasiu dupaJasiu, dupajasiu czy też johnAss jest naprawdę dla nich mało ważne?

ISTOTNE jest to jakie kto pisze algorytmy. Ale za mało tu ludzi inteligentnych aby to oceniać, dlatego skupiacie się na stylu.
1
komentarz 25 czerwca 2017 przez QizmoPL Stary wyjadacz (11,440 p.)
niezgadzam sie z toba, bedzie moment kiedy bedzie trzeba projekt rozwianac, a wtedy bedzie lipa, bo nie bedize sie dlao wrocic do kodu, nazwy nic niemowia, wszystko sie zlewa, jak nie chcesz zostac zawodowym kierowca to nie musisz znacz oglnych zasad jazdy? Powiedz to zawodowym programista, ze styl nie jest istotny, wysmieja cie.
komentarz 25 czerwca 2017 przez XYZ1234 Użytkownik (620 p.)
Takie pytanie co jest złego w tym, że używam przestrzeni nazw ? Albo nie używam camelcase ?
komentarz 25 czerwca 2017 przez jpacanowski VIP (101,940 p.)

Błędy:

-poslkie nazwy

Co najmniej, nie jest to błąd...

komentarz 25 czerwca 2017 przez unknown Nałogowiec (39,560 p.)

najelpiej jak nic nie zwraca

Że co? Pierwszy raz słyszę. Ogólnie chyba żadnego błędu tu nie wymieniłeś, tylko pewne zasady, których powinno się przestrzegać. 

Oni w kółko powtarzają tylko te same bzdety

Skoro ludzie w kółko powtarzają te same błędy, to my cały czas powtarzamy te same "bzdety"

 bo jak napiszesz po mandaryńsku to się nie skompiluje.

Tu masz rację, jak napiszesz po mandaryńsku to się nie skompiluje.  

A tak naprawdę to nie mają pojęcia o zaawansowanym programowaniu więc czepiają się tylko pierdół.

 

Ale za mało tu ludzi inteligentnych aby to oceniać

Miło, że ty jesteś na tyle mądry i znasz się na zaawansowanym programowaniu, żeby to oceniać.  

Takie pytanie co jest złego w tym, że używam przestrzeni nazw ?

Dopóki piszesz kod po polsku i nie używasz zewnętrznych bibliotek to nie powinieneś mieć z tego powodu problemów.  

komentarz 25 czerwca 2017 przez niezalogowany

Błędy:

-poslkie nazwy

-zmienna globalna

-przestrzen nazw

-brak camelCase

Pewnie dostałeś już z tej racji hejty, ale:

  1. polskie nazewnictwo to nie błąd (szczególnie nie na początku nauki programowania), mieszanie języków też nie chociaż nie wygląda to estetycznie
  2. przestrzeń nazw właśnie po to powstała aby jej używać, GLOBALNY using namespace to niedobra praktyka, ale tylko tyle. Błędem by był wtedy gdyby przestrzenie nazw rodziłyby by konflikty
  3. camelCase to tylko styl kodowania, C++ NIE POSIADA ustandaryzowanego stylu pisania kodu, przykład: zobacz na styl kodu w jakim pisane są standardowe liby (snake_case https://gcc.gnu.org/wiki/CppConventions), a teraz weź 10 losowych dużych libów C++, znajdziesz tam wszystko (świetnym przykładem jest Google Style Guide: https://google.github.io/styleguide/cppguide.html)

Rada na przyszłość: nie krytykuj jeżeli sam jesteś nowicjuszem ;)

komentarz 25 czerwca 2017 przez QizmoPL Stary wyjadacz (11,440 p.)
ta krytyka ma jakis sens, nie smieje sie z autora bo malo potrafi, szczerze to kazdy malo potrfi odnoszac si edo kogos, globalna przestrzen nazw jest zla samam w sobie, nie taki blad jak, jak zla pratkyka, co do camelCase to najbardziej popularny sposob zapisu wiec dobrze go używać
1
komentarz 25 czerwca 2017 przez niezalogowany
Dalej nie rozumiem czemu te rzeczy zaliczyłeś jako błąd...

camelCase jest popularny tylko w pewnych środowiskach, nie nazwałbym go najpopularniejszym
komentarz 25 czerwca 2017 przez QizmoPL Stary wyjadacz (11,440 p.)
wnisokuje po tym, ze przegladajac rozne projekty jest najczesciej uzywany

Podobne pytania

+4 głosów
7 odpowiedzi 654 wizyt
pytanie zadane 2 stycznia 2016 w Nasze projekty przez emis2000 Obywatel (1,360 p.)
0 głosów
3 odpowiedzi 264 wizyt
pytanie zadane 24 lutego 2016 w Nasze projekty przez xydden Gaduła (4,480 p.)
+1 głos
2 odpowiedzi 259 wizyt
pytanie zadane 31 grudnia 2016 w C i C++ przez Patryk Krajewski Nałogowiec (26,170 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...