2014/01/16

インタラクティブ (シェル) 捜査アドベンチャーゲームThe Command Line Murdersを遊ぶ

There’s been a murder in Terminal City, and TCPD needs your help.

ターミナルシティで殺人事件が起こり、警察は貴方の協力を求めている。

という冒頭から始まる捜査ゲーム。といっても、GitHubで配布しているものなので、ただのゲームなわけがありません。

インタラクティブシェル上で、テキストファイルの山からgrepやawkを駆使して捜査 (走査) して犯人を見つけるという、一風変わったものになっています。

ゲームの導入方法と序盤の様子などは続きから。

導入

  1. GitHubへ行き、プロジェクトをcloneするか、zipファイルで落としてそれを解凍します。
  2. プロジェクトのフォルダに移動します。
  3. cat instructionsで遊びかたを読みます。

コマンドラインの使いかたを知りたいときはとりあえずcheatsheet.mdを読みましょう。

それでもわからないときはプロジェクトディレクトリのトップにある、hint1からhint8というファイルを見ましょう。

ちなみに、instractions, cheatsheet, hint以外ではテキストエディタを使ってくれるな、とのことです。

ターミナルのスクロールバックもあまりよい行為ではないかもしれません。

ゲーム風景

> cat instructions

There's been a murder in Terminal City, and TCPD needs your help.

To figure out whodunit, go to the 'mystery' subdirectory and start working from there.

You'll want to start by collecting all the clues at the crime scene (the 'crimescene' file).

The officers on the scene are pretty meticulous, so they've written down EVERYTHING in their officer reports.

Fortunately the sergeant went through and marked the real clues with the word "CLUE" in all caps.

If you get stuck, open one of the hint files (from the CL, type 'cat hint1', 'cat hint2', etc.).

To find out the solution, open the file 'solution' (from the CL, type 'cat solution').

To get started on how to use the command line, open cheatsheet.md or cheatsheet.pdf (from the command line, you can type 'nano cheatsheet.md').

Don't use a text editor to view any files except these instructions, the cheatsheet, and hints.

とりあえず、mysteryディレクトリに移動します。ここから捜査開始です。

> cd mystery 
> ls
crimescene  interviews/ memberships/    people      streets/    vehicles

以下、ネタばれ注意

まずは事件現場から

crimescene (事件現場) ファイルがあるので見てみましょう。

> head crimescene 
*******
Crime Scene Report #262227712435
********

'Nor I,' said the March Hare.

Alice sighed wearily. 'I think you might do something better with the
time,' she said, 'than waste it in asking riddles that have no answers.'

'If you knew Time as well as I do,' said the Hatter, 'you wouldn't talk

> wc crimescene 
   13565   74683  426455 crimescene

事件現場のリポートをまとめた巨大なテキストファイルのようです。こんなものを全部読んでいられないので、instructionsにあった通りCLUE (糸口) を調べてみましょう。

> grep CLUE crimescene 
CLUE: Footage from an ATM security camera is blurry but shows that the perpetrator is a tall male, at least 6'.
CLUE: Found a wallet believed to belong to the killer: no ID, just loose change, and membership cards for AAA, Delta SkyMiles, the local library, and the Museum of Bash History. The cards are totally untraceable and have no name, for some reason.
CLUE: Questioned the barista at the local coffee shop. He said a woman left right before they heard the shots. The name on her latte was Annabel, she had blond spiky hair and a New Zealand accent.

3つの糸口がありました。

  • 犯人は背の高い男で、少なくとも6フィートある
  • 犯人のものと思われる財布の中には、小銭といくつかの会員証があった。カードには名前などはなかった
  • 銃声が慣る直前まで、現場近くのコーヒー屋にAnnabelというニュージーランド鈍りの女性がいた

この中で有力そうな手掛りは最後のものです。

では、Annabelさんを捜しましょう。

> grep Annabel people 
Annabel Sun F   26  Hart Place, line 40
Oluwasegun Annabel  M   37  Mattapan Street, line 173
Annabel Church  F   38  Buckingham Place, line 179
Annabel Fuglsang    M   40  Haley Street, line 176

4人見つかったようですが、これらの表示にはどういう意味があるのでしょう? headしてみます。

> head people
***************
To go to the street someone lives on, use the file
for that street name in the 'streets' subdirectory.
To knock on their door and investigate, read the line number
they live on from the file.  If a line looks like gibberish, you're at the wrong house.
***************

NAME    GENDER  AGE ADDRESS
Alicia Fuentes  F   48  Walton Street, line 433
Jo-Ting Losev   F   46  Hemenway Street, line 390

1行に4つの項目 (名前、性別、年齢、住所) が並んでおり、その人に会いたければstreetsディレクトリ内の住所名ファイルからその行を取得すればよいとわかりました。

4人なので目視でわかりますが、タブ区切りなのでF (女性) で搾り込んでおきます。

> grep -i Annabel people | awk -F\\t '$2=="F"'
Annabel Sun F   26  Hart Place, line 40
Annabel Church  F   38  Buckingham Place, line 179

目撃者への聞き込み

まずは、ひとりめのAnnabel Sunに会いましょう。Hart Place, line 40ですね。

