Gra "Oczko"

0

Witam,
przedstawiam moją pierwszą grę w programie C++ - Oczko.
Jeżeli macie jakieś sugestie dot. gry możecie edytować kod i przesyłać.
W załącznikach znajduje się skompresowana wersja gry (.rar)

KOD ŹRÓDŁOWY:

#include <iostream>
#include <stdlib.h>
#include <windows.h>
#include <ctime>

using namespace std;




main()
{
	int decyzaja;
	int punkty1, punkty2;
	srand(time(NULL));
	int dod;
	int runda1=0, runda2=0;
	string gracz1, gracz2;
	
	HANDLE kolor=GetStdHandle( STD_OUTPUT_HANDLE );
    SetConsoleTextAttribute( kolor, 10 );
        cout<<" _   _        _ _          ____"<<endl;             
	cout<<"| | | | __ _ (_) |_ ___   |  _ \\  _____   __"<<endl;
	cout<<"| |_| |/ _` || | __/ _ \\  | | | |/ _ \\ \\ / /"<<endl;
	cout<<"|  _  | (_| || | || (_) | | |_| |  __/\\ V /"<<endl; 
	cout<<"|_| |_|\\__,_|/ |\\__\\___/  |____/ \\___| \\_(_)"<<endl; 
	cout<<"           |__/"<<endl;                                   
	cout<<" ,-----.  ,-----.,-------.,--. ,--. ,-----. "<<endl;
	cout<<"'  .-.  ''  .--./`--.   / |  .'   /'  .-.  '"<<endl;
	cout<<"|  | |  ||  |      /   /  |  .   ' |  | |  |"<<endl;
	cout<<"'  '-'  ''  '--'\\ /   `--.|  |\\   \\'  '-'  '"<<endl;
	cout<<" `-----'  `-----'`-------'`--' '--' `-----' "<<endl;
	SetConsoleTextAttribute( kolor, 11 );
	cout<<""<<endl;
	cout<<"Elo, witaj w grze w prawie-0czko"<<endl;
	cout<<""<<endl;
	SetConsoleTextAttribute( kolor, 13 );
	cout<<"Instrukcja:"<<endl;
	cout<<"1. Aby wylosowac kolejna licze, wcisnij '1'"<<endl;
	cout<<"2. Aby przestac grac, wcisnij '0'"<<endl;
	cout<<"3. UWAGA! Gra przeznaczona jest dla dzieci od 10 lat!"<<endl;
	cout<<"4. Gra liczy sobie dwe rundy"<<endl;
	cout<<"gl&hf!"<<endl;
	SetConsoleTextAttribute( kolor, 14 );
	
	cout<<"Gracz1 - Wczytaj swoj nickname ktory bedzie uzywany podczas tej giery:"<<endl;
	cin>>gracz1;
	cout<<"Gracz2 - Wczytaj swoj nickname ktory bedzie uzywany podczas tej giery:"<<endl;
	cin>>gracz2;
	
	SetConsoleTextAttribute( kolor, 15 );
	do
	{
		punkty1=0;
		do
		{
			dod=rand()%5+1;
			punkty1=punkty1+dod;
			if(punkty1>21)
			{
				SetConsoleTextAttribute( kolor, 12 );
				cout<<"Niestety ci sie nie udalo :()"<<endl;
				SetConsoleTextAttribute( kolor, 15 );
				break;
			}	
			if(punkty1==21)
			{	SetConsoleTextAttribute( kolor, 11 );
				cout<<"No niech Ci bedzie, wygrales!"<<endl;
				SetConsoleTextAttribute( kolor, 15 );
				break;
			}
  			SetConsoleTextAttribute( kolor, 15 );
			cout<<gracz1<<" obecnie masz "<<punkty1<<" punktow"<<endl; 
			cin>>decyzaja;
		}while(decyzaja==1);
		SetConsoleTextAttribute( kolor, 14 );
		cout<<"Pierwsza osoba ma "<<punkty1<<" punktow"<<endl;
		SetConsoleTextAttribute( kolor, 15 );
		punkty2=0;
		do
		{
			dod=rand()%5+1;
			punkty2=punkty2+dod;
			if(punkty2>21)
			{
				SetConsoleTextAttribute( kolor, 12 );
				cout<<"Niestety ci sie nie udalo :()"<<endl;
				SetConsoleTextAttribute( kolor, 15 );
				break;
			}	
			if(punkty2==21)
			{	SetConsoleTextAttribute( kolor, 11 );
				cout<<"No niech Ci bedzie, wygrales!"<<endl;
				SetConsoleTextAttribute( kolor, 15 );
				break;
			}
  			SetConsoleTextAttribute( kolor, 15 );
			cout<<gracz2<<" obecnie masz "<<punkty2<<" punktow"<<endl; 
			cin>>decyzaja;
		}while(decyzaja==1);
		SetConsoleTextAttribute( kolor, 14 );
		cout<<"Druga osoba ma "<<punkty2<<" punktow"<<endl;
		SetConsoleTextAttribute( kolor, 15 );
		SetConsoleTextAttribute( kolor, 11 );
		cout<<"Pierwsza osoba ma "<<punkty1<<" Druga osoba ma "<<punkty2<<endl;
		if(punkty1<22 && punkty2<22)
		{
			if(punkty1>punkty2)
				runda1++;
			if(punkty1<punkty2)
				runda2++;
			if(punkty1==punkty2)
			{
				runda1++;
				runda2++;	
			}	
		}
		if(punkty1>21 && punkty2>21)
		{			
			runda1++;
			runda2++;			
		}
		if(punkty1<22 && punkty2>21)
		{
			runda1++;
		}
		if(punkty2<22 && punkty1>21)
		{
			runda2++;
		}
		cout<<gracz1<<"| "<<runda1<<"-"<<runda2<<" |"<<gracz2<<endl;
		
		cout<<"Nastepna runda? Jesli tak to wczytaj liczbe '1''"<<endl;
		SetConsoleTextAttribute( kolor, 15 );
		cin>>decyzaja;
	}
	while(decyzaja == 1);
	SetConsoleTextAttribute( kolor, 12 );
	cout<<" _   _        _ _          ____"<<endl;             
	cout<<"| | | | __ _ (_) |_ ___   |  _ \\  _____   __"<<endl;
	cout<<"| |_| |/ _` || | __/ _ \\  | | | |/ _ \\ \\ / /"<<endl;
	cout<<"|  _  | (_| || | || (_) | | |_| |  __/\\ V /"<<endl; 
	cout<<"|_| |_|\\__,_|/ |\\__\\___/  |____/ \\___| \\_(_)"<<endl; 
	cout<<"           |__/"<<endl;                                   
	SetConsoleTextAttribute( kolor, 15 );
	system("pause");
}
2
  1. podziel kod na logiczne kawałki - funkcje np.
