見出し画像

変数表はたいへんだ

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

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

前々回まででゲームを作るための仕様書を書いたので、お次はそれに基づいて変数表を作成します。

プログラムが小規模のものだったら変数表なんていらないと思うのですが、さすがにここまで規模がデカくなると、ちゃんと整理してないと絶対あとで詰む、と思ったのでとりあえずの変数表書いてみました。こんなです。

変数表0jpg

細かくて分かんないですよね。とりあえず私の場合はエクセルで大雑把に縦軸A~Zまで、横軸1~10までの表を書いて(DIM文対応)、仕様書に基づいてこういう変数要るだろう、というのを記入していきました。
とはいえこの時点で投票のルーチンとかはどう作るのか曖昧だったため(というかルーチンが何かすら理解していなかった)、Nから先は当初書き込まれていませんでした。個人で作ってるから許されるんだろうねこういうの。

んでそれが、しまいにはこうなるわけですよ。

変数表2jpg

いやあらためて何このグチャグチャ感。あとからあとから追加されまくっていく仕様に振り回されて、もう書いた本人すら何が何だか分からない有り様になっています。いやーゲーム開発するってこういうことなんですね。本職の人が見たらブチ切れられそうですが。

一応(把握している限りで)、最終的な変数がどうなったかを説明します。

A~J
各キャラクター(10名)のパラメーター。プレイヤーはA。
DIM文を使い、細かいパラメーター設定を行なってます。
最終的に1キャラあたり50個の設定項目となりました。

A$~J$
各キャラクターの名前。この「人狼ゲーム」では任意に全キャラの名前を設定でき、保存できるように作っています。

A~J[1]
各キャラのベースとなる信用値。初期値10としました。

A~J[2]
役職。

A~J[3]
信用値に1d6(サイコロ1個)を加えた値。
投票時などで信用最大(最小)判定するときに乱数要素を加えています。

A~J[4]
一番信用できる(MAX)/できない(MIN)を決めるための変数。
1だと最も信用できない、2だと最も信用できる。

A~J[5]
投票時に何人から指名されたか。

A~J[6]
追放/死亡フラグ。
1で追放、2で直前に死亡→翌日になると3に移行。
ゲームの進行上、前日死んだか否かを見るようにしています。

A~J[7]
前回ボディーガードに守られた履歴。

A~J[8]
予言者に占われた結果。
1で人間、5だと人狼としました。

A~J[9]
昨日追放された者。
霊媒師が占うのに必要。

A~J[10]
議論シーンでその人物がその日に発言したかチェック。

A~J[11]~[20]
それぞれのキャラがそれぞれに対して持つ感謝と恨みの感情。
「人間だと思う」などかばってもらえるとこの値が1d6増加。
指名されたり、疑われたりするとこの値が1d6減少します。

A~J[21]
予言者と名乗った(嘘を付いている場合も含む)。
そのキャラは以後、予言者としてふるまいます。

A~J[22]
投票時、決選投票が重なったときに一度候補者となったものをチェックしておくのに使用。最後のデバッグで加わりました。

A~J[23]
霊媒師と名乗った(嘘を付いている場合も含む)。
そのキャラは以後、霊媒師としてふるまいます。

A~J[31]~[40]
預言者や霊媒師を名乗ったとき、誰を人間、誰を人狼と言ったか。

A~J[41]~[50]
上記A~J[31]~[40]のバックアップ。
これを比べることで、発言の矛盾を防いだり、プレイヤーの見え透いたウソを見破る役割を果たしています。

K
役職。0=普通の村人、1=予言者、2=ボディーガード、3=霊媒師、4=裏切り者、5=人狼。

L
発言カウント数のチェック。

M
経過日数。

M$
プレイヤー発言時のキー入力に使用。

N
役職用のいろんな変数に使用したが、実質ボディーガードの成功判定にしかまともに使われませんでした。

N$
ENTERキーを押させるときに使用。何でN$にしたかというと、別のプログラムからまんまパクリしてきたため(笑)。

O
投票時カウントに使用。
「0」(ゼロ)と間違いやすいので、一般的には使用を推奨されません。

P
現在アクティブになっているプレイヤー。

P$
発言内容のテキスト。

Q
投票に参加した人数。

R
ラウンド。現在誰の仕事中か、もしくは何が行われている最中か。
1=予言者、2=ボディーガード、5=人狼、6=投票中、7=偽物の予言者、8=プレイヤーが預言者を名乗るとき

S
最終的には使われなかったっぽい。
こういうのまだ残存してるなぁ…。

T
予言者や霊媒師と名乗った人数や、人狼と言われた人物が何人いるかをチェックしています。DIM文で増やして用いています。
後から使用目的が何かと増え、最終的にどうなったのか作者もよく把握していません(笑)。

U
プレイヤーがウソを付いたとき、そのウソの内容。
何であれこれが1以上になったとき、プレイヤーは投票で吊るされます。

V
最大信用(MAX)のカウントに使用。

W
最小信用(MIN)のカウントに使用。

X
任意の乱数を発生させるのに使用。

Y
Xと同じ目的で使用(Xを何かに使っているときなど)。

Z
テストモード(あるんですそういうのが)。

SCOREとHSCORE
スコア。
仲間にSCORE_Y、SCORE_R、SCORE_Gなどが存在。
ボーナスという要素が後から加わったため。
HSCOREがハイスコア。更新されると外部ファイルに保存。

YDMとYDMG
予言者を名乗った偽物が占った人数のカウント。
デバッグの結果どうしても必要になり苦し紛れに作った変数。

CONDATA各種とWIDDATA
解像度情報。プレイ時の解像度を変えられる機能を後から追加したので。

ふぅ疲れた。たぶんこれで全部だと思うんだけど…。

ほとんどの変数がアルファベット1文字なのに、SCOREとか以降が単語となっているのは、作成当初「変数を任意の単語で作って良い(ただし命令や関数とかぶらないこと)」というルールを知らなかったためで、これを当初知っていれば絶対に「O」とか使わなかったと思います。
昔のBASICはそんなじゃなかった気がするんだけど、やっぱりそのあたりはアップデートされているのかな?

ということで、次回からはいよいよ作り始めていく過程です。

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