Gra „Wisielec” powstała na potrzeby NOMAM Basic Ten-Liners 2014. Czas kodowania ok. 5-6 godzin ze względu na przypomnienie sobie filozofii TurboBasica XL.
Gra popularna na nudnych lekcjach, zwłaszcza języka polskiego…
Zasady:
Jedna osoba (komputer) wymyśla hasło do zgadnięcia; Druga osoba (Ty) zgaduje litery w odgadywanym wyrazie; odgadnięta litera (litery) pojawia się w wyrazie; jeśli nie występuje w wyrazie, pojawia się kolejny element (najpierw) szubienicy, a potem samego wiszącego.
Wyrazy (w ilości 53) zaciągnięte z serwisu http://listofrandomwords.com/
Omówienie kodu:
Pierwsza linijka wykona się tylko raz, stąd ma deklaracje zmiennych tekstowych; ponadto przestawia generator znaków o pół wyżej; następnie dane szubienicy.
To jest początek pętli gry. pierwszy poke powoduje pozbawienie nas jednego z kolorów (pomarańczowego), ale za to mamy spację :D; następnie losowanie wyrazu oraz dekodowanie.
Wypisanie tytułu, reset bufora wyrazu oraz wczytanie ew. przypadkowego klawisza.
Rysujemy kolejny element szubienicy… oraz zapamiętujemy bieżący częściowo odgadnięty wyraz.
Jeśli doszliśmy do całej szubienicy (dwie kropki w linijce 0) to przegrana.
w pętli czekamy na klawisz.; następnie nanosimy literkę na wyraz.
Jeśli odgadliśmy wyraz (nie ma kółeczek) to wygrana. Jeśli wyraz się nie zmienił, to skok do linii dorysowującej szubienicę, w p. p. linijka dalej.
To jest procedura rysowania kolejnego elementu szubienicy.
To jest procedura wypisania wyrazu. Jeśli w=0 to nie czekaj, w p. p. czekaj 3 sek.
To jest procedura wypisania wyrazu na koniec gry; pokazuje cały wyraz niezależnie, czy odgadnięty czy nie.
Ciekawostki:
- Nie przerabiałem oryginalnego generatora znaków – spację uzyskałem przez wyzerowanie pomarańczowego koloru :)
- Pisałem jednocześnie pod Atari800MacX korzystając z urządzenia H6: edytowałem plik głównie w vimie. Dlatego linie są takie długie, można wówczas podać ponoć do 256 – taki jest bufor.
- Orginalnie gra miała 14 linijek. Podejrzewam, że trudno byłoby ją zbić do mniej niż 8. Już 9 jest wyzwaniem, mimo jednej linijki jednokomendowej; jeśli by się ją złączyło z następną, wymagany byłby „if”. A tak, wypełniłem lukę liniami „data”.
- Kodowanie wyrazów to prosty „tr” pod uniksem, dekodowanie równie proste. Gdyby wyrazy były niezakodowane, byłoby mniej zabawy.
- Wyrazy, jak napisałem, pochodzą z http://listofrandomwords.com, wyrzuciłem wszystkie, których nie znałem, więc do gry zakwalifikowały się sensowne (ale trudne) wyrazy.
ATR z grą do pobrania:
Do not let me hang on!