Ascii Pong
El desafío es recrear el clásico juego "pong" en caracteres ASCII en el código más corto posible.
Requisitos / especificaciones
- La "pantalla" debe tener 45x25 caracteres.
- El espacio en blanco debería ser en realidad un espacio en blanco.
- Las paletas deben ser 9 signos iguales:
=========
y deben estar en las filas más altas y más bajas (sé que el original se juega de lado a lado en lugar de arriba a abajo, pero creo que esto funciona mejor para ascii pong ) - La pelota puede ser minúscula o mayúscula
o
o cero. - Dos botones de entrada de cualquier tipo (está bien si el usuario presiona una tecla que hace que aparezca una letra en la entrada, eso también está bien) para mover la paleta del jugador de izquierda a derecha uno o dos caracteres a la vez.
- La pelota necesita rebotar en el ángulo apropiado al golpear una paleta o una pared (pista: negar el valor de diferencia x o y).
- La puntuación debe mostrarse en algún lugar de la salida. El puntaje es cuántas veces el jugador golpea con éxito la pelota.
- Si la pelota pierde la paleta del jugador, finalice el programa.
- Debería haber algún tipo de IA (incluso si la paleta de la IA solo coincide con el valor x de la bola).
- La pelota no puede viajar en línea recta vertical u horizontalmente.
La pantalla de inicio / primer fotograma debería verse así:
=========
o
=========
score: 0
Puntuación Este es el código de golf , por lo que gana el código más corto ... sin embargo, hay algunas bonificaciones para disminuir el recuento de tu personaje:
- -30 caracteres: cambia la trayectoria de la pelota dependiendo de dónde golpea la pala
- -10 personajes: haz que el juego se acelere con el tiempo
- -20 caracteres: haz que la IA sea superable
- -20 caracteres: evita cualquier situación en la que el jugador se quede quieto y el juego continúe para siempre sin ganar o perder (causado por ciertas trayectorias y patrones de IA)
- -20 caracteres: hacer que la pelota comience a moverse en una trayectoria (semi) aleatoria
- -25 caracteres: agregue una opción de reinicio
Aquí hay un ejemplo sin golf sin bonos 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 empiecen los juegos!