Les jeux sont amusants
ce codegolf ici était si amusant que j'ai dû faire une version pour d'autres jeux classiques de complexité similaire. Le moyen le plus court de créer un jeu Space Invaders de base en Python
Cette fois, cependant, essayez de recréer le jeu classique "Snake", dans lequel vous commencez comme une petite forme, en vous déplaçant constamment pour collecter des pièces pour augmenter votre score. Lorsque vous collectez un morceau, votre «queue» grandit, qui suit le chemin que vous avez tracé. L'objectif est de durer le plus longtemps sans s'écraser dans votre propre queue ou dans les murs
Qualifications:
- Vous, les personnages qui composent la queue, les murs et les pièces que vous collectez doivent tous être des personnages différents
- montrer un HUD avec le score. Le score augmente de 1 point pour chaque pièce collectée
- Le joueur perd lorsqu'il entre en collision avec sa propre queue ou le mur
- une pièce apparaît dans une zone aléatoire immédiatement après la collecte d'une pièce, sans parler du début de la partie
- La vitesse du jeu n'a pas d'importance, tant qu'elle est cohérente
Les 'cellules' devraient être 2x1 caractères, car la hauteur des caractères de bloc est ~ le double de la largeurPeut être 1x1, parce que 2x1 est juste moche et je n'y ai pas vraiment pensé- Les touches pour changer la direction doivent être respectivement
awsd
gauche, haut, bas, droite - la direction de départ doit toujours être vers le haut
- Vous devez montrer les bords du mur. Le score peut chevaucher le mur
Le code le plus court répondant aux critères ci-dessus l'emporte. Points bonus imaginaires pour la créativité
awsd
et lesstarting direction should always be up
exigences,M-x snake
cela fonctionneraitM-: (progn(define-key snake-mode-map"a"'snake-move-left)...(setq snake-initial-velocity-x 0 snake-initial-velocity-y 1)(snake))
ferait alors l'affaire.Réponses:
JavaScript (
553512 octets)Lien vers la version jouable
J'ai d'abord essayé de le faire sortir sur la vraie console (avec
console.log
etconsole.clear
), mais il scintillait trop, alors je l'ai mis en HTML de type console. Cela fonctionnera avec ceci:Je l'ai également implémenté avec des cellules 2x1 en premier, mais cela semblait pire que 1x1. Ce serait cependant un changement mineur.
Les usages
awsd
touches du clavier.Mise à jour:
J'ai pu le réduire à 512 (exactement 0x200) octets en améliorant la recherche de queue et en faisant plus de magie.
Vous obtenez maintenant 2 points lorsqu'un morceau apparaît dans votre queue (c'est une caractéristique). J'ai également corrigé le chevauchement lorsque le serpent se mord.
la source
awsd
Code machine x86 (128 octets)
Tout comme ma soumission pour Générer une fractale de Mandlebrot , j'ai écrit une prod pour le jeu de serpent en 128 octets. Il ne répond pas pleinement aux exigences du défi (il commence à bouger à droite, tous les murs ne sont pas dessinés), mais je le poste car je pense que c'est une solution intéressante et créative. Le score est affiché en binaire à droite, les touches fléchées contrôlent la direction du mouvement, la `` nourriture '' est lâchée au hasard, et elle se termine si vous vous frappez, le mur ou le bord de l'écran.
Lien pour l'exécutable et le code source
En outre, en ce qui concerne le commentaire précédent sur la triche de Dosbox, je pense parfaitement acceptable tant qu'il est en mode d'affichage textuel, car il ne s'agit alors que d'un terminal DOS.
la source
16 bits 8086
526 octets / 390 octets
Décodez-le à l'aide d' un décodeur Base64 et appelez-le "snake.com", puis exécutez-le à partir de l'invite de commande Windows. Testé sur WinXP, vous devrez peut-être utiliser DosBox pour obtenir le bon mode vidéo. Les touches de contrôle sont «wasd» et de l'espace pour quitter. Appuyez sur 'w' pour commencer.
Voici une version en mode caractère longue de 390 octets:
Ce personnage modifie ses trois octets de plus (mais le serpent est meilleur):
la source
shell / sh, 578 caractères
J'ai essayé d'être compatible POSIX (étant le plus portable possible et évitant les bashismes, même le générateur de nombres aléatoires n'a pas besoin de / proc). Vous pouvez par exemple le jouer dans votre terminal natif ou via une session SSH: exécutez avec 'dash -c ./snake' Il existe également une variante non lisible / lisible en ~ 2800 octets, qui peut être vue ici .
Quelques remarques: le shell-scripting n'est pas adapté au codage des jeux 8-)
la source
a
il s'arrête. Bizarre.echo -n
n'est certainement pas portable. Si le premier opérande est -n, ou si l'un des opérandes contient une barre oblique inverse ('\'), les résultats sont définis par l'implémentation. L'utilisation d'écho pour autre chose que du texte littéral sans aucun commutateur n'est pas portable. pubs.opengroup.org/onlinepubs/009604599/utilities/echo.htmlRuby 1.9 / Windows uniquement / (
354 337 355346 octets)Joue dans un tableau 20x40 dans la console Windows. Le score est affiché sous le tableau. Utilisez
WASD
pour contrôler le serpent, n'importe quelle autre touche pour sortir (avec force!). Modifiez le temps de veille à la fin de la ligne 5 pour contrôler la vitesse. (Ou enregistrez 10 caractères et rendez-les presque illisibles en supprimant complètement le sommeil!)Fonction bonus: ne démarre pas au hasard (lorsque la pièce initiale est générée à l'emplacement du serpent).
J'avais besoin de ~ 100 caractères pour contourner l'absence d'un getchar non bloquant. Apparemment, Ruby 1.9.3 comprend une bibliothèque "io / console" qui aurait sauvé environ la moitié de celles-ci. Et cette solution est spécifique à Windows. Il existe des solutions publiées pour faire le même type de chose dans les systèmes * nix, mais je ne les ai pas testés pour comparer le nombre de caractères.
Modifier:
J'ai dû ajouter 18 octets après avoir réalisé que la queue ne pousse qu'après avoir mangé, pas après chaque étape.
Edit 2: (éventuellement) correction d'un problème de plantage, sauvé les 9 octets en se limitant à un seul aliment.
la source
9.times{}
, économisant 9 caractères.Applesoft Basic - 478 (462)
C'était mon tout premier golf de code, mais il a été écrit en 1989, et il implémente principalement le jeu de serpent comme demandé (mais sans nourriture, les serpents grandissent continuellement, et c'est en fait deux joueurs, pas un) en utilisant seulement deux lignes de Applesoft Basic.
Il y avait un certain nombre de concours de programme en deux temps à l'époque, comme dans le journal du Dr Dobbs. J'ai passé 6 mois à trouver comment adapter cela en deux lignes qui ont une limite de 255 caractères (et une seule branche)
Plus d'informations sur: http://davesource.com/Projects/SpeedWaller/
Le programme tapé est exactement deux lignes:
La liste une fois formatée ressemble à ceci:
Le jeu est en fait à deux joueurs et comprend des "instructions" en bas de la page montrant les clés ainsi qu'un compteur afin que vous puissiez voir combien d'étapes vous avez survécu. C'est 478 caractères, 16 d'entre eux sont les instructions et la sortie du compteur, donc 462 si vous voulez les raser.
la source
Console C # .NET Framework 4.7.2 (
2,4562,4402,4242,4082,0521,9731,7471,686 octets)C'était amusant, mais je devais vraiment penser à quelles variables étaient quoi, car elles ne sont qu'une seule lettre.
Quelques captures d'écran:
Binaire: https://github.com/wooden-utensil/snakeCodeGolf/releases/tag/v1.0.0.0
Référentiel GitHub: https://github.com/wooden-utensil/snakeCodeGolf
Journal des modifications: https://github.com/wooden-utensil/snakeCodeGolf/releases
la source
Console.Write("Score:"+l);Console.WriteLine()
->Console.WriteLine("Score:"+l)
(int X,int Y)d; ...; d=(0,-1)
? Cela pourrait économiser des octets. Je ne vois pas non plus pourquoi tu faisVector2 d;Vector2 c;Vector2 a;
au lieu deVector2 d,c,a
. Je pense que vous pouvez également stocker la fonction Console.SetCursorPosition en tant queAction<...>
variable à une seule lettre. Vous pouvez soustraire DateTime avec l'opérateur -. Vous pouvez également déclarer des variables de boucle globalement et simplement les mettre à zéro en cas de besoin, sans les déclarer.1>0
ou stockertrue
dans une variable au lieu d'utiliser le mot-clé. Vous pourrez peut-être utiliser l'opérateur glorious -> dans les boucles. Dans laDateTime b = DateTime.Now
partie,b
peut êtrevar
. Vous pouvez ou non être en mesure d'enregistrer certains octets à l'aidedynamic
(vous permet souvent de fusionner des déclarations de type différent).m.write(String)
dans sa propre fonction longue d'une lettre économiserait probablement une tonneb.width
etb.height
beaucoup qui pourraient probablement être enregistrés dans une autrePython 3-644
Ne quitte pas proprement. La pièce peut disparaître si elle apparaît sur le serpent.
la source
Bash (trop de caractères: environ 1522)
la source