Cześć! Mam za zadanie stworzyć gre w pokera dla jednej osoby, losuję mu 5 liczb, następnie daje wybór podania wyniku lub wymiany kart. Mój problem polega na tym jak prosto napisać w kodzie jaki układ kart ma gracz np: 'parka' to dwie takie same liczby, 'trójka' trzy takie same itd. Proszę o podpowiedź jak to moge łatwo napisać w kodzie. Proszę także o ocene mojego kodu czy napisałem go poprawnie.
http://wklej.org/id/3092152/
Kiepsko, bo karty są wyciągane z czapy, a nie z talii.
Kiedy już zdefiniujesz karty trzymane w ręku będziesz mógł dla nich przeprowadzić analizuję koloru, powtarzalności i tak dalej - na podstawie tych danych będziesz określał co ciekawego gracz ma w ręce - strita, parę, trójki czy cokolwiek innego.
Chcesz sobie zrobić klasę reprezentującą karty, później talię tych kart jako std::array
lub std::vector
, talię potasować przy użyciu std::shuffle
i do ręki (znowu std::array
lub std::vector
) wziąć kolejne karty itd.
Ocenę układu najłatwiej będzie zaimplementować przy użyciu std::count_if
.
A tak poza tym, to powywalaj niepotrzebne nagłówki z kodu…
1. Skorzystaj ze switch
zamiast robić milion ifów
...
2. Poczytaj sobie o enumeracji (typie wyliczeniowym) enum
, dzięki temu będziesz mógł każdemu numerkowi przypisać nazwę, w sumie może Ci się to przydać.
Apropos twojego pytania, musiałbyś zrobić pętlę, którą sprawdzisz czy nie ma takich samych numerów, jeśli są np. 2 takie same wyświetli się, że użytkownik ma parkę itd.
Tu masz prymitywizm jak u Nikifora :-) Ale raczej idź w kierunku nazywania kart a nie generowania numerków. Nie wiem czy znasz podejście obiektowe. Dlatego ten kod jest bardzo prosty
#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
typedef enum {
Kier, Karo, Trefl, Pik
} kolor_t;
const char * kolorNaNazwe[] = {
"Kier", "Karo", "Trefl", "Pik"
};
typedef enum {
Dwojka, Trojka, Czworka, Piatka, Szostka, Siodemka, Osemka,
Dziewiatka, Dziesiatka, Walet, Dama, Krol, As
} figura_t;
const char * figuraNaNazwe[] = {
"2", "3", "4", "5", "6", "7", "8", "9", "10", "Walet", "Dama",
"Król", "As"
};
typedef std::pair<figura_t, kolor_t> karta_t;
typedef std::vector<karta_t> talia_t;
talia_t generujTalie() {
talia_t talia;
int kNumKoniec = (int)Pik;
int fNumKoniec = (int)As;
for(int kolor = 0; kolor <= kNumKoniec; ++kolor) {
for(int figura = 0; figura <= fNumKoniec; ++figura) {
talia.push_back(karta_t((figura_t)figura, (kolor_t)kolor));
}
}
return talia;
}
void pokazTalie(const talia_t& talia) {
for(size_t i = 0; i < talia.size(); ++i) {
std::cout << figuraNaNazwe[talia[i].first]
<< ' ' << kolorNaNazwe[talia[i].second] << std::endl;
}
}
void tasujTalie(talia_t& talia) {
// Tu już bez przesady.. od 2011 trochę lat już minęło :-)
std::random_shuffle(talia.begin(), talia.end());
}
int main() {
talia_t talia = generujTalie();
tasujTalie(talia);
pokazTalie(talia);
}
for(int i=0; i<5; ++i) {
if(liczba[0] == liczba[i]) {
printf("Masz pare!");
break;
}
}