Ascii Pong
La sfida è ricreare il classico gioco "pong" in caratteri ASCII nel codice più breve possibile.
Requisiti / specifiche
- Lo "schermo" dovrebbe contenere 45x25 caratteri.
- Lo spazio bianco dovrebbe in realtà essere spazio bianco.
- I paddle dovrebbero essere 9 uguali:
=========
e dovrebbero essere nella riga più in alto e più in basso (so che l'originale viene riprodotto fianco a fianco invece che dall'alto verso il basso, ma penso che questo funzioni meglio per ascii pong ). - La palla può essere minuscola o maiuscola
o
o zero. - Due pulsanti di input di qualsiasi tipo (va bene se l'utente preme un tasto che fa apparire una lettera nell'input, va bene lo stesso) per spostare la paletta del giocatore a destra e sinistra di uno o due caratteri alla volta.
- La palla deve rimbalzare all'angolazione appropriata dopo aver colpito una paletta o un muro (suggerimento: annulla il valore della differenza x o y).
- Il punteggio deve essere visualizzato da qualche parte nell'output. Il punteggio è quante volte il giocatore colpisce con successo la palla.
- Se la palla manca la paletta del giocatore, termina il programma.
- Dovrebbe esserci una sorta di AI (anche se la paletta dell'IA corrisponde solo al valore x della palla).
- La palla non può viaggiare in linea retta in verticale o in orizzontale.
La schermata iniziale / il primo fotogramma dovrebbe essere simile al seguente:
=========
o
=========
score: 0
Punteggio Questo è code-golf , quindi vince il codice più corto ... tuttavia, ci sono alcuni bonus per ridurre il conteggio dei personaggi:
- -30 caratteri: cambia la traiettoria della palla a seconda di dove colpisce sulla paletta
- -10 personaggi: velocizza il gioco nel tempo
- -20 caratteri: rende l'IA battibile
- -20 personaggi: evita qualsiasi situazione in cui il giocatore rimane fermo e il gioco continua per sempre senza vincere o perdere (causato da certe traiettorie e schemi di intelligenza artificiale)
- -20 personaggi: fai in modo che la palla inizi a muoversi su una traiettoria (semi) casuale
- -25 caratteri: aggiungi un'opzione di ripristino
Ecco un esempio senza golf senza bonus in 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>
Che i giochi inizino!