インタラクティブな「数当てゲーム」を作りながらBashを学ぼう
新しいプログラミング言語を学ぶのは楽しいものです。私が新しい言語に挑戦するときは、まず変数の定義、文の書き方、式の評価という3つの基本概念に焦点を絞ります。これらをひと通り理解できれば、あとは自力で習得できることがほとんどです。多くのプログラミング言語には共通点があるため、一つの言語をマスターしていれば、次の言語を学ぶ際には固有の細部や違いを押さえるだけで済みます。
新しい言語の練習として、私はいくつかのテスト用プログラムを書くようにしています。その中でよく作るのが、シンプルな「数当てゲーム」です。コンピュータが1から100までの数字をランダムに選び、プレイヤーがそれを予想します。正解するまでプログラムはループを続けます。
この「数当てゲーム」は、変数への値の代入、文の記述方法、条件判定、ループ処理といった、プログラミング言語における重要な概念を網羅的に練習できる、絶好の実践教材なのです。
Bashで数当てゲームを作る
Bashは、ほとんどのLinuxシステムで標準となっているシェルです。リッチなコマンドラインユーザーインターフェースを提供するだけでなく、スクリプトという形式で完全なプログラミング言語機能も備えています。
Bashに馴染みがない方は、まず以下のような入門記事を読んでおくことをおすすめします。
- Bashとは何か?
- Bashプログラミング入門
- システム管理者のためのBashスクリプティング入門
- Bashでの関数の書き方
- Bashについてさらに詳しく
それでは、「数当てゲーム」のBash版を書いてみましょう。以下が私の実装例です。
#!/bin/bash
number=$(( $RANDOM % 100 + 1 ))
echo "Guess a number between 1 and 100"
guess=0
while [ "0$guess" -ne $number ] ; do
read guess
[ "0$guess" -lt $number ] && echo "Too low"
[ "0$guess" -gt $number ] && echo "Too high"
done
echo "That's right!"
exit 0
スクリプトの解説
スクリプトの最初の行にある #!/bin/bash は、このスクリプトをBashシェルで実行するようLinuxに指示するものです。すべてのスクリプトは #! という文字のペアで始まります。これは「シェバン(shebang)」と呼ばれ、このファイルがシェルスクリプトであることを示します。#! の直後には、実行に使うシェルのパスを指定します。この例では /bin/bash、つまりBashシェルを指定しています。
変数に値を代入するには、変数名の後に = 記号を続けて書きます。たとえば guess=0 という文は、guess 変数にゼロを代入します。
read 文を使うと、ユーザーに入力を促すこともできます。read guess と書くと、Bashはユーザーがテキストを入力するのを待ち、その値を guess 変数に格納します。
変数の値を参照するには、変数名の前に $ を付けます。つまり、guess 変数に格納した値は $guess で取り出せます。
変数名は自由に付けることができますが、Bash自身が使用するために予約している特殊な変数がいくつかあります。その一つが RANDOM で、参照するたびに非常に大きな乱数を生成してくれます。
値を格納すると同時に演算を行いたい場合は、文を特別な括弧で囲む必要があります。こうすることで、Bashはまずその文を実行し、その結果を = で変数に格納します。数式を評価するには、文を $(( )) で囲みます。二重括弧は算術式であることを意味します。先ほどの例では、number=$(( $RANDOM % 100 + 1 )) が式 $RANDOM % 100 + 1 を評価し、その結果を number 変数に格納しています。
算術演算子としては、+(加算)、-(減算)、*(乗算)、/(除算)、%(剰余)などの標準的なものが使えます。
つまり、number=$(( $RANDOM % 100 + 1 )) という文は、1から100までの間の乱数を生成するのです。剰余演算子(%)は、2つの数を除算したときの余りを返します。この場合、Bashは乱数を100で割り、0から99の範囲の余りを得ます。そこに1を加えることで、1から100までの乱数が完成します。
Bashは条件式や、ループのようなフロー制御もサポートしています。数当てゲームでは、guess の値が number と等しくない限り、Bashはループを続けます。予想した数が乱数より小さければ「Too low(小さすぎる)」と表示し、大きければ「Too high(大きすぎる)」と表示します。
実際の動作
スクリプトが書けたら、実行して数当てゲームを遊んでみましょう。正解が見つかるまで予想を繰り返します。
Guess a number between 1 and 100
50
Too high
30
Too high
20
Too high
10
Too low
15
Too high
13
Too low
14
That's right!
スクリプトを実行するたびに、Bashは異なる乱数を選びます。何度でも遊べるのが魅力です。
この「数当てゲーム」は、新しいプログラミング言語を学ぶときの入門プログラムとして最適です。ごくシンプルな形で、複数の一般的なプログラミング概念を練習できるからです。さまざまな言語でこのゲームを実装してみれば、各言語のコアとなる概念を確認し、細部の違いを比較することもできます。
あなたのお気に入りのプログラミング言語は何ですか?その言語では「数当てゲーム」をどのように書きますか?本連載では、他のプログラミング言語による実装例も紹介していきますので、ぜひお見逃しなく。
-
Grammarlyの代替ツール特集|ライティング力を磨くおすすめ英文校正ツール5選
文章校正ツールといえば「Grammarly」というほど、同ツールは世界中のライターに愛用されています。しかし、選択肢をいくつか持っておくのは賢明なこと。盗作(剽窃)チェッカー、より高性能な翻訳機能、充実した辞書データベースなど、「Grammarlyにもう少し機能があれば」と感じる瞬間は少なくありません。人間である以上、誰でも多かれ少なかれミスを犯しますし、文脈を読み違えてしまうこともあります。そこで本記事では、あなたの中の「文法へのこだわり」を満たし、より良い書き手へと成長させてくれるオンライン・オフラインの校正ツールを厳選してご紹介します。1. Ginger無料で使えるGrammarlyの代
-
「Learn Math App: Game of Numbers」で基本的な算術演算を楽しく学ぶ方法
数学が苦手ですか?実は私も数字やその扱い方には苦手意識がありました。しかし、数学から逃げるのは解決策ではありませんし、それをお子さんに教えてしまうわけにもいきません。そこでご紹介したいのが、Systweakが開発した「Learn Math App」。お子さんが数学に興味を持つきっかけを作り、便利なコツも一緒に学べる楽しいアプリです。お子さんが問題を解いてメダルを獲得する様子を見守りながら、保護者の方自身もゲームを試してみれば、数学への苦手意識を軽減できるかもしれません。 Learn Math Appの特徴と仕様 Learn Math Appは、小学1年生から中学2年生(グレード1〜8)までの