NetHack ist ein schurkenhaftes Spiel, bei dem ein Spieler das Amulett der Helden aus dem untersten Level des Dungeons holen muss. Üblicherweise über Telnet gespielt, wird das gesamte Spiel mit ASCII-Grafiken dargestellt. Das Spiel ist extrem herausfordernd und erfordert Kenntnisse vieler Spielmechanismen, um erfolgreich zu sein.
Nehmen Sie für die Zwecke dieser Herausforderung an, dass der gesamte Dungeon aus einer Ebene und nur 5 × 16 Zeichen besteht. Nehmen Sie außerdem an, dass dies ein "sicherer" Dungeon ist oder dass Sie nur einen Prototyp implementieren - es wird keine Monster, Bedenken hinsichtlich des Hungers usw. geben. Tatsächlich müssen Sie nur die Position des Charakters, des Amuletts und des Spiels verfolgen wird effektiv beendet, wenn der Spieler am selben Ort wie das Amulett ankommt.
Herausforderungsanforderungen
- Es wird einen 5 × 16 Dungeon geben (Single Level).
- Geben Sie dem Spieler einen Startplatz (optional zufällig) und dem Amulett ein separates Startfeld im Dungeon (jedes Mal anders, wenn das Programm ausgeführt wird). Das heißt, das Amulett darf nicht auf demselben Feld wie der Spieler beginnen.
- Akzeptieren Sie vier Eingabetasten, die den Spieler jeweils um ein Feld bewegen (vier Hauptrichtungen). Das Lesen / Verarbeiten anderer Eingaben ist zulässig (eine readline () - Funktion, die das Drücken der Eingabetaste usw. erfordert).
- Reisen außerhalb des Kerkers sind nicht gestattet. Wenn sich der Spieler am rechten Rand des Dungeons befindet und nach rechts drückt, sollte dies nichts bewirken.
- Drucken Sie nach der ersten Generierung und nach jeder Bewegung den Status des Spiels. Da dies Codegolf ist und das Drucken ziemlich uninteressant ist, ignorieren Sie die Zeichenanzahl für die Druckfunktion und den Funktionsaufruf, sofern sich der Status nicht ändert . Leere Zellen sollten als Punkt (
.
), Amulett als Anführungszeichen ("
) und Zeichen als Symbol (@
) angezeigt werden . - Das Spiel ist beendet, wenn der Spieler das Amulett "entdeckt" (am selben Feld ankommt)
Gewinnen
Dies ist eine Code-Golf-Herausforderung. Der kürzeste Code, der eine Woche nach dem heutigen Tag die Anforderungen erfüllt, wird zum Gewinner erklärt.
Beispiel
Hier ist eine Beispiellösung in C # (ungolfed), um die grundlegenden Anforderungen und die Beispielausgabe zu zeigen.
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');
}
}
}
}
Die Gesamtzahl der Zeichen beträgt 1474, aber ohne Berücksichtigung der Aufrufe der Druckfunktion und ihrer Definition beträgt die endgültige Zeichenanzahl 896
.
Ausgabe beim Ausführen des Programms:
................
...."...........
..........@.....
................
................
Ausgabe (einschließlich oben) nach zweimaligem Drücken der Taste 'a':
................
...."...........
..........@.....
................
................
................
...."...........
.........@......
................
................
................
...."...........
........@.......
................
................