気狂いなすび 2024/07/13 17:05

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

3D風のマップ移動表示と、戦闘中速い順に並べる考え方

前回まででランダムマップとマップを表示できるようになったので、
吉里吉里でそれっぽいことをやるだけなら問題ないと思いますけど、

単なる全体マップを見ながら探索するだけってなんか味気なくね??

と思っちゃったりしました。
前回言った通り、全体マップでも自分の位置を自分のSDキャラにして、
マップの配列を複雑にして、ここは木、ここは壁、これは家ってすれば、
初代のポケモンみたいな見た目くらいはできたりするわけですが、
そういうのじゃなくて、
もっとウィザードリー風の3Dダンジョンを探索したいなった思いました。

……というのも、ぶっちゃけ配列複雑にして色々なオブジェクトを作るより、
ある一定の画像を規則的に表示してくれてたほうが、楽……というか、
折角ランダムにマップを自動生成してくれるんだったら、
変な事をしすぎずに、シンプルな方がいいと思いました。

もしもそれで満足いかなったら、そしたらそこからどんどん足していけばいい訳ですし……

ということで、

3D風マップ移動の表示

配列上の判別

ばばん! こんな感じでマップを自動で表示してくれるようになりました!!
これは去年作った時の進捗をまとめた動画の抜粋ですが、
この画面で言う所の視点は、数字の配列にすると、

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

0が壁、1は見えない、2が道、3が自分

というのが視点となっています。

こうやって数字の配列にしてしまえば、
ここまでランダムマップを作る過程を見てきた人ならわかると思いますが、
どこに壁があるとかを判別するのはそんなに難しいことじゃないはず!
前回も大きな文字で書きましたが、今回も大文字でかいておきますが、

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

という話。
大事なことは何度でも書いて見直す手間を減らすスタイルです。
これをさっきの配列に置き換えると、

 2,2,2,
 0,2,2,
 2,2,2,←ここの列の数式
 1,3,1,0 
   x軸1 y
       軸

右下をx1y0という始点として、自分の位置は
   
   x2y0

配列に直すと二番目の数値。

とするなら、矢印の座標は左から、

x3y1 x2y1 x1y1

となりなるので、こうすれば配列の数式のパターンがわかってくると思います。
自分の視界を前方向9マスと考えたら、

自分の位置   (x a y b)

前方向を向いている場合の視点

一列目の位置  (x a-1 y b+1) (x a y b+1) (x a+1 y b+1)
ニ列目の位置  (x a-1 y b+2) (x a y b+2) (x a+1 y b+2)
一列目の位置  (x a-1 y b+3) (x a y b+3) (x a+1 y b+3)

の9マスとなります。
数式に直してしまえば、プログラミングやゲームに直すのはとても楽ですよね~(多分)。
ただ何度も念を押してかいたようにこれは前を向いている場合の視点の方程式です。
もしも横を向いている場合はまたそれに対応した数式を書かないといけません。
でもまぁここまで読んでいる人ならわかると思うので、省略しようかと思います。
一応念のため書いておくと、

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

0が壁、1は見えない、2が道、3が自分

さっきのを横にした時の配列を考えて、
前方向を向いているときを参考にしてもらえれば、大丈夫かなとか思ってます。

画像表示の判別

多分人によってはさっきの数式なんて、
今までここまで読んでれば簡単にわかるわい!
って思ってる人も多いかと思います。
どちらかっていうとこっちの方が興味あるかもって感じですよねー・・・
でもこっちは説明することなんてあんまりないような気がします。

という画像、実は12枚くらいの画像で出来上がったりしています。
とりあえず左側の画像だけみると

赤の1枚目、青の2枚目、黄色の3枚目となっています。

画像を載せるとわかりやすいかもしれませんが、

 
 

となっています。
パターンで言えば赤が4枚

         赤が道か道じゃないか
        ↓         ↓
      赤が道         赤が道じゃないパターンで1枚目
    ↓     ↓
  青が道    青が道じゃないパターン2枚目
↓    ↓ 
黄色が道  黄色が道じゃないパターン4枚目
の3枚目

というわかりづらい文字の図解。
パターンを書き出すと、

赤が道じゃないパターン

赤が道で青が道じゃないパターン

赤が道で青も道、黄色も道のパターン

赤が道で青も道、黄色が道じゃないパターン

という4つのパターンになっています。

そんなに少なくて大丈夫なのー???
って思ったりするかもしれませんが、
実は結構事足りたりします。

視線のことを考えると、
左の赤が道か道じゃないかで、その次の青が見えるか見えないか、
そして青が道なら黄色が道じゃないか道なのかを判別する。
基本的に順番として、

赤 > 青 > 黄

で手前が塞がれたら奥が見えないというのが基本だったりします。

このルールで左右と真ん中の壁を作っていけばなんとかなっていくかなと思います。
他にもアイテムや敵を表示したい場合は、
大中小の3種類を用意し、道がある場所に表示するようにすれば問題ないかと。

戦闘中の速い順の並べ方

戦闘中ターン制バトルにおいて、速いキャラから順番に動けるってのは、
まぁ速い順に並べ替えているんですが、有名なソート方法を使っています。
前回の終わりにちょろっと描いたんですが、
バブルソートという昔ながらの考え方を使っています。
というか自分はそれ以外の考え方を知らないし、
なんならこれが本当に正しいバブルソートだっけ? って言われると、
ちょっとうろ覚えだったりします・・・
(昔自分の大学では、プログラミングもやるよって言われたんですけど、
概要やアルゴリズムを習うことが殆どだったので、
そういうのはちょっとだけ覚えていたりする
(ちなみにプログラミングは研究室でjavaを軽くやってたり
するていどだったりします←つまり言う程プログラミングはできない
(でも後輩に教える立場だったから少しはできたり?)))

