見出し画像

ちょっと寄り道、変数ってなぁに?

Pi STARTER(ラズベリーパイ用BASIC言語パッケージ)版
ひとりで遊べる人狼ゲームを公開中(要ラズパイ&Pi STARTER)

http://www.ne.jp/asahi/chitose/net/download/jinrou/

そう言えば前編で何の説明もなく「変数」って言葉を使っちゃったけど、これだってプログラミング初めての人には何言ってるんだか分からないよね。ごめんごめん。と言いつつ私もプログラミングド素人なんで、どこまでうまく説明できるか分からないんだけど。

と言うことで、今日は後編の前に「変数ってなぁに?」いってみましょう。

画像5

例えば今回作ってる「人狼ゲーム」。村人が10人いるとして、そのうち2人が人狼。これを見つけるのがゲームの目的でしたよね?

ところで、単に「村人が10人」じゃ誰が誰だか分かりません。それじゃ困るので、とりあえず仮に名前を付けてみましょう!

画像6

ということで、いきなりですが命名します!
「A」「B」「C」「D」「E」「F」「G」「H」「I」「J」
いまからこれがキミたちの名前です!!
(実際、初期設定の名前は頭文字がアルファベット順になるように付けた)

ところでこれを読んでいるあなた、とりあえずあなたの名前は一番先頭の「A」にします。これから「おいAこっち向け!」って言われたらそれはあなたのことだから向かなきゃダメよ。
ではさっそく、
「おいA、こっち向・・・くな!」
…やーいひっかかった(ぁぁ虚しい)。

ところでA、あんたに聞く。あんた実は人狼なんじゃないの?早く吐いた方が身のためだぞ。故郷の母親は今頃泣いてるぞ。カツ丼食うか?え?自分が何者か分からないって?自分探し中の若者かよ!

ということで無理やり名前を付けたは良いのですが、彼らに決まっているのはまだ名前だけで中身はまだ空っぽ、いわば無職のフリーターです。これをプログラミング的に表すとこういうことです。

A=0
B=0
C=0
D=0
E=0
F=0
G=0
H=0
I=0
J=0

ではどうやって職に就くかなんですが、もちろん人狼の役職がハローワークに行って決まるワケじゃありません(職業訓練で人狼になれたらそれはそれでスゴイですが)。

普通「人狼ゲーム」ではゲームの最初に各プレイヤーが1枚カードを引いて、そのカードに書かれている内容で役職が決まります。プレイヤーが10人いる場合、役職は人狼2人、予言者1人、ボディーガート1名、霊媒師1名、裏切り者1名、普通の村人4名ということになります。
(役職のバリーエーションは「人狼ゲーム」のバージョンによって異なりますので、ここに書いているのはあくまで一例です)

画像1

もちろんコンピューターは実際に手を出してカードをひいたりできません。なので、今回のプログラムではカードをひく代わりに機械の中でサイコロを振って役職を決めています。通常サイコロの目は1~6ですが、コンピューターは0から数える習慣があるようなので、0~5の目が出るサイコロを各プレイヤーごとに振り、出た目で次のように役職を決めています。

0を出したら:普通の村人(4人)
1を出したら:予言者
2を出したら:ボディーガード
3を出したら:霊媒師
4を出したら:裏切り者
5を出したら:人狼(2人)

彼らの役職がこれで決まります。まさに人生バクチですな。
実際に私の作った「人狼ゲーム」はこの方法で各プレイヤーの役職を決めています(コード見て分かる方はダウンロードして確認してみてください)。

画像8

その際に役職の人数は早い者勝ちとし、すでに誰かがなっている役職の目を出したら振り直しとします。で、最終的にすべての役職が出そろうとこうなるワケです。じゃーん!!

5(人狼)
B=2(ボディーガード)
C=4(裏切り者)
D=0(普通の村人)
E=1(予言者)
F=5(人狼)
G=0(普通の村人)
H=0(普通の村人)
I=0(普通の村人)
J=3(霊媒師)
※ あくまで例。サイコロの目次第でいくらでも変わります。

画像2

もともと彼らA~Jは全員「0」でしたが、そこにサイコロ振って数字を入れたから、空っぽの彼らに魂が…もとい役職が与えられました。約4名何者にもなれませんでしたが、まぁ社会ってのはそういうものです(ヒドイ…)。

このA~Jをプログラムの世界では「変数」と言うのです。
おを、やっと「変数」の話に繋がったぞ!

「変数」というのは言うなれば入れ物のようなもので、最初は空っぽ(つまり0が入っている)。そこに何らかのやり方で数値を入れることで、はじめて意味を持つわけですね。
「変数」はその名の通り「変わる数」なので、今回の例のようにサイコロで入る値が決まったり、プレイヤーの何らかの選択の結果決まったり、ゲームの成り行きで変化したりします。

画像3

そしてプログラムは、ところどころでいろんな変数の値を見ながら動き方を変えていきます。例えば今回の「人狼ゲーム」で役職の変数に「4」や「5」が入っているプレイヤーは、投票時に信用度の高いプレイヤーから潰すように行動するべくプログラムで定めています。この「信用度」だって各プレイヤーに定めた変数です。

で、ここで前回言ってた「DIM」文の話に繋がるのですね。
各プレイヤーにいろんな要素を持たせたいから、単に「A」とか「B」じゃ足りないのよ。なので実際のプログラムでは、

A(~J)[1]=信用度
A(~J)[2]=役職

という風にDIM文を使ってA~Jにナンバリングし、よりゲームを深いものにしているってわけ。ありがとうDIM文、足を向けて寝られません。

画像7

かなり回りくどい説明になってしまいましたかね?
でも、正直いろんなプログラミングの解説書をパラパラ見したけれど、変数についてまったくのド初心者が見て分かるように説明している本はひとつもないと言っていいくらいです。

「A=A+1」とか、みんな当たり前のように書きますが、こういうのがいきなり出てきた瞬間にアウトなんですよ初心者は。
「A」って何?何でそこ英語が出てくるの?とかなって頭の中が真っ白になっちゃうのがド素人なんですよ。
「初心者向け」とか言って人に何かを教えようとする者は、本当の初心者がまず何から分からないかについて、神経質すぎるほど考えを巡らせなくてはならないと思います。

とはいえ私の説明も冗長に過ぎましたかね?
次回(ちょっと先になるかも)はまた、仕様書の話に戻ります。

この記事が気に入ったらサポートをしてみませんか?