Le défi est de créer le jeu Snake classique en utilisant le moins d'octets possible.
Voici les prérequis:
- Le jeu doit être implémenté dans une disposition en 2 dimensions typique. Le serpent devrait pouvoir grandir de manière significative dans les limites de la carte (cela signifie vraiment, ne faites pas votre carte trop petite, utilisez votre discrétion ici).
- Un utilisateur peut déplacer le serpent à l'aide des clés de votre choix, cependant, le serpent ne peut pas se replier sur lui-même (par exemple, s'il va vers l'ouest, il ne peut pas aller vers l'est sans aller d'abord au nord ou au sud). Un serpent doit pouvoir voyager dans les 4 directions: haut, bas, gauche, droite (Nord, Sud, Ouest, Est).
- Le serpent commence à la longueur 1, chaque fois qu'il mange un objet "alimentaire", il grandit de +1
- Les objets alimentaires sont placés au hasard dans des endroits autres que ceux occupés par le serpent
- Si le serpent se frappe ou frappe un mur, le jeu est terminé
- Une fois la partie terminée, le littéral "Score: [score]" s'affiche où [score] est le nombre de denrées alimentaires consommées pendant la partie. Ainsi, par exemple, si le serpent a mangé 4 "aliments" (et a donc une longueur de 5) à la fin du jeu, "Score: 4" sera imprimé.
- Aucun algorithme de compression à moins qu'ils ne soient explicitement définis dans votre code.
Voici ma solution, 908 octets, 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