Spiele machen Spaß
Dieser Codegolf hier hat so viel Spaß gemacht, dass ich eine Version für andere klassische Spiele mit ähnlicher Komplexität erstellen musste. Der kürzeste Weg, ein einfaches Space Invaders-Spiel in Python zu erstellen
Versuchen Sie diesmal jedoch, das klassische "Snake" -Spiel nachzubilden, in dem Sie als kleine Figur beginnen und sich ständig dem Sammeln von Stücken widmen, um Ihre Punktzahl zu erhöhen. Wenn du ein Stück sammelst, wächst dein Schwanz, der dem Weg folgt, den du gemacht hast. Das Ziel ist es, möglichst lange zu halten, ohne in deinen eigenen Schwanz oder in die Wände zu krachen
Qualifikationen:
- Du, die Charaktere, aus denen der Schwanz besteht, die Wände und die Teile, die du sammelst, sollten alle unterschiedliche Charaktere sein
- Zeigen Sie ein HUD mit der Partitur. Die Punktzahl erhöht sich um 1 Punkt für jedes Stück, das Sie sammeln
- Der Spieler verliert, wenn er mit seinem eigenen Schwanz oder der Mauer kollidiert
- Unmittelbar nach dem Einsammeln einer Figur erscheint eine Figur in einem zufälligen Bereich, ganz zu schweigen vom Beginn des Spiels
- Die Geschwindigkeit des Spiels spielt keine Rolle, solange es konsistent ist
Die 'Zellen' sollten 2x1 Zeichen sein, da die Höhe der Blockzeichen ~ das Doppelte der Breite beträgt.Kann 1x1 sein, weil 2x1 einfach hässlich ist und ich nicht wirklich daran gedacht habe- Die Tasten zum Ändern der Richtung sollten
awsd
links, oben, unten bzw. rechts sein - Die Startrichtung sollte immer oben sein
- Sie müssen die Ränder der Wand zeigen. Die Partitur kann die Wand überlappen
Der kürzeste Code, der die oben genannten Kriterien erfüllt, gewinnt. Imaginäre Bonuspunkte für Kreativität
awsd
und diestarting direction should always be up
AnforderungenM-x snake
würde funktionierenM-: (progn(define-key snake-mode-map"a"'snake-move-left)...(setq snake-initial-velocity-x 0 snake-initial-velocity-y 1)(snake))
würde dann den Trick machen.Antworten:
JavaScript (
553512 Byte)Link zur spielbaren Version
Ich habe zuerst versucht, die Ausgabe auf die echte Konsole zu übertragen (mit
console.log
undconsole.clear
), aber sie flackerte zu stark, sodass ich sie in konsolenähnliches HTML umwandelte. Damit wird es funktionieren:Ich habe es auch zuerst mit 2x1-Zellen implementiert, aber es sah nur schlechter aus als 1x1. Das wäre allerdings eine kleine Änderung.
Verwendet
awsd
Tasten auf der Tastatur.Aktualisieren:
Ich konnte es auf 512 (genau 0x200) Bytes reduzieren, indem ich die Schwanzsuche verbesserte und etwas mehr Magie ausübte.
Sie erhalten jetzt 2 Punkte, wenn ein Teil in Ihrem Schwanz erscheint (ein Feature). Ich habe auch die Überlappung behoben, wenn sich die Schlange selbst beißt.
quelle
awsd
x86-Maschinencode (128 Byte)
Ähnlich wie bei meinem Beitrag zur Erstellung eines Mandlebrot-Fraktals habe ich ein Produkt für das Schlangenspiel in 128 Bytes geschrieben. Es wird den Anforderungen der Herausforderung nicht vollständig gerecht (es bewegt sich nach rechts, es werden nicht alle Wände gezeichnet), aber ich poste es, weil ich es für eine interessante und kreative Lösung halte. Die Punktzahl wird binär rechts angezeigt, die Pfeiltasten steuern die Bewegungsrichtung, das „Essen“ wird nach dem Zufallsprinzip abgelegt und endet, wenn Sie sich selbst, die Wand oder den Bildschirmrand treffen.
Link für ausführbare Dateien und Quellcode
Auch in Bezug auf den früheren Kommentar, ob Dosbox betrügt, halte ich es für völlig akzeptabel, solange es sich in einem textbasierten Anzeigemodus befindet, da es sich dann nur um ein Dos-Terminal handelt.
quelle
16 Bit 8086
526 Bytes / 390 Bytes
Dekodieren Sie dies mit einem Base64-Dekoder und nennen Sie es "snake.com", dann führen Sie es an der Windows-Eingabeaufforderung aus. Getestet unter WinXP müssen Sie möglicherweise DosBox verwenden, um den richtigen Videomodus zu erhalten. Steuertasten sind "wasd" und Leerzeichen zum Verlassen. Drücke 'w' um zu starten.
Hier ist eine Zeichenmodus-Version, die 390 Byte lang ist:
Dieser Charaktermodus ist drei Bytes länger (aber die Schlange ist besser):
quelle
Shell / sh, 578 Zeichen
Ich habe versucht, POSIX-konform zu sein (so viel wie möglich portabel zu sein und Bashismen zu vermeiden, auch der Zufallsgenerator benötigt / proc nicht). Sie können es z. B. in Ihrem nativen Terminal oder über eine SSH-Sitzung abspielen: mit 'dash -c ./snake' ausführen. Es gibt auch eine nicht fehlerbehaftete / lesbare Variante in ~ 2800 Bytes, die hier zu sehen ist .
Einige Anmerkungen: Shell-Scripting ist nicht zum Codieren von Spielen geeignet. 8-)
quelle
a
, stoppt sie. Seltsam.echo -n
ist definitiv nicht tragbar. Wenn der erste Operand -n ist oder wenn einer der Operanden einen Backslash ('\') enthält, sind die Ergebnisse implementierungsdefiniert. Die Verwendung von Echo für andere als wörtliche Texte ohne Schalter ist nicht übertragbar. pubs.opengroup.org/onlinepubs/009604599/utilities/echo.htmlRuby 1.9 / Nur Windows / (
354 337 355346 Byte)Spielt in einer 20x40-Tafel in der Windows-Konsole. Die Punktzahl wird unter der Tafel angezeigt. Verwenden Sie
WASD
, um die Schlange zu steuern, oder eine andere Taste, um sie zu verlassen (mit Gewalt!). Bearbeiten Sie die Ruhezeit am Ende von Zeile 5, um die Geschwindigkeit zu steuern. (Oder speichere 10 Zeichen und mache es fast unspielbar, indem du den Schlaf komplett entfernst!)Bonus-Funktion: Start versagt nach dem Zufallsprinzip (wenn das erste Teil an der Position der Schlange generiert wird).
Ich brauchte ~ 100 Zeichen, um das Fehlen eines nicht blockierenden Getchar zu umgehen. Anscheinend enthält Ruby 1.9.3 eine "io / console" -Bibliothek, die ungefähr die Hälfte davon gespeichert hätte. Und diese Lösung ist Windows-spezifisch. Es gibt veröffentlichte Lösungen für die gleichen Aufgaben in * nix-Systemen, aber ich habe sie nicht getestet, um die Anzahl der Zeichen zu vergleichen.
Bearbeiten:
Musste 18 Bytes hinzufügen, nachdem mir klar wurde, dass der Schwanz erst nach dem Essen wächst, nicht nach jedem Schritt.
Edit 2: (Möglicherweise) Absturzproblem behoben, die 9 Bytes durch Beschränkung auf ein Lebensmittelelement gespeichert.
quelle
9.times{}
und 9 Zeichen sparen.Applesoft Basic - 478 (462)
Dies war mein allererster Code Golf, aber er wurde 1989 geschrieben und implementiert meistens das gewünschte Schlangenspiel (aber ohne Futter wachsen die Schlangen einfach kontinuierlich und es sind eigentlich zwei Spieler, nicht einer) mit nur zwei Zeilen Applesoft Basic.
Zu dieser Zeit gab es eine Reihe von zweizeiligen Programmwettbewerben, wie zum Beispiel in der Zeitschrift Dr. Dobbs. Ich verbrachte 6 Monate damit, herauszufinden, wie dies in zwei Zeilen mit einer Begrenzung von 255 Zeichen (und nur einer Verzweigung) eingepasst werden kann.
Weitere Informationen unter: http://davesource.com/Projects/SpeedWaller/
Das eingegebene Programm besteht aus genau zwei Zeilen:
Wenn die Liste formatiert ist, sieht sie folgendermaßen aus:
Das Spiel besteht eigentlich aus zwei Spielern und enthält "Anweisungen" am unteren Rand der Seite mit den Schlüsseln sowie einen Zähler, damit Sie sehen können, wie viele Schritte Sie überlebt haben. Es sind 478 Zeichen, davon sind 16 die Anweisungen und die Zählerausgabe, also 462, wenn Sie diese abschneiden möchten.
quelle
C # .NET Framework 4.7.2 Console (
2.4562.4402.4242.4082.0521.9731.7471.686 Byte)Das hat Spaß gemacht, aber ich musste mir wirklich überlegen, welche Variablen was sind, denn sie sind nur ein Buchstabe.
Einige Screenshots:
Binär: https://github.com/wooden-utensil/snakeCodeGolf/releases/tag/v1.0.0.0
GitHub-Repository: https://github.com/wooden-utensil/snakeCodeGolf
Änderungsprotokoll: https://github.com/wooden-utensil/snakeCodeGolf/releases
quelle
Console.Write("Score:"+l);Console.WriteLine()
->Console.WriteLine("Score:"+l)
(int X,int Y)d; ...; d=(0,-1)
? Das könnte Bytes sparen. Ich kann auch nicht sehen, warum SieVector2 d;Vector2 c;Vector2 a;
stattdessen tunVector2 d,c,a
. Ich denke, Sie können die Console.SetCursorPosition-Funktion auch alsAction<...>
Variable mit einem Buchstaben speichern . Sie können DateTime mit dem Operator - subtrahieren. Sie können Schleifenvariablen auch global deklarieren und sie bei Bedarf einfach auf Null setzen, ohne sie zu deklarieren.1>0
oder in dieser speicherntrue
. Möglicherweise können Sie den glorreichen Operator -> in den Schleifen verwenden. In demDateTime b = DateTime.Now
Teilb
kann seinvar
. Möglicherweise könnendynamic
Sie mithilfe von einige Bytes speichern oder nicht (häufig können Sie Deklarationen mit anderen Typen zusammenführen).m.write(String)
Sie die Ein-Buchstaben-b.width
undb.height
eine Menge, die wahrscheinlich auf einem anderen lokalen var mit dem Namen 1 gespeichert werden könntenPython 3 - 644
Beendet sich nicht sauber. Das Teil könnte verschwinden, wenn es auf der Schlange erscheint.
quelle
Bash (zu viele Zeichen: ca. 1522)
quelle