気狂いなすび 2024/06/08 15:45

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

マップ移動とランダムマップ部屋!!

画像の表示の考え方

前回とりあえず、配列を使って、ランダムでスタートとゴールを作り、
それを道でつないだり、他にもそれらを移動する考え方を書いたと思いますが、
次は簡単にそれを表示できるようにしておこうかと思いました。
え? 普通そこはランダムマップで部屋をちゃんと作って、
完璧なランダムマップを作った方が……
とも考えると思いますが、
ランダムマップが複雑になる前の簡単なマップで、
とりあえずちゃんと表示して、マップを移動できるようになってるかを確かめたりも大事かと思い、
順番的には変ですが、先にマップ移動や、3D画面とかの考え方を書いていきたいと思います。

と言っても、考え方自体は前回書いたように、

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

でまず自分の座標を設定します。
そこから上に移動したら(改行するときの数)を配列の何番目かという座標に足して、
そこが、0(つまり壁)かどうかを判別させて、
壁じゃなかったら移動、壁だったら移動させない。
移動させたら、自分の座標を移動した場所にするということにすれば、
数値上理解させることができます。

そして数値で理解させたということは、面倒ですけど、
その数に対応した画像を表示させればいいことになってきます。

なので前回やっていた配列をマス目と考えて、
0の壁を黒として、2の道を白とする。
そして自分の位置を矢印にして、向いている方向を矢印の向きにして、
あとは移動する方向に対応したボタンを作り、


例として載せる画像や動画では今回から150×10のマップにしてます。
ちなみに矢印やスとかゴって描いているマスが一マス分になっています。

動画見るの面倒くさい人向けの一応の画像↓
あと画像に対応している配列表

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


↑壁を向いていて、前に進むを押しても進まない。


↑自分の向いている向きを他のボタンで変える。


↑すると、前に進むボタンで進めるようになる。

という対応したマス目とボタンの表示をすることで、
とりあえずノベルゲームをつくる吉里吉里でもそれっぽい動きを再現できたのではないかと思います。

ランダムマップ部屋編

ここまでくればランダムマップの部屋なんて結構簡単に考えてもいいんじゃないでしょうか?
スタートとゴールをランダムで決めて道でつながるように自動でできるのなら、
スタートとゴールの周りの囲んだマス全部を道にするようにすれば、

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

という場合ならば、スタートの周りを2にすると

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

ゴールの周りを2にして、

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

となり、これで部屋が2部屋できます。
そしてこれが自動でできるようになったら……
単純にこれを乱数でループさせるようにすれば部屋が勝手に何部屋かできるようになると思います。
これが、自分のランダムマップの考え方です。
最初のスタートの場所を保存しておき、新しいスタートを作ってゴールと結ばせる、
なのでさっきの配列マップをループさせて、

2,2,2,0,0,0,0,0,0,0,
2,1,2,2,2,2,2,2,2,0,
2,2,2,0,0,0,0,0,2,0,
0,0,0,0,0,0,0,2,2,2,
0,0,0,0,2,0,0,2,3,2,
0,0,0,0,0,0,0,2,2,2,
        ↑ここに新しい仮のスタートを作らせてゴールと結ばせると、


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

という3部屋ができていきます。
これを乱数で何回ループさせるかを設定させれば、
結構ランダムなマップがちゃんと生成されたりします。
(まぁもちろんループを何度もさせればさせる程重くなったりするんですが、
所詮数値の単純な入れ替えをしているだけなので、吉里吉里では重くならないんですが、
ティラノスクリプトだと結構重くなったりもしますのでちょっと注意)

ただここまでできれば、ランダムマップに移動もできて、結構色々なことができたりします。
別にランダムじゃなくても、配列の数値をもっと複雑にして、
ここは道、ここは草や木、ここは民家の数値と決めて、対応した画像を表示できるようになれば、
初代ポケモンくらいの見た目のマップ移動とかはできるようになったりすると思います


次回は今回作ったランダムマップと移動を自分の居る位置と比べて、
3D風の画面表示考え方と、
戦闘になったときの速さ比べのバブルソートの考え方とかを載せようかと思います。
バブルソートなんかは知ってる人も多いかと思いますが、
昔ながらの有名なソート方法なんで、説明する必要もないかもしれないですけどね。

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

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

月別アーカイブ

限定特典から探す

記事を検索