Wątek przeniesiony 2017-03-06 06:28 z C/C++ przez Patryk27.

Ocena prostego kodu

0

Witam nie wiem czy w tym dziale można prosić o ocene kodu,lub czy w ogóle można,ale ucze się c++ i napisalem prostą gre kamien papier nożyce

#include <iostream>
#include <conio.h>
#include <time.h>
#include <string>

void gra(int &sc1, int &sc2);
void tekst(void);
char losowanie(void);
std::string tekst2(char k);

int main()
{
	char j;
	bool koniec = false;
	std::cout << "Witaj w grze Rock Paper Scisors" << std::endl;
	tekst();
	int sc1 = 0;
	int sc2 = 0;
	srand(time(NULL));
	while (koniec != true)
	{
		gra(sc1, sc2);
		std::cout << "Wynik to " << sc1 << ":" << sc2 << std::endl;
		std::cout << "Jeszcze raz?Wcisnij n jezeli nie " << std::endl;
		std::cin >> j;
		if (j == 'n')
		{
			koniec = true;
		}
		system("cls");
	}
	std::cout << "Koncowy wynik to " << sc1 << ":" << sc2 << std::endl;

	_getch();
}
void tekst(void)
{
	std::cout<< "Zasady : k-Kamien,p-Papier,n-Nozyczki" << std::endl;

}
std::string tekst2(char k)
{
	if (k == 'p')return "papier";
	if (k == 'k')return "kamien";
	if (k == 'n')return "nozyce";
}
void gra(int &sc1,int &sc2)
{

	char x;
	char y;
	std::cout << "Podaj co wybierasz" << std::endl;
	std::cin >> x;
	if ((x == 'k') || (x == 'p') || (x == 'n'))
	{
		std::cout << "Wybrales " << tekst2(x) << std::endl;
		y = losowanie();
		std::cout << "Komputer wybral " << tekst2(y) << std::endl;
		if (((x == 'k') && (y == 'n')) || ((x == 'n') && (y == 'p')) || ((x == 'p') && (y == 'k')))
		{
			++sc1;
			return;
		}
		else if (((x == 'k') && (y == 'p')) || ((x == 'n') && (y == 'k')) || ((x == 'p') && (y == 'n')))
		{
			++sc2;
			return;
		}
		else
		{
			return;
		}
	}
	else
	{
		std::cout << "Podales zly znak ! " << std::endl;
		return;
	}
	
}
char losowanie(void)
{
	int y = rand() % 3;
	if (y == 0)return 'k';
	if (y == 1)return 'p';
	else return 'n';
}

Gra działa poprawnie,nie jestem zaawansowany dlatego może nie używałem bardziej skomplikowanych rzeczy,ale jeżeli zrobiłem jakiś karygodny błąd to proszę o uświadomienie mnie.

2
  1. W nowoczesnym C++ są lepsze metody generowania liczb pseudolosowych: std::random
  2. Możliwe wybory (papier, kamień, nożyce) aż się proszą o enuma, a można przyszpanować i im w ogóle zrobić klasę, w której można zawrzeć logikę ich porównywania.
  3. Nic nie mówiące nazwy funkcji (tekst, tekst2) czy ich parametrów (gra(int &sc1,int &sc2)).
  4. Nie podoba mi się logika samej funkcji gra, która ma dwa zadania — obsługę samej gry i zliczanie punktów. Wolałbym, by zwracała zwycięzcę, a zliczaniem punktacji zajmowało się co innego.
  5. main mógłby być krótszy, w szczególności pętlę while dobrze by było wyekspediować do innej funkcji.
  6. Kosmetyka, ale warunek koniec != true miałby większy sens w postaci !koniec.
  7. Liczne literówki, zwłaszcza związane z odstępami (przed znakiem interpunkcyjnym odstępu nie ma, za to po jest).

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