18
最小限のNetHack
NetHackは、プレイヤーがダンジョンの最下層からイェンダーの魔除けを取得しなければならないローグライクゲームです。一般にtelnetを介してプレイされるゲーム全体は、ASCIIグラフィックで表されます。ゲームは非常に挑戦的であり、成功するためには多くのゲームの仕組みの知識が必要です。 この課題のために、ダンジョン全体が単一のレベルであり、5×16文字のみであると仮定します。さらに、これは「安全な」ダンジョンであるか、プロトタイプのみを実装していると想定します。モンスター、空腹に関する懸念などはありません。実際、キャラクターとアミュレットとゲームの位置のみを追跡する必要があります。プレイヤーがアミュレットと同じ場所に到着すると効果的に終了します。 チャレンジ要件 5×16のダンジョン(シングルレベル)があります。 プレイヤーに開始場所(オプションでランダム)を与え、アミュレットにダンジョン内の別のランダム(プログラムが実行されるたびに異なる)開始広場を与えます。つまり、魔除けはプレイヤーと同じマスから始めることはできません。 プレーヤーを一度に1マスずつ移動する4つの入力キー(4つの基本方向)を受け入れます。他の入力の読み取り/処理が許可されます( 'enter'などを押す必要があるreadline()関数)。 ダンジョンの境界外への移動は許可されていません。たとえば、プレイヤーがダンジョンの右端にいる場合、右を押しても何も実行されません。 初期生成後および各移動後に、ゲームの状態を印刷します。これはコードゴルフであり、印刷はかなり面白くないので、状態の変化がないと仮定して、印刷関数と関数呼び出しの文字数を無視します。空のセルはピリオド(.)、アミュレットは二重引用符(")、文字はアットマーク()として表示する必要があります@。 プレイヤーがアミュレットを「発見」するとゲームは終了します(同じ広場に到着します) 勝ち これは、ゴルフの挑戦であり、今日から1週間の要件を満たす最短のコードが勝者と宣言されます。 例 基本的な要件とサンプル出力を示す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 = …
64
code-golf