> head -n 40 streets/Hart_Place | tail -n 1
SEE INTERVIEW #47246024

会ってインタビューした結果がこちら

> cat interviews/interview-47246024
Ms. Sun has brown hair and is not from New Zealand.  Not the witness from the cafe.

どうやらコーヒー屋にいた人とは別人のようです。

続いてふたりめのAnnabel Church。

> head -n 179 streets/Buckingham_Place | tail -n 1
SEE INTERVIEW #699607

> cat interviews/interview-699607
Interviewed Ms. Church at 2:04 pm.  Witness stated that she did not see anyone she could identify as the shooter, that she ran away as soon as the shots were fired.

However, she reports seeing the car that fled the scene.  Describes it as a blue Honda, with a license plate that starts with "L337" and ends with "9"

コーヒー屋にいた人でした。「犯人を見ていないが、現場から走り去る車を見た。車は青のホンダでナンバーはL337で始まり、9で終わっていた」とのこと。

車の所有者は?

目撃情報を基に車を調べていきます。まずはてきとうにナンバープレートだけで調べてみます。

> grep L337 vehicles
License Plate L337ZR9
License Plate L337P89
License Plate L337GX9
License Plate L337QE9
License Plate L337GB9
License Plate L337OI9
License Plate L337X19
License Plate L337539
License Plate L3373U9
License Plate L337369
License Plate L337DV9
License Plate L3375A9
License Plate L337WR9

10台以上見つかったようですが、得られる情報がよくわからないので、ファイル形式を確認します。

> head vehicles
***************
Vehicle and owner information from the Terminal City Department of Motor Vehicles
***************

License Plate T3YUHF6
Make: Toyota
Color: Yellow
Owner: Jianbo Megannem
Height: 5'6"
Weight: 246 lbs

複数行の「キー: バリュー」形式のようです。処理が面倒なので1行にまとめてから、得られた情報に基づいてgrepしていきます。

> cat vehicles | awk '/^License Plate/{print out; out=""} {out = out "\t" $0}' | grep L337 | grep 'Make: Honda' | grep 'Color: Blue'
    License Plate L337QE9   Make: Honda Color: Blue Owner: Erika Owens  Height: 6'5"    Weight: 220 lbs 
    License Plate L337539   Make: Honda Color: Blue Owner: Aron Pilhofer    Height: 5'3"    Weight: 198 lbs 
    License Plate L337369   Make: Honda Color: Blue Owner: Heather Billings Height: 5'2"    Weight: 244 lbs 
    License Plate L337DV9   Make: Honda Color: Blue Owner: Joe Germuska Height: 6'2"    Weight: 164 lbs 
    License Plate L3375A9   Make: Honda Color: Blue Owner: Jeremy Bowers    Height: 6'1"    Weight: 204 lbs 
    License Plate L337WR9   Make: Honda Color: Blue Owner: Jacqui Maher Height: 6'2"    Weight: 130 lbs 

6件にまで搾られました。とりあえずこの6台の車の所有者を調べてみます。

> cat vehicles | awk '/^License Plate/{print out; out=""} {out = out "\t" $0}' | grep L337 | grep 'Make: Honda' | grep 'Color: Blue' | awk -F\\t '{print $5}' | cut -b 8-
Erika Owens
Aron Pilhofer
Heather Billings
Joe Germuska
Jeremy Bowers
Jacqui Maher

名前を取れたので、そこからpeopleで車の所有者の情報を取得します。

> cat vehicles | awk '/^License Plate/{print out; out=""} {out = out "\t" $0}' | grep L337 | grep 'Make: Honda' | grep 'Color: Blue' | awk -F\\t '{print $5}' | cut -b 8- | sed 's/ /\\ /' | xargs -J % -n 1 grep '%' people 
Erika Owens F   56  Trapelo Street, line 98
Aron Pilhofer   M   16  Claybourne Street, line 145
Heather Billings    F   38  Culbert Street, line 19
Joe Germuska    M   65  Plainfield Street, line 275
Jeremy Bowers   M   34  Dunstable Road, line 284
Jacqui Maher    F   40  Andover Road, line 224

さらに、始めの情報で「犯人は身長6フィート以上の男」ということなので、もう少し搾り込みます。

> cat vehicles | awk '/^License Plate/{print out; out=""} {out = out "\t" $0}' | grep L337 | grep 'Make: Honda' | grep 'Color: Blue' | awk -F\\t '{print $5}' | cut -b 8- | sed 's/ /\\ /' | xargs -J % -n 1 grep '%' people | awk -F\\t '$2=="M"'
Aron Pilhofer   M   16  Claybourne Street, line 145
Joe Germuska    M   65  Plainfield Street, line 275
Jeremy Bowers   M   34  Dunstable Road, line 284

3人にまで搾り込みましたので、この3人を順番に調査していきましょう。

(続く)

おわりに

The Command Line Murdersを遊んでみました。

「(続く)」とありますが、ゲームの続きがあるだけで、ブログで続きを書く気はありませんのであしからず。

`man`を見て普段使わないようなオプションを使ったりとゲームを通じてシェルスクリプト力が上がる気がするので、興味があるかたはぜひプレイしてみてください。

関連リンク

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。