พงษ์แอส
ความท้าทายคือการสร้างเกม "พงษ์" คลาสสิกในตัวละคร ASCII ในรหัสที่สั้นที่สุด
ความต้องการ / ข้อกำหนด
- "หน้าจอ" ควรเป็นอักขระ 45x25
- พื้นที่สีขาวควรเป็นพื้นที่สีขาว
- ไม้พายควรมีเครื่องหมายเท่ากับ 9:
=========
และควรอยู่บนแถวบนสุดและล่างสุด (ฉันรู้ว่าต้นฉบับเล่นแบบจากด้านหนึ่งไปอีกด้านหนึ่งแทนที่จะเล่นจากบนลงล่าง แต่ฉันคิดว่าวิธีนี้ใช้ได้ดีกับ ascii pong ) - ลูกบอลอาจเป็นตัวพิมพ์เล็ก
o
หรือตัวใหญ่หรือเป็นศูนย์ก็ได้ - ปุ่มป้อนข้อมูลสองปุ่มทุกชนิด (มันก็ดีถ้าผู้ใช้กดปุ่มที่ทำให้ตัวอักษรปรากฏในอินพุตนั่นก็ดีด้วย) เพื่อย้ายไม้พายของผู้เล่นไปทางซ้ายและขวาหนึ่งหรือสองตัวอักษรในเวลา
- ลูกบอลจำเป็นต้องเด้งออกในมุมที่เหมาะสมเมื่อตีไม้พายหรือผนัง (คำแนะนำ: ลบล้างค่า x หรือ y ที่แตกต่างกัน)
- คะแนนควรแสดงที่ใดที่หนึ่งในผลลัพธ์ คะแนนคือจำนวนครั้งที่ผู้เล่นประสบความสำเร็จในการตีลูก
- หากลูกบอลคิดถึงไม้พายของผู้เล่นให้ยุติโปรแกรม
- ควรมีAI บางอย่าง (แม้ว่าไม้พายของ AI จะตรงกับค่า x ของลูกบอล)
- ลูกบอลไม่สามารถเคลื่อนที่เป็นเส้นตรงในแนวตั้งหรือแนวนอน
หน้าจอเริ่มต้น / เฟรมแรกควรมีลักษณะดังนี้:
=========
o
=========
score: 0
การให้คะแนน นี่คือโค้ดกอล์ฟดังนั้นรหัสที่สั้นที่สุดชนะ ... อย่างไรก็ตามมีโบนัสบางอย่างที่จะลดจำนวนตัวละครของคุณ:
- -30 ตัวอักษร: เปลี่ยนเส้นทางการเคลื่อนที่ของลูกบอลขึ้นอยู่กับตำแหน่งที่มันกระทบกับไม้พาย
- -10 ตัวละคร: ทำให้เกมเร็วขึ้นตามกาลเวลา
- -20 ตัวอักษร: ทำให้ AI สามารถเอาชนะได้
- ตัวอักษร -20: หลีกเลี่ยงสถานการณ์ใด ๆ ที่ผู้เล่นยังคงอยู่และเกมดำเนินต่อไปตลอดกาลโดยไม่ชนะหรือแพ้ (เกิดจากวิถีและรูปแบบ AI)
- -20 ตัวอักษร: ทำให้ลูกบอลเริ่มเคลื่อนที่ด้วยวิถีแบบกึ่ง (กึ่ง)
- -25 ตัวอักษร: เพิ่มตัวเลือกการรีเซ็ต
นี่คือตัวอย่างที่ไม่ตีกอล์ฟโดยไม่มีโบนัสใน 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>
ให้เกมเริ่มต้นขึ้น!
3
อย่างน้อยใครก็ได้ที่สามารถอธิบายได้ว่าทำไมพวกเขาถึงลงคะแนนเรื่องนี้? ฉันอยากรู้อยากเห็นอย่างแท้จริงเพราะฉันคิดว่ามันจะสนุก แต่ฉันไม่มีประสบการณ์มาก
—
Eric Vincent
การพิมพ์สิ่ง ASCII นั้นใช้ได้ แต่ด้วยการใช้แป้นพิมพ์เราต้องสร้างแอพทั้งหมด ความท้าทายประเภทนี้เกิดขึ้นเพราะหลาย ๆ ภาษาไม่รองรับ i / o เช่นนั้น การใช้ AI, ฟิสิกส์ เกือบเหมือนแอปพลิเคชั่นเต็มรูปแบบ หากคุณพิจารณาความท้าทายอื่น ๆ พวกเขามีภารกิจหนึ่งที่รับอินพุต (หรือไม่) และสร้างเอาต์พุตที่เกี่ยวข้อง การเพิ่ม AI, ฟิสิกส์และแป้นพิมพ์ knteraction เป็นเพียงวิธีการที่ท้าทายมาก
—
Downgoat
@vihan AI สำหรับ pong นั้นง่ายมากเพียงแค่ต้องติดตามค่า x ของลูกบอล แม้การทำให้สามารถเอาชนะได้นั้นไม่ยากเพียง จำกัด ความเร็วในการพายเท่านั้น ปัญหาที่แท้จริงเพียงอย่างเดียวของแนวคิดคือการโต้ตอบของแป้นพิมพ์ซึ่งสามารถจัดการได้ในภาษาที่หลากหลาย อย่างไรก็ตามสั้น ๆ ค่อนข้างคลุมเครือและเปิดกว้าง (เนื่องจากเราเป็นผู้ใช้เล่ห์เหลี่ยมสำหรับความไม่ชัดเจนและเป็นธรรมรอบ ๆ ที่นี่) และโบนัสมากมายไม่ได้ช่วยอะไร
—
เลเวลริเวอร์เซนต์
การโต้ตอบกับคีย์บอร์ดจะต้องแก้ไขใน(เรื่อง) การนำ Tetris มาใช้ด้วยเช่นกัน แต่นั่นก็ไม่ได้ลดความนิยมของงานลง (ใช่ฉันรู้ว่านั่นคือการประกวดความนิยมจริง ๆนี่ไม่ใช่) สิ่งเดียวที่ฉันพบว่าเป็นการรบกวนส่วนตัวคือจำนวนโบนัส แต่แน่นอนว่าไม่ต้องขึ้นอยู่กับรสนิยมของฉัน
—
จัดการ