अससी पोंग
कम से कम संभव कोड में ASCII वर्णों में क्लासिक गेम "पोंग" को फिर से बनाना चुनौती है।
आवश्यकताओं / विनिर्देशों
- "स्क्रीन" 45x25 अक्षर का होना चाहिए।
- व्हाइट स्पेस वास्तव में व्हाइट स्पेस होना चाहिए।
- पैडल्स में 9 बराबर चिन्ह
=========होने चाहिए : और सबसे ऊपर और सबसे नीचे वाली पंक्तियों पर होना चाहिए (मुझे पता है कि मूल को टॉप-टू-बॉटम के बजाय साइड-टू-साइड खेला जाता है, लेकिन मुझे लगता है कि यह एससीआई पॉन्ग के लिए बेहतर काम करता है )। - गेंद कम या ऊपरी मामला
oया शून्य हो सकती है। - किसी भी तरह के दो इनपुट बटन (यह ठीक है अगर उपयोगकर्ता एक कुंजी दबाता है जो खिलाड़ी के पैडल को एक बार में बाएं और दाएं एक या दो वर्ण को स्थानांतरित करने के लिए इनपुट में एक पत्र दिखाता है, जो ठीक है, भी है)।
- गेंद को पैडल या दीवार से टकराने पर उचित कोण पर रिकोचैट करने की आवश्यकता होती है (संकेत: एक्स या वाई अंतर को नकारना)।
- स्कोर को आउटपुट में कहीं प्रदर्शित किया जाना चाहिए। खिलाड़ी कितनी बार गेंद को सफलतापूर्वक हिट करता है।
- यदि गेंद खिलाड़ी के पैडल को याद करती है, तो कार्यक्रम समाप्त करें।
- एआई के कुछ प्रकार होने चाहिए (भले ही एआई का पैडल गेंद के एक्स मूल्य से मेल खाता हो)।
- गेंद सीधी या क्षैतिज रूप से सीधी रेखा में नहीं जा सकती।
स्टार्ट स्क्रीन / पहला फ्रेम कुछ इस तरह दिखना चाहिए:
=========
o
=========
score: 0
स्कोरिंग यह कोड-गोल्फ है , इसलिए सबसे छोटा कोड जीतता है ... हालांकि, आपके चरित्र की संख्या को कम करने के लिए कुछ बोनस हैं:
- -30 अक्षर: पैडल पर हिट करने के आधार पर गेंद का प्रक्षेपवक्र बदलें
- -10 अक्षर: समय के साथ खेल की गति बनाएं
- -20 अक्षर: ऐ को हरा दें
- -20 अक्षर: किसी भी स्थिति से बचें जहां खिलाड़ी स्थिर रहता है और खेल हमेशा के लिए बिना जीते या हार जाता है (कुछ विशेषणों और AI पैटर्न के कारण)
- -20 अक्षर: गेंद को एक (अर्ध) यादृच्छिक प्रक्षेपवक्र पर ले जाना शुरू करें
- -25 वर्ण: एक रीसेट विकल्प जोड़ें
यहाँ जावास्क्रिप्ट में कोई बोनस नहीं के साथ एक गैर-गोल्फ उदाहरण है:
//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
ठीक है, कम से कम किसी को समझा सकते हैं कि उन्होंने इसे क्यों ठुकरा दिया? मैं वास्तव में उत्सुक हूं क्योंकि मुझे लगा कि यह मजेदार होगा लेकिन मुझे बहुत अनुभव नहीं है।
—
एरिक विंसेंट
ASCII सामान प्रिंट करना ठीक है लेकिन कीबोर्ड इंटरेक्शन के साथ हमें एक संपूर्ण ऐप बनाना होगा। इस प्रकार की चुनौतियां इस वजह से होती हैं क्योंकि कई भाषाएं इस तरह से i / o का समर्थन नहीं करती हैं। एक AI, भौतिकी को लागू करना। लगभग पूर्ण पैमाने के आवेदन की तरह। यदि आप अन्य चुनौतियों पर एक नज़र डालते हैं, तो उनके पास एक कार्य है जो एक इनपुट लेता है (या नहीं) और एक प्रासंगिक आउटपुट का उत्पादन करता है। एक AI, भौतिकी और कीबोर्ड को जोड़ना एक चुनौती के लिए बहुत कुछ है
—
डाउनगोट
@ पांग के लिए एआई बेहद सरल है, इसे सिर्फ गेंद के एक्स मान का पालन करना है। यहां तक कि इसे हरा-भरा बनाना भी उतना मुश्किल नहीं है, बस स्पीड ओड पैडल को सीमित करें। अवधारणा के साथ एकमात्र वास्तविक मुद्दा कीबोर्ड इंटरैक्शन है, जिसे उचित भाषाओं में प्रबंधित किया जा सकता है। संक्षिप्त हालांकि, अस्पष्ट और खुला है (यह देखते हुए कि हम निष्पक्षता और यहां निष्पक्षता के लिए स्टिकर हैं), और बोनस की विशाल सरणी इसकी मदद नहीं करती है।
—
लेवल रिवर सेंट
कीबोर्ड इंटरैक्शन को टेट्रिस को लागू करने (री) में हल करना था , लेकिन इससे कार्य की लोकप्रियता कम नहीं हुई। (हां, मुझे पता है, यह वास्तव में लोकप्रियता-प्रतियोगिता थी , यह नहीं है।) केवल एक चीज जो मुझे व्यक्तिगत रूप से परेशान करती है, वह है बोनस की राशि। लेकिन निश्चित रूप से मेरे स्वाद तक नहीं है।
—
manatwork