Menu strony
[ Tabela zbiorcza ] |
Czym jest Liga Blefu?
|
Gra przeznaczona jest dla dwóch graczy i składa się z kolejnych rozgrywek. W każdej rozgrywce obaj gracze otrzymują trzy karty, które w tej grze dla uproszczenia będą numerowane od 1 do 8 - liczba 1 oznacza kartę najsłabszą, liczba 8 kartę najsilniejszą.
Niektóre układy otrzymanych kart mają swoje nazwy:
♣ 555 - to tzw. kareta, czyli trzy takie same karty,
♠ 234 - to strit, czyli trzy kolejne karty,
♥ 377 - to oczywiście para,
♦ 158 - a to tzw. rowerek, łamaniec albo amerykanin, czyli nic konkretnego.
Siła kart otrzymanych w grze zależy od posiadanego układu: najmocniejsza jest kareta, później strit, para jest słabsza od strita, ale mocniejsza od łamańca. Jeśli gracze posiadają ten sam typ układu, to o wygranej decydują poszczególne karty wyższe, np.:
♣ para 466 jest mocniejsza od pary [338],
♠ para 344 jest mocniejsza od pary [144],
♥ strit 456 jest mocniejszy od strita [345],
♦ a łamieniec 127 jest mocniejszy od łamańca [346].
Skoro licza mistrzów, to muszą tu być rozrywane jakieś mecze. Przed każdym meczem gracze otrzymują taką samą ilość żetonów (nie wolno! grać na pieniądze). Cały mecz składa się w pewnej ilości rozgrywek nazywanych rozdaniami, w których program powinien:
» 1. określić kwotę do gry, o którą chciałby zagrać z posiadanymi kartami - kwota ta
nie może być mniejsza od wymaganej w danych rozdaniu stawki
» 2. określić dodatnią kwotę przebicia, o którą gracz byłby skłonny podwyższyć kwotę
z punktu 1. gdyby przeciwnik zażądał wyższej liczby żetonów.
Zwycięzcę rozgrywki wskazuje sędzia na podstawie kart posiadanych przez graczy lub na podstawie deklarowanych ilości żetonów do gry - można bowiem wygrać rozgrywkę bez porównywania kart, czyli bez rozstrzygania, kto ma mocniejsze karty.
Jeśli gracz zażądał ilości żetonów wyższej niż suma obu kwot deklarowanych przez przeciwnika w punkcie 1. i 2., to zostanie zwycięzcą takiej rozgrywki "w ciemno", bez oglądania kart - wówczas wygra kwotę zadeklarowaną przez niego do gry w punkcie 1 (kwota ta zawiera stawkę).
Jeżeli gracz, który zadeklarował niższą kwotę od przeciwnika jest w stanie podwyższyć ją do kwoty deklarowanej przez
przeciwnika (jeśli pozwala na to kwota wskazana w punkcie 2.), to dojdzie do sprawdzenia kart i wówczas rozgrywka
toczyć się będzie ilość żetonów wskazaną przez tego gracza, który wskazał wyższą kwotę.
I to już wszystkie zasady...
Nad przebiegiem całego turnieju czuwa uwielbiany przez wygrywających i nienawidzony przez pokonywanych sędzia. To własnie on:
⇒ przyjmuje napisane przez uczestników programy, sprawdza je pod kątem zawartości i poprawności i dopuszcza do gry,
⇒ organizuje i przeprowadza mecze poszczególnych programów, ocenia poprawność gry, sprawdza czy nie oszukują podczas gry ;),
liczy aktualną ilość żetonów, ustala stawki w rozgrywkach i przyznaje punkty końcowe za osiągnięte zwycięstwa,
⇒ dba, aby każdy program zagrał z wszystkimi przeciwnikami w sposób jak najbardziej sprawiedliwy, dlatego te same programy
grając po raz drugi otrzymują karty, króte w pierwszym spotkaniu otrzymywał przeciwnik,
⇒ mierzy czas gry, jakoże gra nie może trwać wiecznie, jest więc grą na czas - każdy program ma do dyspozycji
kilka sekund na rozegranie całego meczu z przeciwnikiem,
⇒ po każdym rozegranym meczy sędzia publikuje tabelę rankingową z wynikami oraz raporty z przebiegiem poszczególnych meczów.
Aby sprawdzić, czy umieszcz blefować musisz napisać program, który:
1. wczyta informacje o ilości żetonów i czasie przeznaczonym na mecz, 2. następnie będzie wykonywał iterację symulującą grę, w której: a.) odczyta informacje o otrzymanych kartach, aktualnej ilości posiadanych żetonów i czasie pozostałym do końca gry, b.) ustali i wypisze stawkę o jaką będzie grał oraz kwotę o jaką skłonny jest podwyższyć stawkę w rozgrywce.
Struktura programu powinna być następująca:
#include<iostream> using namespace std; // tu zadeklaruj potrzebne ci zmienne int main() { // wczytaj informacje o grze cin>>ilosc_zetonow>>czas_gry; // a teraz graj ... do { // odczytaj karty i inne dane cin>>k1>>k2>>k3>>stawka>>zetony_moje>>zetony_przec>>czas_na_gre; // udziel odpowiedzi wypisując dwie liczby całkowite: // kwotę o jaką chcesz zagrać // oraz kwotę którą skłonny(a) jesteś dołożyć, aby sprawdzić karty przeciwnika cout<<za_tyle_gram<<" "<<tyle_moge_dolozyc<<endl; // pamiętaj o czasie gry - aby sędzia natychmiast otrzymał twoją odpowiedź // po wypisaniu wymuś natychmiastowe umieszczenie danych w strumieniu cout cout.flush(); } while(1); //pętla jest nieskończona, nie musisz w żaden sposób kończyć programu - zrobi to sędzia }
W pierwszym wierszu wejścia zapisano dwie liczby całkowite: ilość żetonów
n przeznaczonych na rezegranie meczu z zakresu
Kolejne wiersze wejścia zawierać będą po siedem liczb całkowitych. Pierwsze trzy z tych liczb z zakresu 1..8 zapisane są w sposób rosnący (niemalejący) i oznaczają karty, którymi musisz rozegrać rozgrywkę. Czwarta liczba określa stawkę, którą należy opłacić. Liczby piąta i szósta wskazują aktualnie posiadane ilości żetonów, odpowiednio przez ciebie i twojego przeciwnika. Ostatnia z liczb jest czasem, który pozostał ci na rozegranie meczu.
W odpowiedzi na każdą linię wejściową twój program powinien wypisać dwie liczby całkowite oddzielone pojedyńczą spacją: ilość żetonów, o które chciałbyć zagrać z otrzymanymi kartami oraz ilość żetonów o którą byłbyś skłonny zwiększyć tę kwotę, gdyby było to konieczne ze zwględu na żądania przeciwnika.
Powodzenia!
cout.flush()
Jak powszechnie wiadomo komputery uwielbiają tzw. buforowanie wszelkiego
rodzaju danych przesyłanych pomiędzy urządzeniami czy programi. Może to
i jest przydatne, ale na pewno nie w naszej grze, która jest rozgrywana na czas.
Jeśli chcesz być pewien, że to co program wypisał natychmiast
trafi do sędziego, po każdej instrukcji zapisu umieść instrukcję cout.flush() -
czyli "płukanie" albo "wymiatanie" wszystkiego co pozostało w tzw. buforze strumienia
danych i nie trafiło jeszcze do odbiorcy.
[ Tabela zbiorcza ] [ Wyślij program ] [ Stan kolejki ] [ Załóż nowe konto ] [ Strona główna ]