আসকি পং
চ্যালেঞ্জটি হ'ল সম্ভব সংক্ষিপ্ততম কোডটিতে ASCII অক্ষরগুলিতে ক্লাসিক গেম "পং" পুনরায় তৈরি করা।
আবশ্যকতা / নির্দিষ্টকরণের
- "স্ক্রীন" 45x25 টি অক্ষর হওয়া উচিত।
- সাদা স্থানটি আসলে সাদা স্থান হওয়া উচিত।
- প্যাডেলগুলি 9 টি সমান চিহ্ন হতে হবে:
=========
এবং শীর্ষে এবং নীচের দিকে সর্বাধিক সারিগুলিতে হওয়া উচিত (আমি জানি যে মূলটি টু টু-ডাউনের পরিবর্তে পাশের পাশ থেকে খেলেছে, তবে আমি মনে করি এটি এসকি পংয়ের জন্য আরও ভাল কাজ করে )। - বলটি লোয়ার বা আপার কেস
o
বা শূন্য হতে পারে। - যেকোন ধরণের দুটি ইনপুট বোতাম (যদি ব্যবহারকারী কোনও অক্ষরে ইনপুটটিতে একটি চিঠি প্রদর্শিত হয় তবে এটি ঠিক আছে) প্লেয়ারের প্যাডেল বাম এবং ডান এক বা দুটি অক্ষর একবারে সরিয়ে নিতে।
- প্যাডেল বা দেওয়াল মারার পরে বলটিকে উপযুক্ত কোণে রিোকোশেট করতে হবে (ইঙ্গিত: x বা y পার্থক্যের মানটি উপেক্ষা করুন)।
- স্কোর আউটপুট কোথাও প্রদর্শিত হবে। স্কোরটি কতবার সফলভাবে বলটি হিট করে।
- যদি বলটি প্লেয়ারের প্যাডেলটি মিস করে তবে প্রোগ্রামটি শেষ করুন।
- কিছু ধরণের এআই থাকতে হবে (এমনকি এআই এর প্যাডেলটি কেবল বলের এক্স মানের সাথে মেলে)।
- বলটি সরলরেখায় উল্লম্ব বা অনুভূমিকভাবে ভ্রমণ করতে পারে না।
প্রারম্ভের স্ক্রিন / প্রথম ফ্রেমের কিছু দেখতে হবে:
=========
o
=========
score: 0
স্কোরিং এটি কোড-গল্ফ , তাই সংক্ষিপ্ততম কোডটি জয়ী হয় ... তবে আপনার চরিত্রের গণনা হ্রাস করার জন্য কিছু বোনাস রয়েছে:
- -30 অক্ষর: প্যাডেল যেখানে আঘাত করে তার উপর নির্ভর করে বলের ট্রাজেক্টোরি পরিবর্তন করুন
- -10 অক্ষর: সময়ের সাথে সাথে গতির গতি বাড়ান
- -20 টি অক্ষর: এআইকে বীটযোগ্য করে তুলুন
- -২০ অক্ষর: খেলোয়াড় স্থির থাকে এমন কোনও পরিস্থিতি এড়িয়ে চলুন এবং জয়টি না হারাতে বা খেলাটি চিরতরে চলতে থাকবে (নির্দিষ্ট ট্রাজেক্টোরিজ এবং এআই নিদর্শনগুলির কারণে)
- -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 এর মতো সমর্থন করে না। একটি এআই বাস্তবায়ন, পদার্থবিজ্ঞান। প্রায় সম্পূর্ণ স্কেল অ্যাপ্লিকেশন মত। আপনি যদি অন্যান্য চ্যালেঞ্জগুলি একবার দেখুন তবে তাদের একটি কাজ রয়েছে যা একটি ইনপুট নেয় (বা না) এবং প্রাসঙ্গিক আউটপুট উত্পন্ন করে। একটি এআই, পদার্থবিজ্ঞান এবং কীবোর্ড সূচনা যোগ করা একটি চ্যালেঞ্জের পক্ষে অনেকটা সহজ উপায়
—
ডাউনগোট
প্যাং এর জন্য এভিআই এভিয়ান অত্যন্ত সহজ, এটি কেবল বলের এক্স মানটি অনুসরণ করতে পারে। এমনকি এটিকে বীটযোগ্য করে তোলাও শক্ত নয়, কেবল প্যাডেলের গতি সীমিত করুন। ধারণার একমাত্র আসল সমস্যাটি হ'ল কীবোর্ড ইন্টারঅ্যাকশন, যা যুক্তিসঙ্গত বিভিন্ন ভাষায় পরিচালনা করা যায়। সংক্ষিপ্তটি বরং অস্পষ্ট এবং উন্মুক্ত (প্রদত্ত যে আমরা এখানে চারপাশে অস্পষ্টতা এবং ন্যায্যতার জন্য স্টিকারার হয়েছি), এবং বোনাসের বিস্তৃত অ্যারে এটি সহায়তা করে না।
—
স্তর নদী সেন্ট
প্রাসঙ্গিক: meta.codegolf.stackexchange.com/q/5521/15599
—
স্তর নদী সেন্ট
কীবোর্ড কথোপকথনটি (পুনরায়) টেট্রিস বাস্তবায়নেও সমাধান করতে হয়েছিল, তবে এটি কার্যটির জনপ্রিয়তা হ্রাস করতে পারেনি। (হ্যাঁ, আমি জানি, এটি আসলে জনপ্রিয়তা-প্রতিযোগিতা ছিল , এটি নয়)) ব্যক্তিগতভাবে আমি যে বিষয়টিকে বিরক্তিকর মনে করি তা হ'ল বোনাসের পরিমাণ। তবে অবশ্যই আমার স্বাদ অনুযায়ী চলতে হবে না।
—
manatwork