Die Herausforderung besteht darin, das klassische Snake-Spiel mit möglichst wenigen Bytes zu erstellen.
Hier sind die Anforderungen:
- Das Spiel muss in einem typischen zweidimensionalen Layout implementiert werden. Die Schlange sollte in der Lage sein, innerhalb der Grenzen der Karte erheblich zu wachsen (dies bedeutet wirklich, dass Sie Ihre Karte nicht zu klein machen, verwenden Sie hier Ihre Diskretion).
- Ein Benutzer kann die Schlange mit Schlüsseln Ihrer Wahl bewegen, die Schlange kann sich jedoch nicht selbst verdoppeln (z. B. wenn sie nach Westen geht, kann sie nicht nach Osten gehen, ohne zuerst nach Norden oder Süden zu gehen). Eine Schlange sollte in alle 4 Richtungen reisen können: oben, unten, links, rechts (Nord, Süd, West, Ost).
- Die Schlange beginnt mit der Länge 1 und wächst jedes Mal, wenn sie ein "Nahrungs" -Objekt frisst, um +1 an Länge
- Nahrungsgegenstände werden zufällig an anderen Orten als den von der Schlange besetzten platziert
- Wenn die Schlange sich selbst oder eine Wand trifft, ist das Spiel beendet
- Wenn das Spiel beendet wurde, wird das wörtliche "Ergebnis: [Ergebnis]" angezeigt, wobei [Ergebnis] die Anzahl der während des Spiels verzehrten Lebensmittel ist. Wenn die Schlange beispielsweise am Ende des Spiels 4 "Lebensmittel" gegessen hat (und daher eine Länge von 5 hat), wird "Punktzahl: 4" gedruckt.
- Keine Komprimierungsalgorithmen, es sei denn, sie sind explizit in Ihrem Code definiert.
Hier ist meine Lösung, 908 Bytes, Python 2.7
import random as r
import curses as c
def g(s,w,l):
while 1:
p=[r.randrange(0,w),r.randrange(0,l)]
for l in s:
if l==p:continue
return p
s=[]
d=[0,1]
p=k=n=0
e=100
v={65:[-1,0],66:[1,0],68:[0,-1],67:[0,1]}
z=c.initscr()
w,l=z.getmaxyx()[0],z.getmaxyx()[1]
c.noecho()
z.clear()
x=g(s,w,l)
s.append([w/2,l/2])
z.nodelay(1)
q=lambda h,i:range(h,len(i))
while k!=101:
k=z.getch()
if k in v and not (d[0]==(v[k][0]*-1) and d[1]==(v[k][1]*-1)):d=v[k]
f=[0,0]
for i in q(0,s):
if i == 0:
f=[s[i][0],s[i][1]]
s[i][0]+=d[0]
s[i][1]+=d[1]
else:s[i],f=f,s[i]
if s[0]==x:
n+=1
s.append(f)
x=g(s,w,l)
z.clear()
if s[0][0]>=w or s[0][1]>=l or s[0][0]<0 or s[0][1]<0:break
for i in q(1,s):
if s[0] == s[i]: k = 101
for i in q(0,s):z.addch(s[i][0],s[i][1],"X")
z.addch(x[0],x[1],"O")
z.move(0,0)
z.refresh()
if d[1]!=0:c.napms(e/2)
else:c.napms(e)
c.endwin()
print 'Score: %s'%n
Antworten:
Ruby 1.9 + SDL (
341324316)Hier ist ein erster Versuch einer Ruby-Version unter Verwendung der SDL-Bibliothek. Ich kann 6 Zeichen speichern, wenn ich die SDL-Bibliothek
-rsdl
über die Befehlszeile anstelle der require-Anweisung laden darf .Die Schlangensegmente und Lebensmittelstücke werden mit schwarzen Pixeln dargestellt, die Rastergröße beträgt derzeit 32 * 32. Sie können mit den Pfeiltasten steuern (oder mit beliebigen Tasten, der Keycode Mod 4 indiziert das Richtungsarray [LINKS, OBEN, UNTEN, RECHTS]). Ich denke, hier gibt es definitiv Raum für Verbesserungen, insbesondere in der IF-Erklärung zur Todeskontrolle.
Ich habe dies gegenüber der vorherigen Version erheblich verbessert, hoffentlich passt es jetzt besser zum Geist der Frage.
Es gibt eine Sache, die ich korrigieren muss, um der Spezifikation zu entsprechen, nämlich dass Lebensmittel derzeit im Schwanz erscheinen können.Fest!Druckt die Partitur nach Beendigung des Spiels auf stdout.
quelle
Java,
23432239Nicht gerade prägnant, aber ich glaube, es folgt allen Anforderungen.
Schlangenklasse
Board Klasse
Bildschirmfoto
Kommentar
Vor einiger Zeit besuchte ich eine Website namens Zetcode, die einige Tutorials zum Erstellen klassischer 2D-Spiele in Java enthielt . Der bereitgestellte Code ist stark von dem Tutorial beeinflusst , das für das Snake-Spiel bereitgestellt wurde ... Ich glaube, zu diesem Zeitpunkt habe ich gerade angefangen, klassische Spiele zu codieren, und bin dem Tutorial zu einem 'T' gefolgt.
Ich werde später eine Bearbeitung vornehmen und einen Link zu einer ausführbaren Datei hinzufügen, damit die Leute das Spiel spielen können.
EDITS
quelle
Bash:
537533507 ZeichenDa es die Variablen
$COLUMNS
und$LINES
shell verwendet, muss es als Quelle ausgeführt werden :. snake.sh
. Die Schlange kann mit den Tasten w/ a/ s/ gesteuert werden d.Ich weiß, dass es durch
clear
Löschen des Bildschirms leicht auf 493 Zeichen reduziert werden kann , aber ich bevorzuge es, es rein zu haltenbash
, ohne ein externes Werkzeug zu verwenden.quelle
Python 2.7:
869816818817816 ZeichenIch habe das in den letzten Stunden zusammen gehackt. Es sollte die Anforderungen erfüllen und ist ein paar Zeichen kürzer als die Lösung von mjgpy3 (hart ausprobiert, aber nicht viel kürzer. Jetzt bin ich müde). Überraschenderweise hat die Verwendung einer Spieleentwicklungsbibliothek wie Pygame die Python-Schlange nicht viel kürzer gemacht. Vorschläge und Tipps, wie man es kürzer macht, werden sehr geschätzt. Ich hoffe es ist nicht zu kryptisch.
Das ist das Ergebnis:
EDIT: Ich könnte es auf 816 Bytes reduzieren, yay! :) Die Punktzahl wurde korrigiert
EDIT2: Versehentlich die falsche Version eingefügt
Hier ist eine kommentierte Version:
quelle