♣ ♠ Liga (mistrzów) Blefu ♥ ♦

Menu strony

[ Tabela zbiorcza ]
[ Wyślij program ]
[ Załóż konto ]
[ Stan kolejki ]

[ mail ]

Czym jest Liga Blefu?

Blef - taktyka mająca na celu wprowadzenie w błąd innych uczestników gry. Słowo trwale weszło do języka potocznego i oznacza celowe wprowadzenie innych osób w błąd.

Liga (mistrzów) Blefu to turniej rozgrywek ligowych, którego uczestnikami są programy komputerowe napisane przez uczniów II LO.

Każdy uczestnik turnieju po zarejestrowaniu wystawia do gry napisany przez siebie w języku C/C++ program komputerowy grający w pewną prosta grę o nazwie Blef. Program ów reprezentuje uczestnika w turnieju, rozgrywa gry w pozostałymi uczestnikami turnieju, czyli programami innych uczestników. Za odnoszone w trakcie rozgrywek zwycięstwa program zdobywa punkty, na podstawie których jest klasyfikowany w tabeli zbiorczej.

Jakie są zasady gry w Blef?

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...

W jaki sposób te programy będą grać ze sobą w Lidze (mistrzów) Blefu?

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.

Jak program grający w Lidze (mistrzów) Blefu powinien wyglądać?

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
}
Dokładana specyfikacja wejścia

W pierwszym wierszu wejścia zapisano dwie liczby całkowite: ilość żetonów n przeznaczonych na rezegranie meczu z zakresu 100..10000 oraz czas t przeznaczony na twoją grę wyrażony w milisekundach z zakresu 1000..10000.

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.

Specyfikacja wyjścia

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!

Wskazówki...

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 ]