UNIX的なアレ

UNIX的なこととかいろいろ

ゲームで極める シェルスクリプトスーパーテクニック

シェルスクリプトの基本的な本なら割と世間に出回っているのですが、「極める」系の本があまり存在していないのが現状です。
実際、そこまでシェルスクリプトを使い倒すならPerlを使うよって言う方が多いからなのかもしれませんが、ここまでできるんだって思わせてくれる良書をみつけたので紹介します。

Contents

目次は以下のとおり。

Chapter1 シェルスクリプトの基本
Chapter2 シェルスクリプト環境のカスタマイズ
Chapter3 シェルスクリプトによる画面制御の基礎
Chapter4 シェルスクリプトでのリアルタイム入力
Chapter5 シェルスクリプトでの乱数発生方法
Chapter6 シェルスクリプトによるリアルタイム進行
Chapter7 シェルスクリプトでの配列の使い方
Chapter8 ゲームで極めるシェルスクリプト超テクニック【テトロミノゲーム編】
Chapter9 ゲームで極めるシェルスクリプト超テクニック【タイピングゲーム編】
Chapter10 ゲームで極めるシェルスクリプト超テクニック【スネークゲームゲーム編】

ざっと見た感じですが、シェルスクリプトの辞典とはまた違ったテクニック集なことがわかると思います。
また、ゲームで極めると記載してあるとおり、画面制御系やキー入力系の項目が充実しているのも特徴ですね。なんと最後にはは、テトリミノゲーム(要するにテトリスなどのゲームまで作ってしまいます。

Chapter1 シェルスクリプトの基本

ある程度かける人を対象としている本ですが、割と初心者がハマりやすいポイントについても丁寧に記載してあります。たとえば以下の点。

if [ "$i" -ge 5 ]; then

上記の1行に対して半角スペースが必要な部分をそれぞれ示しています。
確かにここって最初はハマりやすいところですよねぇ。

Chapter4 シェルスクリプトでのリアルタイム入力

実際、仕事上で入力を求めるスクリプトを書く際はreadコマンドで事足りるかと思います。(少なくとも自分はそうでした)
しかしながら、ゲームで必要となるようなリアルタイム系の入力はreadコマンドだけでは難しいため様々な方法が紹介されています。
下記はリアルタイム系入力の方法について説明している部分の引用です。

ddコマンドは、本来はハードディスクなどのデバイスに、ブロックサイズやカウント数を指定して直接データを書き込んだり読み出したりするコマンドですが、ここではブロックサイズ1(bs=1),カウント数1 (count=1)を指定して、1バイトのみを標準入力から読み込むコマンドとして利用しています

実際の用例はあえて掲載しませんが、こんなやり方があるとは思いつきませんでした。
やはりゲームをつくるとなると必要となるテクニックがかわってきますね。

Chapter6 シェルスクリプトによるリアルタイム進行

ゲームにおいて、リアルタイムの進行はつき物。
シミュレーションゲームボードゲームみたいにユーザーの入力をまってから動作が行われるようなゲームであれば、ある程度想像は付くのですがアクションゲームなどのようにキー入力をしなくてもほかの処理を平行で動かす必要があります。
このチャプターではその方法が紹介されています。

キー入力を待ちながら、一定時間キー入力がなければ「タイムアウト」としてキー入力コマンドから帰ってくることもできれば、タイムアウト字に別の処理を進行させた上で再びキー入力コマンドを呼び出すことにより、リアルタイム進行の処理が実現できます。

そこで、本書では次のような方法をとることにしました。一定感覚でタイムアウト用の文字を発生し続けるプログラムと通常のキー入力をマージし、これをパイプ経由で受け取るのです。

うううーむなるほど。こんな方法があるかぁ。正直、自分では思いつきませんね。

ゲームを作らない人にも。

と、いう流れで最後はゲームのプログラミングに入ります。シェルスクリプトというと、プロセスの監視だったりセットアップに使うことはあると思いますが、ここまで使おうとはあまり思いません。
実際のところ、ここまで使い倒す必要はないという方もいらっしゃるかもしれませんが、個人的にはものすごく勉強になった本でした。そのまま使うようなケースはなくても、今後利用する際の引き出しを増やすには最適の本かと思います。またチュートリアル形式になっているのもやってみよう!という気にさせますね。
1点あえて不満を言わせてもらうなら、サンプルコードがデジタルでほしかったといういこと。とりあえず動かしてみたいなーと思ってもかなりの量だったので。
しかしながら、その点を差し引いてもシェルスクリプト系の本で強くオススメします。