Ascii Pong
Le défi est de recréer le jeu classique "pong" en caractères ASCII dans le code le plus court possible.
Exigences / spécifications
- L '"écran" doit contenir 45 x 25 caractères.
- L'espace blanc doit en fait être un espace blanc.
- Les palettes doivent avoir 9 signes égaux:
=========
et doivent être sur les rangées les plus hautes et les plus basses (je sais que l'original est joué côte à côte au lieu de haut en bas, mais je pense que cela fonctionne mieux pour ascii pong ). - La balle peut être un minuscule ou un majuscule
o
ou un zéro. - Deux boutons de saisie de toute sorte (c'est bien si l'utilisateur appuie sur une touche qui fait apparaître une lettre dans l'entrée, c'est bien aussi) pour déplacer la palette du joueur à gauche et à droite un ou deux caractères à la fois.
- La balle doit ricocher à l'angle approprié lorsqu'elle frappe une raquette ou un mur (indice: annuler la valeur de différence x ou y).
- Le score doit être affiché quelque part dans la sortie. Le score est le nombre de fois où le joueur frappe le ballon avec succès.
- Si le ballon manque la raquette du joueur, mettez fin au programme.
- Il devrait y avoir une sorte d'IA (même si la palette de l'IA correspond juste à la valeur x de la balle).
- Le ballon ne peut pas voyager en ligne droite verticalement ou horizontalement.
L'écran de démarrage / première image devrait ressembler à ceci:
=========
o
=========
score: 0
Score C'est du golf de code , donc le code le plus court gagne ... cependant, il y a quelques bonus pour diminuer le nombre de vos personnages:
- -30 personnages: changez la trajectoire de la balle en fonction de l'endroit où elle frappe sur la raquette
- -10 personnages: accélérez le jeu au fil du temps
- -20 caractères: rendez l'IA battable
- -20 personnages: évitez toute situation où le joueur reste immobile et le jeu se poursuit indéfiniment sans gagner ni perdre (causé par certaines trajectoires et modèles d'IA)
- -20 caractères: faire bouger la balle sur une trajectoire (semi-) aléatoire
- -25 caractères: ajouter une option de réinitialisation
Voici un exemple sans golf sans bonus en JavaScript:
//init
var x = 22,
y = 12,
xd = Math.random() < 0.5 ? -1 : 1,
yd = 1,
player = opponent = 18,
score = 0,
//interval that runs 10x per second (minus the runtimeof one cycle)
interval = setInterval(function() {
//move ball
x += xd;
y += yd;
//move opponent
opponent = x - 4;
//collision with walls
if(x <= 0 || x >= 44) xd = -xd;
//collision with paddles
if(y == 1) {
if(x >= opponent && x < opponent + 9) yd = -yd;
else {
//you win
clearInterval(interval);
document.body.innerHTML = "You win!<br>Your score was: " + score;
return;
}
}
else if(y == 23) {
if(x >= player && x < player + 9) {
yd = -yd;
score++;
}
else {
//you lose
clearInterval(interval);
document.body.innerHTML = "You lose!<br>Your score was: " + score;
return;
}
}
draw();
}, 100);
function draw() {
var body = document.body;
body.innerHTML = "";
for(var i = 0; i < 25; i++) {
for(var j = 0; j < 45; j++) {
//white space is default
var char = " ";
//ball
if(j == x && i == y) char = "o";
//paddles
if(i === 0) {
if(j >= opponent && j < opponent + 9) char = "=";
}
else if(i == 24) {
if(j >= player && j < player + 9) char = "=";
}
body.innerHTML += char;
}
body.innerHTML += "<br>";
}
body.innerHTML += "score: " + score;
}
//key press listener for left and right movement
window.onkeydown = function() {
if (window.event.keyCode == 37) player -= 2;
else if(window.event.keyCode == 39) player += 2;
};
<body style="font-family: monospace; white-space: pre">
</body>
Que les jeux commencent!