Gry są fajne
ten codegolf był tak zabawny, że musiałem stworzyć wersję dla innych klasycznych gier o podobnej złożoności. Najkrótszy sposób na stworzenie podstawowej gry Space Invaders w Pythonie
Tym razem jednak spróbuj odtworzyć klasyczną grę „Snake”, w której zaczynasz jako mały kształt, nieustannie przechodząc do zbierania elementów, aby zwiększyć swój wynik. Po zebraniu pionu rośnie „ogon”, który podąża wyznaczoną ścieżką. Celem jest przetrwanie jak najdłużej bez uderzenia we własny ogon lub w ściany
Kwalifikacje:
- Wy, postacie, które składają się na ogon, ściany i zebrane elementy, powinniście być różnymi postaciami
- pokaż HUD z wynikiem. Wynik wzrasta o 1 punkt za każdy zebrany kawałek
- Gracz przegrywa, gdy zderzy się z własnym ogonem lub ścianą
- element odradza się w losowym obszarze natychmiast po zebraniu elementu, nie wspominając już o tym na początku gry
- Szybkość gry nie ma znaczenia, o ile jest spójna
„Komórki” powinny mieć 2x1 znaków, ponieważ wysokość znaków blokowych jest ~ dwa razy większa niż szerokośćMoże wynosić 1x1, ponieważ 2x1 jest po prostu brzydka i tak naprawdę o tym nie myślałem- Klawisze zmiany kierunku powinny być odpowiednio
awsd
: w lewo, w górę, w dół, w prawo - kierunek początkowy powinien być zawsze w górę
- Musisz pokazać krawędzie ściany. Wynik może nachodzić na ścianę
Wygrywa najkrótszy kod spełniający powyższe kryteria. Wyimaginowane punkty bonusowe za kreatywność
awsd
istarting direction should always be up
,M-x snake
zadziałałobyM-: (progn(define-key snake-mode-map"a"'snake-move-left)...(setq snake-initial-velocity-x 0 snake-initial-velocity-y 1)(snake))
zrobiłby wtedy lewę.Odpowiedzi:
JavaScript (
553512 bajtów)Link do wersji do gry
Na początku próbowałem wyprowadzić go na prawdziwą konsolę (za pomocą
console.log
iconsole.clear
), ale zbyt mocno migotał, więc umieściłem go w HTML-u podobnym do konsoli. Będzie działać z tym:Zaimplementowałem go najpierw z komórkami 2x1, ale wyglądało to gorzej niż 1x1. To byłaby niewielka zmiana.
Używa
awsd
klawiszy na klawiaturze.Aktualizacja:
Udało mi się zmniejszyć go do 512 (dokładnie 0x200) bajtów, poprawiając wyszukiwanie ogona i wykonując trochę więcej magii.
Teraz dostajesz 2 punkty, gdy element odradza się na twoim ogonie (jest to cecha). Naprawiłem również nakładanie się, gdy wąż gryzie się.
źródło
awsd
Kod maszynowy x86 (128 bajtów)
Podobnie jak moje zgłoszenie do generowania fraktala Mandlebrota , napisałem prop dla gry w węża w 128 bajtach. Nie w pełni spełnia wymagania wyzwania (zaczyna się poruszać w prawo, nie wszystkie ściany są narysowane), ale publikuję je, ponieważ uważam, że jest to interesujące i kreatywne rozwiązanie. Wynik wyświetlany jest dwójkowo po prawej stronie, klawisze strzałek kontrolują kierunek ruchu, „jedzenie” jest losowo upuszczane i kończy się, jeśli uderzysz siebie, ścianę lub krawędź ekranu.
Link do pliku wykonywalnego i kodu źródłowego
Również w odniesieniu do wcześniejszego komentarza na temat tego, czy dosbox oszukuje, myślę, że jest całkowicie akceptowalny, o ile działa w trybie wyświetlania tekstowego, ponieważ jest to tylko terminal dos.
źródło
16 bitów 8086
526 bajtów / 390 bajtów
Dekoduj to za pomocą dekodera Base64 i nazwij go „snake.com”, a następnie uruchom z wiersza poleceń systemu Windows. Testowany na WinXP, może być konieczne użycie DosBox, aby uzyskać odpowiedni tryb wideo. Klawisze sterujące to „wasd” i spacja do wyjścia. Naciśnij „w”, aby rozpocząć.
Oto wersja trybu znakowego o długości 390 bajtów:
Ten tryb postaci jest o trzy bajty dłuższy (ale wąż jest lepszy):
źródło
shell / sh, 578 znaków
Próbowałem być zgodny z POSIX (będąc tak przenośnym, jak to możliwe i unikaj bashizmów, nawet generator liczb losowych nie potrzebuje / proc). Możesz np. Zagrać w natywny terminal lub sesję SSH: uruchomić z 'dash -c ./snake' Istnieje również niesprawdzony / czytelny wariant ~ 2800 bajtów, który można zobaczyć tutaj .
Kilka uwag: skrypty powłoki nie są odpowiednie do kodowania gier 8-)
źródło
a
, zatrzyma się. Dziwne.echo -n
zdecydowanie nie jest przenośny. Jeśli pierwszym operandem jest -n lub jeśli którykolwiek z operandów zawiera znak ukośnika odwrotnego ('\'), wyniki są zdefiniowane w implementacji. Używanie echa do wszystkiego innego niż dosłowny tekst bez żadnych przełączników nie jest przenośne. pubs.opengroup.org/onlinepubs/009604599/utilities/echo.htmlRuby 1.9 / tylko Windows / (
354 337 355346 bajtów)Gra na płycie 20x40 w konsoli Windows. Wynik wyświetlany jest pod tablicą. Użyj,
WASD
aby kontrolować węża, dowolny inny klawisz, aby wyjść (na siłę!). Edytuj czas snu na końcu linii 5, aby kontrolować prędkość. (Lub uratuj 10 postaci i spraw, że prawie nie da się go odtworzyć, całkowicie usuwając sen!)Funkcja bonusowa: losowo nie uruchamia się (gdy początkowy element jest generowany w lokalizacji węża).
Potrzebowałem ~ 100 znaków, aby obejść brak nieblokującego getchara. Najwyraźniej Ruby 1.9.3 zawiera bibliotekę „io / console”, która zaoszczędziłaby mniej więcej połowę z nich. To rozwiązanie jest specyficzne dla systemu Windows. Istnieją opublikowane rozwiązania pozwalające robić to samo w systemach * nix, ale nie testowałem ich w celu porównania liczby znaków.
Edytować:
Musiałem dodać 18 bajtów, gdy zdałem sobie sprawę, że ogon rośnie tylko po jedzeniu, a nie po każdym kroku.
Edycja 2: (Prawdopodobnie) naprawiono problem awarii, zapisywano 9 bajtów, ograniczając się do jednego elementu żywności.
źródło
9.times{}
, oszczędzając 9 znaków.Applesoft Basic - 478 (462)
To był mój pierwszy kod golfowy, ale został napisany w 1989 roku i głównie implementuje grę w węża zgodnie z żądaniami (ale bez jedzenia, węże ciągle rosną, i to właściwie dwóch graczy, a nie jeden), używając tylko dwóch linii Applesoft Basic.
W tym czasie odbyło się wiele dwuliniowych konkursów programowych, na przykład w czasopiśmie dr Dobbs. Spędziłem 6 miesięcy, zastanawiając się, jak dopasować to do dwóch linii, które mają limit 255 znaków (i tylko jedną gałąź)
Więcej informacji: http://davesource.com/Projects/SpeedWaller/
Wpisany program ma dokładnie dwie linie:
Lista po sformatowaniu wygląda następująco:
Ta gra jest naprawdę dwóch graczy i zawiera „instrukcje” u dołu strony przedstawiające klucze, a także licznik, dzięki czemu można zobaczyć, ile kroków przeżyłeś. Ma 478 znaków, 16 z nich to instrukcje i dane wyjściowe licznika, więc 462, jeśli chcesz je ogolić.
źródło
C # .NET Framework 4.7.2 Konsola (
24562440242424082052197317471686 bajtów)To było zabawne, ale naprawdę musiałem pomyśleć, jakie zmienne są, ponieważ są one tylko jedną literą.
Niektóre zrzuty ekranu:
Dwójkowy: https://github.com/wooden-utensil/snakeCodeGolf/releases/tag/v1.0.0.0
Repozytorium GitHub: https://github.com/wooden-utensil/snakeCodeGolf
Dziennik zmian: https://github.com/wooden-utensil/snakeCodeGolf/releases
źródło
Console.Write("Score:"+l);Console.WriteLine()
->Console.WriteLine("Score:"+l)
(int X,int Y)d; ...; d=(0,-1)
? To może zaoszczędzić bajty. Nie rozumiem też, dlaczego robiszVector2 d;Vector2 c;Vector2 a;
zamiastVector2 d,c,a
. Myślę, że możesz również przechowywać funkcję Console.SetCursorPosition jakoAction<...>
zmienną jednoliterową. Możesz odjąć DateTime za pomocą operatora -. Możesz także deklarować zmienne pętlowe globalnie i po prostu je wyzerować w razie potrzeby, bez deklarowania.1>0
lub zapisaćtrue
w zmiennej zamiast słowa kluczowego. Możesz być w stanie użyć chwalebnego operatora -> w pętlach. WDateTime b = DateTime.Now
częścib
może byćvar
. Możesz lub możesz nie być w stanie zapisać niektórych bajtówdynamic
(często pozwala łączyć deklaracje o różnych typach).m.write(String)
do niego własny jedna litera długo funkcja prawdopodobnie zaoszczędzić mnóstwob.width
ib.height
wiele z nich można prawdopodobnie zapisać w innym lokalnym var o nazwie 1 literaPython 3-644
Nie rezygnuje czysto. Kawałek może zniknąć, jeśli odrodzi się na wężu.
źródło
Bash (zbyt wiele znaków: ok. 1522)
źródło