Ascii Pong
Die Herausforderung besteht darin, das klassische Spiel "Pong" in ASCII-Zeichen in kürzestem Code nachzubilden.
Anforderungen / Spezifikationen
- Der "Bildschirm" sollte 45x25 Zeichen groß sein.
- Leerraum sollte eigentlich Leerraum sein.
- Die Paddel sollten 9 Gleichheitszeichen haben:
=========
und sollten sich in der obersten und untersten Reihe befinden (ich weiß, dass das Original von Seite zu Seite statt von oben nach unten gespielt wird, aber ich denke, dass dies für ASCII Pong besser funktioniert ). - Der Ball kann ein Klein- oder Großbuchstabe
o
oder eine Null sein. - Zwei Eingabetasten jeglicher Art (es ist in Ordnung, wenn der Benutzer eine Taste drückt, mit der ein Buchstabe in der Eingabe angezeigt wird, das ist auch in Ordnung), um das Paddel des Spielers jeweils um ein oder zwei Zeichen nach links und rechts zu bewegen.
- Der Ball muss beim Auftreffen auf ein Paddel oder eine Wand im richtigen Winkel abprallen (Hinweis: Negieren Sie den x- oder y-Differenzwert).
- Die Partitur sollte irgendwo in der Ausgabe angezeigt werden. Die Punktzahl gibt an, wie oft der Spieler den Ball erfolgreich schlägt.
- Wenn der Ball das Paddel des Spielers verfehlt, beenden Sie das Programm.
- Es sollte einige Art von AI (auch wenn die Paddel der KI nur der x - Wert des Balls übereinstimmt).
- Der Ball kann sich weder vertikal noch horizontal in einer geraden Linie bewegen.
Der Startbildschirm / das erste Bild sollte ungefähr so aussehen:
=========
o
=========
score: 0
Wertung Dies ist Code-Golf , also gewinnt der kürzeste Code ... es gibt jedoch einige Boni, um die Anzahl Ihrer Charaktere zu verringern:
- -30 Zeichen: Ändert die Flugbahn des Balls je nachdem, wo er auf das Paddel trifft
- -10 Zeichen: Beschleunigen Sie das Spiel im Laufe der Zeit
- -20 Zeichen: Mach die KI schlagbar
- -20 Zeichen: Vermeiden Sie Situationen, in denen der Spieler still bleibt und das Spiel für immer weitergeht, ohne zu gewinnen oder zu verlieren (verursacht durch bestimmte Flugbahnen und KI-Muster).
- -20 Zeichen: Lassen Sie den Ball sich auf einer (halb-) zufälligen Flugbahn bewegen
- -25 Zeichen: Fügen Sie eine Rücksetzoption hinzu
Hier ist ein Beispiel ohne Golf ohne Boni 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>
Lasst die Spiele beginnen!