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
Réponses:
Ruby 1.9 + SDL (
341324316)Voici une première tentative de version Ruby à l'aide de la bibliothèque SDL. Je peux enregistrer 6 caractères si je suis autorisé à charger la bibliothèque SDL à l'aide
-rsdl
de la ligne de commande au lieu de l'instruction require.Les segments de serpent et les morceaux de nourriture sont représentés en pixels noirs, la taille de la grille est actuellement de 32 * 32. Vous pouvez contrôler avec les touches fléchées (ou n'importe quelle touche vraiment, le mod de code clé 4 indexe le tableau de direction [GAUCHE, HAUT, BAS, DROITE]). Je pense qu'il y a certainement place à amélioration ici, en particulier dans la déclaration IF de vérification de la mort.
J'ai considérablement amélioré cela par rapport à la version précédente, j'espère que cela correspond plus à l'esprit de la question maintenant.
Il y a une chose que je dois corriger pour me conformer à la spécification, c'est que la nourriture peut actuellement apparaître à l'intérieur de la queue.Fixé!Imprime le score sur stdout une fois le jeu terminé.
la source
Java,
23432239Pas exactement concis, mais je pense que cela répond à toutes les exigences.
Classe de serpent
Classe de conseil
Capture d'écran
Commentaire
Il y a quelque temps, j'ai visité un site Web appelé zetcode qui fournissait des didacticiels pour créer des jeux 2D classiques en Java. Le code fourni est fortement influencé par le tutoriel fourni pour le jeu Snake ... Je pense qu'à ce moment-là, je viens de commencer à coder des jeux classiques et j'ai suivi le tutoriel jusqu'à un "T".
Je ferai une modification plus tard et ajouterai un lien vers un exécutable afin que les gens puissent jouer au jeu.
MODIFICATIONS
la source
Bash:
537533507 caractèresComme il utilise les
$COLUMNS
et$LINES
variables shell, il doit être exécuté source:. snake.sh
. Le serpent peut être contrôlé avec les touches w/ a/ s/ d.Je sais, il peut être facilement réduit à 493 caractères en utilisant
clear
pour effacer l'écran, mais je préfère le garder purbash
, sans utiliser aucun outil externe.la source
Python 2.7:
869816818817816 CaractèresJ'ai piraté cela ensemble au cours des dernières heures. Il devrait répondre aux exigences et est plus court de quelques caractères que la solution de mjgpy3 (J'ai essayé dur, mais je n'ai pas pu le faire beaucoup plus court. Maintenant, je suis fatigué). Étonnamment, l'utilisation d'une bibliothèque de développement de jeux comme pygame n'a pas raccourci le serpent python. Les suggestions et astuces pour le raccourcir sont très appréciées. J'espère que ce n'est pas trop cryptique.
Voici le résultat:
EDIT: je pourrais le réduire à 816 octets, yay! :) Correction du score
EDIT2: Collé la mauvaise version accidentellement
Voici une version commentée:
la source