知らない人に言うと、
よくゲームなんかでのアイテムの並び替えとか一つとっても、
実はこういった小難しい方程式を使って並び替えていたりするって話なんですよ。
とりあえずいつも通り数字とかの図解で説明する方が楽かと思うので説明していきます。

5、4、2、1、2、

という5つの数字の配列があるとします。
これを小さい数字を左に、大きい数字を右にするとするならばどうしますか?
いやいや! 人間なら見ればわかるっしょ!?
という訳にはいかないのがプログラミングだったり・・・

5、4、2、1、2、

を並べ替える時最初の5と4を比べたら4の方が小さいので、
4と5を入れ替えたい!
入れ替えればいいと思うけど
1番目に2番目の数を入れる・・・すると
1番目と2番目の数が同じになってしまって、
最初の5という数字が消えてしまう。
融通が利かないのがプログラミングだったり。

じゃあどうするかってなると、
ここでお皿を一つ追加してあげたりするのです!!
お皿ってなんじゃい!?
って思うでしょうが、こういった配列を考えるとき、
大学の先生にも言われたんですけど、お皿にのっている数字というのを考えてみましょう。

5、4、2、1、2、

という配列は、

5、4、2、1、2、
皿、皿、皿、皿、皿、

というお皿の上に乗っている数字で、
ここでお皿をも一つ追加すると、

5、4、2、1、2、
皿、皿、皿、皿、皿、皿、

というなにも載っていないお皿が増えたら便利じゃないですか?
そしたらそこに入れ替える数字を一時的においておけば、
さっきみたいに1番目と2番目の数字が一緒になったとしてもー?

 、4、2、1、2、5
皿、皿、皿、皿、皿、皿、

4、 、2、1、2、5、
皿、皿、皿、皿、皿、皿、

と余分につくったお皿に5という数字をおいておけるというわけです。
そしたらその5のお皿を2番目の数字にいれて、

4、5、2、1、2、
皿、皿、皿、皿、皿、皿、

と1番目の数字を並べ変えることに成功します!

今は1番目の数字と2番目の数字を比べて入れ替えましたので、
次は2番目と3番目、次は3番目と4番目、そして4番目と5番目を比べるとしていくと~?

4、2、1、2、5、
皿、皿、皿、皿、皿、皿、

となります。

小さい順にならんでないじゃん!!!!!!
となりま~す^^
じゃあ駄目じゃん!!
ってまあまぁ落ち着いて。
これを何回か繰り返せばなんとかなりそうじゃないですか?
となると今度は何回繰り返せばいいのかってのを考えていくと、
例えば、もしも一番右の数字が本当は一番小さかったら、
と考えた場合、

一番右の数字が一番左まで行く回数が繰り返しの数が正解というわけです。

つまり5個の数字の配列なら、右の数字を左まで持ってくるのに4回入れ替える、
ということになります。

前後の数字を比べて入れ替えていく作業を最後の数字までする × (比べたい数字の量 -1)回 

繰り返すと単純な前後の数字を比べるだけでソートができたりします。
これが、水の中から空気の気泡が浮かび上がってくるように見えることから、
バブルソートといわれてりする? んじゃなかったなかー確か??

んでこれをすることによって、敵の数が3体、パーティが4人だった場合。
比べる数字は7個。
つまり6回繰り返すと速い順に並べ替えることができます。

ちなみに数字だけ並び替えても意味ないじゃんって言われるかもしれないですけど、
さっきの数字の列を例にすると

 5、 4、 2、 1、 2、
1皿、2皿、3皿、4皿、5皿、仮皿、

という上の数字と関連させたお皿にすれば、

  、 4、 2、 1、 2、 5
仮皿、2皿、3皿、4皿、5皿、1皿、

       ↓

 4、  、 2、 1、 2、 5
2皿、仮皿、3皿、4皿、5皿、1皿、

       ↓

 4、 5、 2、 1、 2、 5
2皿、1皿、3皿、4皿、5皿、仮皿、

という感じになるのでこれをバブルソートして、

 1、 2、 2、 4、 5、
4皿、5皿、3皿、2皿、1皿、

というお皿まで対応させておけば、速い順に並べ替えても、
4皿が一番速いから動きますと対応させることができたりします。

これで戦闘中速い順にならべかえて、
対応したお皿のキャラが行動していくという形になるはずです。

今回の説明はこのくらいにしておこうかと思います。
てかどうでした今回の説明?
ぶっちゃけ説明することがあんまりなくて、
大事な事を何度も細かく説明してる感じがして、
逆に読みにくかったりしたでしょうか?

まぁあくまでここでは概要を理解してもらえたりすればいいかなと思っていて、
なんならこういうことを読む人って大体もうそんな原理知ってるって人が多いと思うので、
あくまで軽く概要を知ってもらって、
今後の読んでくれる人の創作で行き詰った時、
あーそういうや、なすおたはあんな方法でやってたみたいだなー、
少しそれについて調べてみるかーとなってくれればいいかなと思います。

次回の吉里吉里ZでRPGっぽいののまとめは何を説明するかまだ決まってないですが、
多分何かまた載せようかと思ってます。
また今作っているRPG風のゲームの進捗やイラスト、エッチなCG集なんかも更新していく予定なので、
もしよければ今後ともなにとぞよろしくおねがいします!

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

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

月別アーカイブ

限定特典から探す

記事を検索