środa, 26 kwietnia 2017

Tydzień 8: interfejsy

Ćwiczenia

Gra w Blackjacka (nasze Oczko, czy Dwadzieścia-jeden) jest grą karcianą, polegającą na zbieraniu kart tak, by uzbierać więcej oczek na kartach niż rywale, ale nie więcej niż 21. Dokładne reguły gry bywają różne, my przyjmiemy w tym zadaniu pewne ich uproszczenie.

Zasady gry

W grę gra co najmniej jeden gracz (liczba graczy jest ograniczona tylko liczbą dostępnych kart, w naszym programie zakładamy, że jeśli graczy jest zbyt wielu i dla któregoś nie starczy kart, to program ma prawo przerwać działanie).
Gra składa się z wielu rozdań. Rozdanie rozpoczyna się od potasowania kart. Następnie każdy gracz dostaje kolejne karty z talii (po jednej) tak długo, jak długo chce je brać lub do momentu, gdy suma oczek w kartach na ręku przekroczy 21. Gracz nie widzi karty, którą ma dostać (oczywiście od momentu dołożenia karty do ręki może już ją oglądać). Po zakończeniu każdego rozdania gracze, którzy zdobyli najwięcej oczek (ale nie więcej niż 21), dostają po 1 punkcie. Może się zdarzyć, że w danym rozdaniu żaden z graczy nie dostanie punktu. Grę wygrywa ten z graczy (lub ci gracze), który zdobędzie najwięcej punktów.
Liczby oczek na poszczególnych kartach:
  • karty 2-10: taka sama liczba oczek jak na karcie,
  • karty W, D, K: po 10 oczek każda,
  • as to 11 oczek.

Struktura programu

Na podstawie treści zadania należy zaprojektować i zaimplementować następujące interfejsy  oraz klasy:
  • interfejs Gracz,
  • klasy:
    • Krupier - bierze kolejne karty póki ma mniej niż 17 oczek na ręku,
    • Limitowy - ma zadany limit oczek, dobiera kolejne karty tylko wtedy, gdy suma oczek na reku jest mniejsza od limitu,
    • Losowy - zawsze losuje (z prwdp. 50%), czy wziąć kolejną kartę,
    • Ostrożny - bierze kolejną kartę tylko wtedy, gdy ma pewność, że po jej wzięciu nie przekroczy limitu 21 oczek w ręku,
    • Śpiący - śpi i nigdy nie dobiera żadnej karty.

Zanim zaczniesz implementować te klasy zastanów się, jak powinny być zadeklarowane. Możesz dodać tu jeszcze jakieś klasy, jeśli uznasz to za potrzebne. Możesz też dodać jeszcze inne typy graczy.

Laboratorium

Zaimplementuj drzewo BST przechowujące liczby całkowite. Chcemy uniknąć dużej liczby testów (czy jest lewe dziecko, czy jest prawe dziecko,...) w kodzie. Wskazówka: użyj polimorfizmu, żeby reprezentować puste węzeł.

Praca domowa nr 8

Zadanie o drzewie BST. Zasady:
  • Rozwiązanie w należy wysłać mailem na adres kozubek (at) mimuw.edu.pl do 9 maja 2017 r.
  • Rozwiązanie powinno mieć postać jednego pliku. Jeśli chcemy wysłać kilka plików, należy spakować je zip-em. Nazwa pliku powinna zawierać imię i nazwisko autora, np. JanKowalski.zip.
  • Temat wiadomości to PO8.