Zadanie zaliczeniowe ze Smalltalka
----------------------------------


W grze w oczko uczestniczą gracze i jeden rozdający. Grają jedną talią
złożoną z 52 kart. Jedna gra składa się z N rozgrywek. Jedna rozgrywka
polega na tym, że:
- rozdający tasuje karty,
- rozdający daje po kolei każdemu z graczy kolejne karty z talii (po
jednej), aż gracz stwierdzi, że nie chce już więcej kart, bądź suma
oczek kart danych graczowi przekroczy 21. (Uwaga: najpierw pierwszy
gracz bierze wszystkie swoje karty, potem drugi, itd.) Jeśli skończą
się karty w talii to kolejni gracze będą mieli po 0 oczek,
- graczom przyznawane są punkty (p. dalej),
- rozdający zbiera karty od graczy.

Punkty graczom są przyznawane wg następujących zasad:
- jeśli wszyscy gracze przekroczyli 21 oczek to nikt nie dostaje
punktów,
- wpp. wszyscy gracze, którzy uzyskali maksymalną liczbę oczek nie
większą niż 21 dostają po jednym punkcie.

Zaprojektuj i zaimplementuj w Smalltalku klasy służące do symulowania
gry w oczko zgodnej z podanymi powyżej zasadami. Twój projekt powinien
zawierać (co najmniej) klasy reprezentujące:
- całą grę,
- rozdającego (ma talię kart),
- karty (wiedzą ile mają oczek),
- graczy.

Główna klasa symulacji (Gra) powinna mieć (co najmniej) metodę:
graZGraczami:gracze liczbaTur:N, która przeprowadzi rozgrywkę, a jako
wynik da słownik indeksowany graczami, zawierający zdobyte przez nich
punkty. Należy wyodrębnić (co najmniej) następujące rodzaje graczy:
- gracza z limitem (bierze karty aż do osiągnięcia lub przekroczenia
zadanego limitu oczek),
- gracza zliczającego (zlicza już rozdane karty i wylicza oczekiwaną
wartość liczby oczek następnej karty),
- gracza losowego (losowo podejmuje decyzję o tym, czy brać następną
kartę - oczywiście o ile nie ma jeszcze 21 oczek).

Cała gra powinna być wywoływana np. tak:
|gracze wyniki|
gracze := Set new.
gracze add: GraczLosowy new.
gracze add: GraczZliczający new.
gracze add: (GraczZLimitem new: 17).
gracze add: (GraczZLimitem new: 20).
wyniki := Gra new graZGraczami:gracze liczbaTur: N.
"Wypisanie wyników"

Zwróć uwagę na obiektowość swojego rozwiązania, w szczególności
zadbaj o to, by można było łatwo dodać do
stworzonej przez Ciebie hierarchii klas nowe rodzaje graczy.