C言語ターミナルタイピングRPG「クムドール・クロニクル」v1.0.0|道中マップを使うゲームへ再編成 | UNIX Cafe

* 当サイトでは、コンテンツの一部に広告を掲載しています。

System Note $ cat /proc/ai-disclosure

本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。

C言語ターミナルタイピングRPG「クムドール・クロニクル」v1.0.0|道中マップを使うゲームへ再編成 | UNIX Cafe

C言語製のターミナルタイピングRPG「クムドール・クロニクル」を作りました。

もともとは「クムドールの試練」という名前で作っていたゲームですが、今回の版ではタイトルを変え、バージョンも v1.0.0 として区切り直しました。旧作の改良版というよりも、クムドール王国をめぐる旅と記録として再構成したため、「クロニクル」という名前にして、別のゲームとして進めていきます。

GitHubでは kumdor-chronicle という名前で公開しています。

目次

クムドール・クロニクルとは

「クムドール・クロニクル」は、表示された課題をそのまま正確に入力して敵を倒していくタイピングRPGです。

舞台は惑星クムドール。クム酒の原料になるクムの木が石化し、湖からチャトフィッシュが姿を消し、王都の通信塔にも異常が起きています。地球でキーボード道場を営む主人公は、クムドール王国からの救援依頼を受け、王室船クム3号で現地へ向かいます。

このゲームでは、キーボードを「クムドールの剣」として扱います。敵を倒す方法は、課題を正確に打つことです。1文字でも違うと攻撃は失敗し、敵の反撃を受けます。

ステージは全20個です。最初はホームポジションの f / j / スペースから始まり、ホーム段、上段、下段、数字、Shift記号、全キー混合へ進んでいきます。

プロローグをタイピング風にする

「クムドール・クロニクル」では、ターミナル上でプロローグを一文字ずつ表示しています。

通常の文章表示のように行単位で一気に出すのではなく、文字ごとに少しずつ流すタイプライター風の演出にしました。プレイヤーがゲームを始めた瞬間に、ただのメニュー画面ではなく、クムドールへ向かう導入として読めるようにしたかったためです。

【プロローグ】

