নেট হ্যাক একটি রগুইলাইক গেম যেখানে কোনও খেলোয়াড়কে অবশ্যই অন্ধকারের নিম্নতম স্তর থেকে ইয়েন্ডারের তাবিজটি পুনরুদ্ধার করতে হবে। সাধারণত টেলনেটের মাধ্যমে খেললে পুরো খেলাটি ASCII গ্রাফিক্সের সাথে উপস্থাপিত হয়। গেমটি অত্যন্ত চ্যালেঞ্জিং এবং সাফল্যের জন্য অনেক গেম মেকানিক্সের জ্ঞান প্রয়োজন।
এই চ্যালেঞ্জের উদ্দেশ্যে, ধরে নিন যে পুরো অন্ধকারটি একক স্তরের এবং কেবল 5 × 16 অক্ষর। তদ্ব্যতীত, ধরে নিন যে এটি একটি "নিরাপদ" অন্ধকূপ বা আপনি কেবলমাত্র একটি প্রোটোটাইপ বাস্তবায়ন করছেন - কোনও দানব থাকবে না, ক্ষুধা নিয়ে উদ্বেগ ইত্যাদি হবে না, আসলে আপনাকে অবশ্যই চরিত্রের অবস্থান এবং তাবিজ এবং গেমটির অবস্থান অনুসন্ধান করতে হবে যখন খেলোয়াড় তাবিজ হিসাবে একই স্থানে উপস্থিত হয় কার্যকরভাবে শেষ হবে।
চ্যালেঞ্জ প্রয়োজনীয়তা
- একটি 5 × 16 অন্ধকূপ (একক স্তর) থাকবে।
- খেলোয়াড়কে অন্ধকারের অভ্যন্তরে স্কয়ার শুরু করে একটি শুরুর অবস্থান (allyচ্ছিকভাবে এলোমেলো) এবং তাবিজকে একটি পৃথক এলোমেলো (প্রতিটি বার প্রোগ্রাম চালানোর সময় পৃথক করে) দিন। অর্থাৎ, তাবিলেট খেলোয়াড়ের মতো একই স্কোয়ারে শুরু করতে দেওয়া হয় না।
- চারটি ইনপুট কী গ্রহণ করুন যা প্লেয়ারকে একবারে এক স্কোয়ারে নিয়ে যায় (চারটি মূল দিক)। অন্যান্য ইনপুটটি পড়ার / প্রক্রিয়াকরণের অনুমতি দেওয়া হয় (একটি পঠন () ফাংশন যার জন্য 'প্রবেশ' ইত্যাদি চাপতে হবে)।
- অন্ধকারের গণ্ডির বাইরে ভ্রমণ করার অনুমতি নেই। উদাহরণস্বরূপ, যদি খেলোয়াড় ডানদিকে ডানদিকে ডান প্রান্তে থাকে তবে কিছুই করা উচিত নয়।
- প্রাথমিক প্রজন্মের পরে এবং প্রতিটি আন্দোলনের পরে, গেমের অবস্থা মুদ্রণ করুন। যেহেতু এটি কোড গল্ফ এবং মুদ্রণ বরং উদ্বেগজনক, মুদ্রণ ফাংশন এবং ফাংশন কলের জন্য অক্ষর গণনা উপেক্ষা করে কোনও রাজ্য পরিবর্তন না ধরে । খালি কোষ সময়ের (যেমন প্রদর্শন করা উচিত
.
), মাদুলি ডাবল উদ্ধৃতি হিসাবে ("
) এবং চরিত্র প্রতীক হিসাবে (@
)। - খেলোয়াড় যখন তাবিজটি "আবিষ্কার" করে (একই স্কোয়ারে উপস্থিত হয়) খেলা শেষ হয়ে যায়
জয়লাভ
এটি একটি কোড গল্ফ চ্যালেঞ্জ, আজ থেকে এক সপ্তাহের মধ্যে প্রয়োজনীয়তাগুলি পূরণ করার সবচেয়ে সংক্ষিপ্ত কোডটি বিজয়ী হিসাবে ঘোষণা করা হবে।
উদাহরণ
মৌলিক প্রয়োজনীয়তা এবং নমুনা আউটপুট দেখানোর জন্য এখানে সি # (অগল্ফড) এর একটি উদাহরণ সমাধান রয়েছে।
using System;
namespace nh
{
class Program
{
static Random random = new Random();
// player x/y, amulet x/y
static int px, py, ax, ay;
static void Main(string[] args)
{
px = random.Next(0, 16);
py = random.Next(0, 5);
// amulet starts on a position different from the player
do { ax = random.Next(0, 16); } while (px == ax);
do { ay = random.Next(0, 5); } while (py == ay);
print();
do
{
// reads a single keypress (no need to press enter)
// result is cast to int to compare with character literals
var m = (int)Console.ReadKey(true).Key;
// Move the player. Here standard WASD keys are used.
// Boundary checks for edge of dungeon as well.
if (m == 'W')
py = (py > 0) ? py - 1 : py;
if (m == 'S')
py = (py < 5) ? py + 1 : py;
if (m == 'A')
px = (px > 0) ? px - 1 : px;
if (m == 'D')
px = (px < 16) ? px + 1 : px;
// print state after each keypress. If the player doesn't
// move this is redundant but oh well.
print();
// game ends when player is on same square as amulet
} while (px != ax || py != ay);
}
static void print()
{
Console.Write('\n');
for (int y=0; y<5; y++)
{
for (int x = 0; x < 16; x++)
{
if (x == px && y == py)
Console.Write('@');
else if (x == ax && y == ay)
Console.Write('"');
else
Console.Write('.');
}
Console.Write('\n');
}
}
}
}
মোট চরিত্রের গণনা 1474, তবে মুদ্রণ ফাংশনটিতে কলগুলি উপেক্ষা করে এবং এর সংজ্ঞাটি চূড়ান্ত অক্ষর গণনা 896
।
প্রোগ্রামটি চালিত হলে আউটপুট:
................
...."...........
..........@.....
................
................
'এ' কী দু'বার টিপানোর পরে আউটপুট (উপরে সহ):
................
...."...........
..........@.....
................
................
................
...."...........
.........@......
................
................
................
...."...........
........@.......
................
................