नेटहैक एक रॉगुलाइक गेम है, जहां एक खिलाड़ी को यंगर के एमुलेट को कालकोठरी के सबसे निचले स्तर से निकालना होगा। आमतौर पर टेलनेट के माध्यम से खेला जाता है, पूरे खेल को ASCII ग्राफिक्स के साथ दर्शाया जाता है। खेल बेहद चुनौतीपूर्ण है और सफल होने के लिए कई खेल यांत्रिकी के ज्ञान की आवश्यकता होती है।
इस चुनौती के उद्देश्यों के लिए, मान लें कि संपूर्ण कालकोठरी एक एकल स्तर है और केवल 5 × 16 अक्षर हैं। इसके अलावा, मान लें कि यह एक "सुरक्षित" कालकोठरी है या कि आप केवल एक प्रोटोटाइप लागू कर रहे हैं - कोई राक्षस नहीं होगा, भूख के बारे में चिंताएं आदि। वास्तव में, आपको केवल चरित्र और ताबीज और खेल के स्थान को ट्रैक करना होगा। प्रभावी ढंग से समाप्त हो जाएगा जब खिलाड़ी ताबीज के रूप में एक ही स्थान पर आता है।
आव यकताएं
- एक 5 × 16 कालकोठरी (एकल स्तर) होगी।
- खिलाड़ी को एक प्रारंभिक स्थान (वैकल्पिक रूप से यादृच्छिक) और एक अलग यादृच्छिक (अलग-अलग हर बार कार्यक्रम चलने पर) को कालकोठरी के अंदर चौकोर शुरू करें। यही है, खिलाड़ी के रूप में ताबीज को एक ही वर्ग पर शुरू करने की अनुमति नहीं है।
- चार इनपुट कुंजियों को स्वीकार करें जो खिलाड़ी को एक समय में एक वर्ग (चार कार्डिनल दिशाओं) में स्थानांतरित करते हैं। अन्य इनपुट पढ़ने / प्रसंस्करण की अनुमति है (एक रीडलाइन () फ़ंक्शन जिसे 'एंटर', आदि दबाने की आवश्यकता होती है)।
- कालकोठरी की सीमा के बाहर यात्रा करने की अनुमति नहीं है। उदाहरण के लिए, अगर खिलाड़ी सही दबाए हुए तहखाने के दाहिने किनारे पर है, तो कुछ भी नहीं करना चाहिए।
- प्रारंभिक पीढ़ी और प्रत्येक आंदोलन के बाद, खेल की स्थिति को प्रिंट करें। जैसा कि यह कोड गोल्फ है और मुद्रण बल्कि निर्बाध है, प्रिंट फ़ंक्शन और फ़ंक्शन कॉल के लिए वर्ण गणना पर ध्यान न दें, कोई राज्य परिवर्तन नहीं मानता है । खाली कोशिकाओं को अवधि (
.
), दोहरे भाव के रूप में ताबीज ("
) और प्रतीक के रूप में चरित्र ( ) के रूप में दिखाया जाना चाहिए@
। - खेल तब खत्म हो जाता है जब खिलाड़ी ताबीज "एक ही वर्ग में आता है"
जीतना
यह एक कोड गोल्फ चालान है, आज से एक सप्ताह बाद आवश्यकताओं को पूरा करने वाला सबसे छोटा कोड विजेता घोषित किया जाएगा।
उदाहरण
मूलभूत आवश्यकताओं और नमूना आउटपुट को दिखाने के लिए C # (ungolfed) में एक उदाहरण समाधान है।
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
।
कार्यक्रम चलाने पर आउटपुट:
................
...."...........
..........@.....
................
................
'ए' कुंजी को दो बार दबाने के बाद आउटपुट (ऊपर सहित):
................
...."...........
..........@.....
................
................
................
...."...........
.........@......
................
................
................
...."...........
........@.......
................
................