Yoyogi Jotaro の何だかよく分からないブログ

主にゲームブックについて語ります。他、北海道ネタ、ホリエモン、雑談など

ゲームブック制作ツール「Twine」の利用方法その3。変数と乱数とif文でバトルシステムも夢じゃない!

こんにちは。

さあみなさん、選択肢を創りましょう。

ゲームブック投稿サイトの管理者です。

今回はTwineのマクロ機能にも切り込んでいきます。

マクロと言えばExcelのマクロを思い浮かべる方もいらっしゃるでしょう。

それに似たようなもんです。

あとタイトルで「if文」と謳っていますが、それもExcelのif関数をご存知であればご理解が早いと思います。

今回からちょっとややこやしくなりますが、慣れれば簡単です。

習うより慣れろなので、ぜひおつきあい下さい。

バトルシステムも盛り込めるんですよ!

f:id:oniisann:20171127203210j:plain

↑今回作るプログラムはCPUとあなたでサイコロを振り合い、出目の大きい方が10点ゲットするというちょっとしたゲームもどきです。

 

目次

変数

プログラミングではしばしば出てくる変数という概念。

中学生のとき数学で方程式とか覚えていますか?

x=0

とかってやりましたね?

それに近い感覚です。

TwineのHarloweフォーマットでは、アルファベットの前にドルマーク $ をつけて変数として扱うことが出来ます。

そして、数値を代入しておくことが出来ます。

その命令が下記のとおりです。

(set: $アルファベット = 数値)

具体例はこんな感じです。

(set: $a = 0)

上記を実行すると、$aと言う変数に0が代入されます。

Twineが$a0だということを覚えていてくれると考えてもいいでしょう。

$aがいくつであるか表示させるには単純に

$a

と表記するだけでOKです。

$a10加算させたい場合は下記のように記述します。

(set: $a = $a + 10)

以上を踏まえ、リンクをクリックすると10点ずつ加算するプログラムを書くと次のとおりになります。

f:id:oniisann:20171127203224j:plain

それを実行するとまず点数が0と表記され、

f:id:oniisann:20171127203234j:plain

1度「増加」のリンクをクリックすると10になります。

f:id:oniisann:20171127203305j:plain

以下、押し続けると20,30,40、……と果てしなく加算されます。

乱数

ゲームブックといえばバトルシステムが盛り込まれている作品もあります。

そのなかで、あなたは何回サイコロを振りまくったことでしょう。

あるいは振ったことにして出目はあなたが勝ったことにしていたことでしょう。

そんな煩わしい作業もTwineなら簡単にできてしまいます。

デタラメな数字を発生させる命令があるのです。

(random: 整数値)

↑この命令は0から整数値までのデタラメな数字をひとつ発生させます。

数字の幅を指定したいんならこちら。

(random: x,y)

↑こちらは整数値xから整数値yまでのデタラメな整数値一つを発生させる命令です。

実際にこちらのコードを記述して実行してみましょう。f:id:oniisann:20171127204009j:plain

f:id:oniisann:20171127204007j:plain

↑筆者が実行したときは上記のとおりとなりましたが、皆さんは違った数字の結果になったかと思います。

リンクをクリックすると数字が変わるさまをご確認下さい。

サイコロバトル

変数乱数

そして冒頭に触れたif文

それがあればサイコロバトルのプログラムを作成できます。

出目を決める

では最初に、CPUの出目を決めましょう。

例えば変数$cpuに1から6までの乱数を代入したい場合、どうしたら良いのでしょうか?

いろいろあるでしょうが、順当には下記の様な記述が考えられます。

(set:$cpu = (random: 1,6))

setrandomそれぞれでカッコを用いるので、最後カッコカッコで締めくくりです。

同様にあなたの出目は変数$youを使いましょう。

場合分け

そして

  1. あなたの出目がCPUより大きければ「あなたの勝ち」と表示し、あなたの点数を10点加算
  2. あなたの出目とCPUが同じなら「引き分け」と表示し、点数はそのまま
  3. それ以外なら「あなたの負け」と表示し、CPUの点数に10点加算

という条件判断と作業を行うとしましょう。

CPUの点数を$cpu_score、あなたの点数を$your_scoreと言う変数をあてがいます。

Twineのif文は下記の文法をとります。

(if:真偽)[表示する内容や命令]

1の条件判断を文法に当てはめると下記の様に記述できます。

(if:$you > $cpu)[あなたの勝ち(set:$your_score = $your_score + 10)]

同様に2の場合はこうです。

(else-if:$you is $cpu)[引き分け]

else-ifは、if文の条件に当てはまらないけど、さらに確認が必要な場合に用いる命令です。

さて、3の場合はどう書きますか?

(else:)[あなたの負け(set:$cpu_score = $cpu_score + 10)]

↑今回の場合分けで$you<$cpuはそれ以外という意味になります。

その場合の命令はelseと言う命令を使うと便利です。

コード

サイコロバトルのコードをまとめると、下記のとおりとなります。

f:id:oniisann:20171127210038j:plain

実行したら次の通り。

f:id:oniisann:20171127210043j:plain

↑のっけから負けてますね。

バトルシステム

今回サイコロバトルをご紹介したのは他でもありません。

これを応用して

  • 体力点
  • 技術点
  • 武器による加点

などを加味すれば往年のゲームブックのバトルシステムが出来上がるのです。

つまりはクリック一つでサイコロを転がしたり、出目を計算したり、どちらがかって体力を引いたり……と言う面倒な作業が解決するのです。

読者に優しいUIとなりますよ。

もちろんTwineを使ってダンジョン作成などもお茶の子さいさいなんですよ。

まとめ

そんな感じで、今回は今までと比べて多少しち面倒くさい内容だったかとは思いますが、慣れてしまえばひらめいてもっとすごい作品が出来上がると思いますよ。

はじめは乗れなかった自転車が、いつの間にか乗れるようになるようなものです。

焦らずじっくりと、Twineを楽しんで下さい。

 

以上、北海道からでした。

 

さて、あなたはどうする?
GameBook.xyzへもどる→1
Googleへ行く→14