Jest to kontynuacja pytania dotyczącego wydruku labiryntu . Jeśli podoba ci się to pytanie, dodaj więcej algorytmów generowania labiryntu;).
Aby wykonać to zadanie, musisz wdrożyć silnik gry dla jednego gracza, który musi znaleźć skarb w labiryncie i wydostać się z lochu.
Silnik rozpoczyna się od odczytania labiryntu ze standardowego wejścia, a następnie wiersza zawierającego plik podany jako argument w wierszu poleceń. Następnie gracz .
(kropkę)@
umieszcza się w losowej lokalizacji na mapie. Następnie silnik zaczyna współdziałać z odtwarzaczem poprzez standardowe io:
Polecenia od silnika do gracza :
continue
: Gra nie jest skończona. Otoczenie jest drukowane, a następnie.
. Gracz jest reprezentowany przez@
postać. Nieobserwowalne komórki są reprezentowane przez?
.finished
: Gra zakończona. Liczba kroków jest drukowana i gra się zatrzymuje.
Polecenia od gracza do silnika :
north
: Przesuwa gracza w górę.south
: Przenosi gracza w dół.west
: Przenieś gracza w lewo.east
: Przesuń odtwarzacz w prawo.
Wszelkie nieprawidłowe polecenia gracza (takie jak trafienie w ścianę) są ignorowane, ale nadal liczone. Możesz dowolnie definiować otoczenie.
- Punkty za najkrótszy kod.
- Punkty dla złożonego otoczenia (np. Drukuj duże obszary i zastępuj komórki, które nie są widoczne
?
). - Brak punktów za kod, który nie przestrzega formatu io
Przykład :
W tym przykładzie otoczenie jest zdefiniowane jako komórka 3x3 z odtwarzaczem pośrodku.
$ cat maze
+-+-+
|#|
| |
+---+
$ python engine.py maze
|#
@
---
.
east
|#|
@|
--+
.
north
+-+
|@|
|
.
south
|#|
@|
--+
.
west
|#
@
---
.
west
|
|@
+--
.
north
+-+
@|
|
.
west
finished
7
Odpowiedzi:
C99, 771 znaków
Wymaga i korzysta z ncurses. Tylko jedna makroryzacja dla długości, a makra N i M mają zastąpić brakujące minimalne i maksymalne operatory, i nie sądzę, że jest o wiele więcej do zrobienia.
Zakłada labiryntu wejściowego nie przekracza 80 znaków szerokości, i że labirynt nazwa pliku jest przekazywana na polecenia linii, oraz że liczba parametrów jest na tyle niska, że początkowa wartość c jest rozkaz ruchu.
Różni się od standardu tym, że przyjmuje polecenia kierunku jednoznakowego jako pierwszą małą literę sugerowanych poleceń.
Czy pokazuje nieznane regiony jako „?”.
Bardziej czytelne z komentarzami:
źródło