A.P.405年。地球でキーボード道場を営むあなたは、
変わらない稽古の日々を離れ、ズロワノフ経路を抜けてソルフェスへ向かった。
ミソル空港のホテルに着いた夜、クムドール王国からの使者が倒れ込み、こう告げる。
「クムの木が石になり、チャトフィッシュも湖から消えました。王都の通信も途絶えています」
```

日本語の文章を1バイトずつ出すと、UTF-8の途中で文字が壊れてしまいます。そこで、先頭バイトを見て1文字の長さを判定し、日本語文字を途中で分割しないようにしています。

句点や読点では少し長めに待ち、行末ではさらに間を取ります。これにより、文章がただ流れるだけでなく、読点で息をつき、行末で場面が切り替わるようなテンポになります。

また、プロローグ表示中は文字ごとにタイプ音を鳴らします。macOSでは BGM/type.wav があればそれを使い、ない場合は端末ベルにフォールバックします。音を出したくない場合は、次のように起動できます。

KUMDOR_NO_TYPE_SOUND=1 ./kumdor_01

ターミナルだけのゲームでも、文字の出し方と音の入れ方を工夫すると、ゲームらしい演出を足すことができました。今回のプロローグは、C言語の素朴な標準出力に、少しだけ物語の間を持たせるための仕掛けです。

ビッグハンド訓練場

【指とキーの対応】
指:  L5  L4  L3  L2  L2     R2  R2  R3  R4  R5
数:  [1] [2] [3] [4] [5]    [6] [7] [8] [9] [0]
上:  [q] [w] [e] [r] [t]    [y] [u] [i] [o] [p]
中:  [a] [s] [d] [f] [g]    [h] [j] [k] [l] [;]
下:  [z] [x] [c] [v] [b]    [n] [m] [,] [.] [/]
親指:                 [space]
目印: f=左人差し指の出発点 / j=右人差し指の出発点
凡例: L5/R5小指 L4/R4薬指 L3/R3中指 L2/R2人差し指 / 親指

本編の前には、ビッグハンド訓練場を用意しました。

ここではキーと指の対応を短いレッスンで確認できます。真ん中の列、上の列、下の列、数字を、左手、右手、両手の順に練習する構成です。

タイピングゲームでは、いきなり本編に入ると「何を意識して練習しているのか」が分からなくなります。そこで、本編とは別に、担当キーと担当指を見ながら試せる場所を入れました。

ビッグハンド訓練場ではミスしてもHPは減りません。巨大な手の訓練装置が、同じ課題をもう一度出します。

道中マップを歩く

クムドール・クロニクルで大きく変わったのは、各ステージの戦闘前に道中マップを入れたことです。

以前はステージに入ると、そのまま戦闘に進む印象が強かったのですが、現在は11行x21列の横長アスキーアートマップを歩きます。

       +-------------------------------------------+
       | # # # # # # # # # # # # # # # # # # # # # |
       | # ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | G
       | # ? # # # ? # # # # # ? # # # ? # # # ? # |
       | # ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # |
       | # ? # ? # # # ? # ? # # # # # ? # ? ? ? # |
       | # ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # |
       | # # # ? # ? # # # ? # ? # # # ? # # # # # |
       | # ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # |
       | # . # # # ? # ? # # # # # ? # # # ? # ? # |
     S | > . ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # |
       | # # # # # # # # # # # # # # # # # # # # # |
       +-------------------------------------------+
       S=スタート  G=ゴール  M=マーケット  ^>v< = あなた  +=回復  x=罠  K=キー  I=道具  $=落とし物

操作はシンプルです。f で向いている方向へ進み、space で向きを変え、j で周りを調べます。
ターミナル上で遊んでいる場合、これらの操作はEnterなしで反応します。

マップ上には、スタート S、ゴール G、マーケット M、キー K、重要アイテム I、落とし物 $、回復、罠などがあります。歩いている途中で敵とランダムに遭遇し、戦いに入ります。

戦いで1問成功すると敵を1体倒し、またマップに戻ります。敵を10体倒すと、そのステージはクリアです。

タイピングRPGとしての設計

タイピング課題は、段階的に増えるようにしました。

最初は f / j / スペースです。そこからホーム段、上段、下段、数字へ進み、後半は大文字、記号、スペースを含む課題が出ます。

各ステージでは、単キーだけでなく、左右交互、短い単語、スペース入りの課題も出題します。単に同じキーを連打するだけではなく、「少しずつ普通の入力に近づく」ことを意識しています。

ミス時には、入力が短い、長い、先頭が違う、途中が違うといった短いフィードバックを表示します。

ステージ4以降は、タイプミスをするとペナルティが発生します。

  • 暗闇: 入力中の文字が画面に表示されない
  • 修正不可: Backspace/Deleteで戻せない
  • 時間制限: 指定秒数以内に入力しないと失敗になる
  • : 正解しても攻撃ではなく毒の解除に使われる

敵にも反撃特性があります。強打、毒刃、暗闇、再生などがあり、敵が本気を出した時は予告行動が表示されます。

C言語とターミナルで作る

実装はC言語です。

プレイヤー、敵、ステージは struct で管理しています。タイピング判定は、入力された文字列を fgets() で受け取り、表示された課題と strcmp() で完全一致比較します。

大文字、小文字、スペース、数字、記号を区別するのは、この比較が入力文字列をそのまま見ているためです。

暗闇や修正不可の状態では、Unix/macOS環境の端末設定を一時的に変更します。入力を見えなくしたり、Backspace/Deleteを効かなくしたりすることで、ターミナル上でも状態異常らしい挙動を作っています。

道中マップでは、ターミナル上で遊んでいる場合、f / space / j / q をEnterなしで受け取ります。戦闘中の文章入力とは違う操作感にしたかったためです。

macOSでは、BGM再生にAVFoundationを使っています。ステージ別BGM、ビッグハンド訓練場用のランダムBGM、マップBGMを鳴らせます。BGMを止めたい場合は、環境変数やゲーム内コマンドで切り替えられます。

KUMDOR_NO_BGM=1 ./kumdor_01
KUMDOR_BGM_VOLUME=0.3 ./kumdor_01

セーブと再開

ステージ突破時には自動セーブします。ゲーム中に :save:savequit を入力して中断することもできます。

セーブデータは kumdor_save.txt に保存します。現在の形式は KUMDOR_SAVE_V7 です。旧形式の KUMDOR_SAVE_V1 から KUMDOR_SAVE_V6 も読み込めるようにしています。

ただし、道中マップの位置や戦闘中のペナルティは保存しません。中断セーブでは現在ステージの入口から再開します。このあたりは、データを複雑にしすぎず、ターミナルゲームとして扱いやすくしています。

今回の区切り

今回、タイトルを「クムドール・クロニクル」に変え、バージョンを v1.0.0 にしました。

名前を変えた理由は、ゲームの内容が旧タイトルの「試練」だけでは収まらなくなってきたためです。クムの木、チャトフィッシュ、通信塔、ドリームポイント、ビッグハンド、呪文の壁といった要素を、20ステージの旅として並べ直しました。

旧作をそのまま移植するのではなく、C言語のターミナルRPGとして遊べる形に再設計した、という感覚が近いです。

これから

今後は、道中イベントの種類を増やしたり、BGMや効果音の調整をしたり、ステージ演出をもう少し厚くしたいと考えています。

スコアや成績表示も、タイピング練習として見返しやすくできそうです。どの段でミスが多いか、どの記号が苦手か、といった情報を出せると、ゲームとしてだけでなく練習道具としても使いやすくなります。

今回の挑戦で、ターミナルだけでも、RPGらしいゲームが作れることがわかりました。文字、色、音、入力、セーブ。使っている要素は素朴ですが、組み合わせるとかなり楽しめる形になってきます。

C言語とUnix系ターミナルで、こういう小さなゲームを作るのはやはり楽しいです。

v1.0.1では道中マップとバトル画面を改善しました

クムドール・クロニクル v1.0.1では、道中マップの表示整理、イベントのランダム配置、宝箱と鍵、マップ入力がバトル入力欄に流れ込む問題の修正など、遊びやすさを中心に改善しました。

GitHub Repository

GitHub
kumdor-trial
C言語製ターミナルタイピングRPG「クムドール・クロニクル」
github.com/k1117n-cmyk/kumdor-chroniclel

C言語の次にUnityやUnreal Engineを学ぶ選択肢

用途ごとに選ぶ C言語のおすすめ本

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

目次