Prosta gra, OCZKO

0

Witam, napisałem prostą grę pt. "Oczko".
Chciałem pokazać swój kod i zapytać czy jest on w miarę do przyjęcia. Gra działa, jednak chciałbym pisać dobrej jakości kod. Co radzicie unikać a czego używać pisząc podobne "gry" do oczka?

#include <iostream>
#include<cstdlib>
#include<ctime>
/*
GRA OCZKO - komputer i gracz losuje karty(liczby), kto jest najbliżej 21 lub bedzie mial rowne 21 - wygrywa.
o losowaniu kolejnej karty decydujemy sami z przedzialu 2-11, za komputer nie decydujemy za to on losuje raz z przedzialu 10-20.
*/
using namespace std;

//zmienne, karty gracza zapisane w tablicy, wiecej niz 10 raczej na pewno nie bedzie. Wiem że powinno być to inaczej rozwiązane żeby nie marnować miejsca pustymi tablicmi ale narazie tak to wymyslilem.
int gracz[10],komp,wybor;
int suma=0,oczko=21,i=0; 

int main() {
	cout<<"\t\t OCZKO \n\n";
	srand(time(NULL));
	//losowanie kart.
	gracz[i] = rand()%10+2;
	komp = rand()%11+10;
	
	// zapisanie karty do sumy, zeby pozniej moc je dodawac.
	suma = gracz[i];
	cout<<" Wylosowales : "<<gracz[i]<<endl;
	
	// petla do..while bo przynajmniej raz musi sie wykonac to polecenie z zapytaniem o doborze kart.
	do
	{	
		cout<<"\nCzy chcesz losowac dalej? \n";
		cout<<"TAK = 1 , NIE = 0\n";
		cin>>wybor;
		
		//uzylem if zamiast switch'a do decyzji. wydaje mi sie ze jest szybciej i mniej pisania
		if(wybor==1)
		{
			// i++, bo przechodzimy do drugiej karty i bedziemy je zsumowac potem.
			i++;
			gracz[i] = rand()%10+2;
			suma += gracz[i];
			cout<<"Wylosowales "<<gracz[i]<<", razem masz : "<<suma<<endl;
			// sytuacje, co gdy wylosujemy... i suma kart jest...
				if(suma>oczko)
				{
					cout<<" \n\t PRZEGRALES!\n";
					break;
				}
				if(suma==21&&komp!=21)
				{
					cout<<" Wygrales!";
					break;
				}
		}
		// nie dobieramy kart i ryzykujemy z tym co mamy juz wylosowane, w ifach opisane sytuacje co gdy...
		if(wybor==0)
		{
			if(suma<=oczko&&suma>komp)
			{
				cout<<"\n\t WYGRALES!\n";
			}
			if(komp>suma)
			{
				cout<<"\n\t PRZEGRALES!\n";
			}
			if(suma==komp)
			{
				cout<<"\n\t REMIS!";
			}
		}
		
	}
	// jesli wybierzemy cos innego niz 0 to petla sie wykonuje i dobiera kolejna karte. 0 przerywa petle
	while(wybor!=0);
	// dowiadujemy sie o wyniku, i widzimy co wylosowal komputer.
	cout<<" Komputer wylosowal : "<<komp<<endl;	
	return 0;
}
0

Ja bym jednak wyszedł od czegoś takiego:
http://4programmers.net/Forum/Newbie/142856-problem_ze_zrozumieniem_klas?p=945404#id945404
bo z tym twoim podejściem to trudniejsza gra w karty będzie nie do napisania.

0

Przyjemny kod dla oka z komentarzami przez co łatwiej się go czyta.
Masz zmienne globalne które (dla mnie) są złem i powinno się palić programistów za to na stosie (czyt. zabierać komputer ;p).
Mógł byś to zrobić w klasie i wtedy main był by czytelniejszy np.:

{
    GAME gra;
    gra.start();
    return 0;
} 

tak mniej więcej powinna wyglądać funkcja main.
Przy większych projektach oddzielaj warstwę prezentacji od warstwy logicznej (ułatwi to pracę).

0

Do klas jeszcze nie doszedłem w kursie w c++ (bawię się ze wskaźnikami teraz). Napisałem tak bo na studiach jeszcze nie doszliśmy nawet do pisania nowych funkcji. Ale już wiem że w przyszłości takie rzeczy się pisze inaczej(po poznaniu wszystkich możliwości c++) :)

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