気狂いなすび 2024/05/11 07:40

前に吉里吉里ZでちょっとしたRPG要素を作ろうと思った時のまとめ①(健全記事)

ランダムマップとかマップ移動編!!

ランダムマップを作りたい

ランダムマップを作りたい!! と思ったのも、自分は別にそんなに別にプログラミングとかできる人間じゃなくて、
ぶっちゃけunityどころかRPGツクールとかも触ったことのない人間でして、
ゲームを作るサークルと言っても自分は吉里吉里とティラノスクリプトしか触ったことがありませんでした。
ですが、ノベルゲーム以外にもちょっとしたRPG要素を作れたりしないかなーと思った時に、
ずぼらな自分なので、新しい何かじゃなくて、今まで使ってた吉里吉里で簡単にできれば、
あまり他にはない自分らしい作品ができたりしないかなーと思ったのが最初です。
でも吉里吉里とかノベルゲームツールでRPG要素ってなんだよって思った時に、
実は前に実験的な試みとして、
ほとんどじゃんけん要素みたいな戦闘のみのゲームを吉里吉里で作ったことがありました。


作品としては「いねむりクエスト」という作品で、
5回戦闘ができて、そのうちランダムで出てくる敵と戦うことによって、
エンディングが色々と変わっていくという作品です。
(でも、作品自体はちょっとバグとかあったり、絵も満足いかなくて自分的には満足できなかった感じ……)
この作品の戦闘の考え方をベースに敵と仲間を複数用意して、優先順位を決めて、
さらにマップ要素を入れれば吉里吉里でも結構RPGっぽいことができるんじゃないかと思い、
いっちょやってみるか!! と思った次第です。

マップ移動の考え方

っていっても吉里吉里でマップってどうすれば?? と思ったんですけど、
原理的には昔大学生のときに軽くやってたプログラミングの授業を思い出しまして、
ほらよくプログラミングの初歩の配列の出力とか表示するとかのあれ。

例えば配列という変数の格納できる列をどこで改行するかって話で、

0,0,0,0,0,0,0,0,0,0,

という10っこの文字列があったとして、
これを五文字ごと改行が入る様にすれば、

0,0,0,0,0,
0,0,0,0,0,

という表示したとして、これを繰り返して行けば、5×nのマップが完成するのかなと。

しかもそうなったとき、改行の数と何番目の数字かということがわかれば、
こんどは座標を設定できるはず!

例えばさっきの

0,0,0,0,0,
0,0,0,0,0,


だったとして7文字目の座標を、知りたいときは、

7(指定したい文字数目) / 5(改行するときの数) =1(x軸) と余り 2(y軸)

なので答えの1は改行の数で、つまりz座標が2行目なので、

0,0,0,0,0,
⓪,⓪,⓪,⓪,⓪,

と下の段が指定されて(ちなみに1行目は答えが0になる)、

余りの2が座標になって、
つまりy座標の2列目が指定されて、

0,0,0,0,0,
0,⓪,0,0,0,
  ↑
これが指定されるということになります。

これで指定したい座標を考えていこうと思いました。
なんかちょっと複雑じゃない?? って思うかもしれないけど、
自分としてはこういう考え方が楽なのかなと、
例えば、今の指定された座標からマップ的に上に行きたいときは、座標を-5(改行をするときの数)をする。
すると、

  ↓ここに移動
0,⓪,0,0,0,
0,0,0,0,0,

逆もしかりで、下に移動するときは+5をする。

そしてこれを吉里吉里でいうことろの選択肢に置き換えて、
上に移動したいときは+5、-5して、横に移動したいときは-1、+1をして、
もしも移動先が壁なら計算をしないようにすれば、
とりあえずこれで、移動と自分の場所を表示できるようになる感じです。

さらにそこから
0を壁、1をスタート、2を道、3をゴールと設定します。
すると、
0,0,0,0,0,
0,1,2,2,0,
0,0,0,3,0,
0,0,0,0,0,

みたいなマップで移動の遊びが吉里吉里でもできたりすると思います。

ランダムマップの考え方

でそこからランダムにマップを生成するとなるとどうすればいいのかというと、
スタート位置とゴール位置を乱数でまず決めて、
(もちろん被らないようにif条件とかでスタート位置とゴール位置が一緒だったら戻るみたいな設定する)
始まりと終わりが決まったら、

そこまでの道を作る、

これがなんだかんだ一番面倒な作業だと思います。

自分がとった考え方は、スタート位置とゴール位置を比べさせて、
x軸とy軸の比較をして、その両方が同じ数になるようにループをさせて、
その通り道を道にするようにしたりしました。

例えば、またさっきのマップで言うなら、

0,0,0,0,0,
0,1,0,0,0,
0,0,0,3,0,
0,0,0,0,0,

スタートの位置はx軸1、y軸2なのに対して、
ゴール位置はx軸2、y軸4になります。

まず配列の順番を比べて、スタートは7番目の配列、ゴールは14番目の配列。
自分の場合は、配列のn番目が大きい方から始点にするようにしましたので、
x軸を比較しスタートはx1でゴールがx2なので、ゴールを始点に
道を作る削岩的な動く位置を作らせておき、
ゴールの配列から始まる削岩機の配列の番目に-5をする。
そしてその場所を道として設定させる。

0,0,0,0,0,
0,1,0,2,0,
0,0,0,3,0,
0,0,0,0,0,

すると道ができます。
そしてもう一度x軸を比較させて、
x軸はどちらも1なので、これでx軸比較は終了。
今の道を作る削岩機の配列は9番目にいます。

次はy軸を比較させて、
スタートのy2、ゴールy4なので、
削岩機の位置を-1させて、

0,0,0,0,0,
0,1,2,2,0,
0,0,0,3,0,
0,0,0,0,0,

となります。
そしてもう一度y軸を比較させると誤差1だけ。
つまり、次いどうしたらスタートにたどり着くので、これで道は完成ということになります。

これでとにもかくにもスタートとゴールへの道が完成して、
さらに移動のマップが完成します。

ちなみにそのときに配列を表示させて、ツイッターに載せた時の画像がこんな感じです。
あと今回は説明でわかりやすく、配列の始まりを左上をx0y1にしてますが、
この画像でもわかる通り、自分はその逆で、右下をx0y1にしてたりします。

ならわかりやすいように統一しろよって思うかもしれませんが、
あくまでここのでの説明は概論的なものとしてるので、
とりあえず原理を理解してもらえればと思って、わかりやすそうな方を採用しています。

まぁこんな感じで第一段階はOKって感じで、次はこのスタート位置やゴール位置を複数作り、それを部屋としたりしたことや、
画面の表示なんかを説明していきたいと思います。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

限定特典から探す

記事を検索