私はOCaml を学ぶために単純な素朴なテキスト アドベンチャー ゲーム (このページのベース 1) を作ろうとしています。
このゲームはゲーム エンジンを作成するためのものなので、部屋やアイテムなどに関するすべての情報は json ファイルに保存されます。
サンプルの json ファイルは次のようになります。
{
"rooms":
[
{
"id": "room1",
"description": "This is Room 1. There is an exit to the north.\nYou should drop the white hat here.",
"items": ["black hat"],
"points": 10,
"exits": [
{
"direction": "north",
"room": "room2"
}
],
"treasure": ["white hat"]
},
{
"id": "room2",
"description": "This is Room 2. There is an exit to the south.\nYou should drop the black hat here.",
"items": [],
"points": 10,
"exits": [
{
"direction": "south",
"room": "room1"
}
],
"treasure": ["black hat"]
}
],
"start_room": "room1",
"items":
[
{
"id": "black hat",
"description": "A black fedora",
"points": 100
},
{
"id": "white hat",
"description": "A white panama",
"points": 100
}
],
"start_items": ["white hat"]
}
私はゲームをほぼ完了しましたが、プロジェクトの説明ページには、目的の 2 つが
- ユーザー定義のデータ型、特にレコードとバリアントを設計します。
- リストとツリーでパターン マッチングと高階関数を使用するコードを記述します。
ただし、私が作成した唯一のユーザー定義データ型は、ゲームの現在の状態をキャプチャするために使用されるレコード型であり、tree と variant は使用しませんでした:
type state = {
current_inventory : string list ;
current_room : string ;
current_score : int ;
current_turn : int ;
}
次に、ユーザー入力を解析し、パターン マッチングを使用してさまざまな状況を処理します。
ゲームでバリアント (またはポリモーフィック バリアント)とツリーをどのように使用すればよいかを理解しようとしています。
誰か提案をお願いできますか?