Ascii Pong
Tantangannya adalah membuat ulang game klasik "pong" dalam karakter ASCII dengan kode sesingkat mungkin.
Persyaratan / spesifikasi
- "Layar" harus 45x25 karakter.
- Ruang putih sebenarnya harus ruang putih.
- Dayung harus 9 sama dengan tanda-tanda:
=========
dan harus di baris paling atas dan paling bawah (saya tahu aslinya dimainkan dari sisi ke sisi, bukan dari atas ke bawah, tapi saya pikir ini bekerja lebih baik untuk ascii pong ). - Bola bisa menjadi huruf kecil atau huruf besar
o
atau nol. - Dua tombol input apa pun (baik-baik saja jika pengguna menekan tombol yang membuat huruf muncul di input, itu juga baik-baik saja) untuk memindahkan dayung pemain ke kiri dan kanan satu atau dua karakter sekaligus.
- Bola harus memantul pada sudut yang tepat saat memukul dayung atau dinding (petunjuk: meniadakan nilai perbedaan x atau y).
- Skor harus ditampilkan di suatu tempat di output. Skornya adalah berapa kali pemain berhasil mengenai bola.
- Jika bola melewati dayung pemain, hentikan programnya.
- Harus ada beberapa jenis AI (bahkan jika dayung AI hanya cocok nilai x bola).
- Bola tidak dapat melakukan perjalanan dalam garis lurus secara vertikal atau horizontal.
Layar mulai / bingkai pertama akan terlihat seperti ini:
=========
o
=========
score: 0
Skor Ini adalah kode-golf , jadi kode terpendek menang ... namun, ada beberapa bonus untuk mengurangi jumlah karakter Anda:
- -30 karakter: Ubah lintasan bola tergantung di mana bola itu mengenai dayungnya
- -10 karakter: Buat game lebih cepat dari waktu ke waktu
- -20 karakter: Membuat AI beatable
- -20 karakter: Hindari situasi di mana pemain tetap diam dan permainan berlangsung selamanya tanpa menang atau kalah (disebabkan oleh lintasan tertentu dan pola AI)
- -20 karakter: Buat bola mulai bergerak pada lintasan acak (semi-)
- -25 karakter: Tambahkan opsi reset
Ini adalah contoh un-golfed tanpa bonus dalam 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>
Biarkan game dimulai!
3
Oke, bisakah seseorang setidaknya menjelaskan mengapa mereka menurunkan ini? Saya benar-benar ingin tahu karena saya pikir ini akan menyenangkan tetapi saya tidak punya banyak pengalaman.
—
Eric Vincent
Mencetak hal-hal ASCII tidak apa-apa tetapi dengan interaksi keyboard kita harus membangun seluruh aplikasi. Jenis-jenis tantangan itu disukai karena banyak bahasa tidak mendukung saya / o seperti itu. Menerapkan AI, fisika. Hampir seperti aplikasi skala penuh. Jika Anda melihat tantangan lain, mereka memiliki satu tugas yang mengambil input (atau tidak) dan menghasilkan output yang relevan. Menambahkan AI, fisika, dan keyboard knteraction hanya cara untuk banyak tantangan
—
Downgoat
@vihan AI untuk pong sangat sederhana, hanya harus mengikuti nilai x bola. Bahkan membuatnya beatable tidak terlalu sulit, cukup batasi kecepatan dayungnya. Satu-satunya masalah nyata dengan konsep ini adalah interaksi keyboard, yang dapat dikelola dalam berbagai bahasa yang masuk akal. Namun briefnya agak kabur dan terbuka (mengingat bahwa kami adalah pengikat untuk ketidakjelasan dan keadilan di sekitar sini), dan sejumlah besar bonus tidak membantu itu.
—
Level River St
Interaksi keyboard harus diselesaikan dalam (Re) Menerapkan Tetris juga, tapi itu tidak mengurangi popularitas tugas. (Ya, saya tahu, itu sebenarnya kontes popularitas , ini bukan.) Satu-satunya hal yang menurut saya mengganggu, adalah jumlah bonus. Tapi tentu tidak harus sesuai dengan seleraku.
—
manatwork