Gra w pokera, z ograniczeniem dla liczb losowych, pętli, instrukcji warunkowych.

0

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/

2

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.

2

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

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.

1

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);
}
0
for(int i=0; i<5; ++i) {
  if(liczba[0] == liczba[i]) {
        printf("Masz pare!");
        break;
   }
}

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