void header() 
{
		cout << " _   _        _ _          ____" << endl;             
		cout << "| | | | __ _ (_) |_ ___   |  _ \\  _____   __" << endl;
		cout << "| |_| |/ _` || | __/ _ \\  | | | |/ _ \\ \\ / /" << endl;
		cout << "|  _  | (_| || | || (_) | | |_| |  __/\\ V /" << endl; 
		cout << "|_| |_|\\__,_|/ |\\__\\___/  |____/ \\___| \\_(_)" << endl; 
		cout << "           |__/"<<endl;                                   
		cout << " ,-----.  ,-----.,-------.,--. ,--. ,-----. " << endl;
		cout << "'  .-.  ''  .--./`--.   / |  .'   /'  .-.  '" << endl;
		cout << "|  | |  ||  |      /   /  |  .   ' |  | |  |" << endl;
		cout << "'  '-'  ''  '--'\\ /   `--.|  |\\   \\'  '-'  '" << endl;
		cout << " `-----'  `-----'`-------'`--' '--' `-----' " << endl;
}

i wywołuj je potem

SetConsoleTextAttribute( kolor, 10 );
header();

kod stanie się miliard razy czytelniejszy
2. formatowanie: spacje, odstępy

dod = rand() % 5 + 1;
punkty1 = punkty1 + dod;

if (punkty1 > 21)
{
	SetConsoleTextAttribute(kolor, 12);
	cout << "Niestety ci sie nie udalo :()" << endl;
	SetConsoleTextAttribute( kolor, 15 );
	break;
}

if (punkty1 == 21)
{   
	SetConsoleTextAttribute( kolor, 11 );
	cout << "No niech Ci bedzie, wygrales!" << endl;
	SetConsoleTextAttribute( kolor, 15 );
	break;
}

ten kod chce oddychać, żeby był czytelniejszy

3

Skoro to C++ nie nie używaj rand() z cstdlib tylko random z biblioteki C++.

2

Minusy :

  • Gra jest tylko dla dwóch osób. A jak chciałbym pograć sam to co wtedy?
  • Kod trochę długi. Jak kolega powiedział wyżej kod powinien być wydzielony na funkcje, klasy - ale do tego jeszcze dojdziesz :)
  • niepotrzebne system("pause") na końću

Plusy

  • Logo ;d Sam pisałeś czy użyłeś generatora?
  • Kolorki!!!

W ogóle czemu ta gra jest od 10 lat? Skąd pomysł żeby w ogóle coś takiego pisać xD?

0

@M4v3n: niestety nie wiem jak by miała wyglądać wersja owej gry dla jednej osoby ;/

Przebieg:

  1. Wybierasz opcje gry dla 1 osoby:
  • Losujesz liczby (które po kolei się sumują), tak aby suma całk. nie przekroczyła "21"
  • Suma punktów powoli zbliża się do 21:
    • pasujesz - zbyt duże ryzyko przegranej; * (wyświetla się suma uzyskanych punktów + opcja zakończenia gry lub rozpoczęcia jej od nowa) *
    • grasz dalej:
      * wygrywasz * (wyświetla się suma uzyskanych punktów + opcja zakończenia gry lub rozpoczęcia jej od nowa) *
      * przegrywasz * (wyświetla się suma uzyskanych punktów + opcja zakończenia gry lub rozpoczęcia jej od nowa) *

Powiedzmy, że zaczynasz od nowa - I tak w kółko?
Ta gra raczej jest stworzona do mierzenia z innym graczem - samemu będzie nudno... Jeżeli jednak wg Ciebie to jest dobry pomysł - kod czeka.
** Napisz co o tym sądzisz :) **

0

Tak jak koledzy wcześniej pisali, spróbuj podzielić kod na funkcje (staraj się stosować do zasad SOLID], a na początek zastosuj zasadę jednej odpowiedzialności ), a lepiej utwórz klasy. Proponowałbym oddzielić mechanikę gry od wyświetlania/wprowadzania danych, pozwoli to na łatwiejsze rozbudowanie kodu w przyszłości np. jeśli będziesz chciał zrobić wersję okienkową.
Na koniec jeszcze jedna uwaga używaj angielskich nazw zmiennych, funkcji i obiektów!

0

fasadin.4programmers.net

zobacz sobie jak mozna to jeszcze w inny sposob napisac (musialbys przeczytac odpierwszej lekcji i pominac to co juz znasz)

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