現在 #ウディタ でワールドマップ作製中だが、途中まではうまくいったものの、地図と主人公の座標を重ねるところが、なかなかうまくいかない。#RPGツクールMZ 関係なら世界地図コモンや特別のイベントがあるから楽そうに見えるが、計算がとにかくわからん。 pic.twitter.com/f6lAt8hrAZ
— せんけん (@megabi0) June 6, 2021
おはよう。
3日間くらいゲームプログラミングに悩んでいた。
どのサイトを調べても答えがない。
答えがない部分は自分で作っていくしかない。
自分で創るとは試行錯誤の日々であり、無駄に時間をかけてしまう。
プログラミングだけではない。
勉強もビジネスもシナリオもイラスト他ありとあらゆる分野で
「自分で作らなければならない」領域がある。
「自分で作らねばならない領域」について、
どういう方針で行けばなるべく時間をかけずに済むのか。
何を知らないからいつまでも路頭に迷う、
ただただ時間だけが過ぎていくのか?
ドラミングができれば勉強のし大いに変わるし
仕事のやり方や取り組み方にも大きな変化をもたらす。
プログラミング改造の基本:定義
現在RPGゲーム作成中。
ウディタだとあるラインからどう見ても経験値が上がらない仕組みになっていたので、
エクセルを使ってレベルと経験値のグラフを計算中。ドラクエのサイト、本当に役立つわ。 pic.twitter.com/vbCSruQhiV— せんけん (@megabi0) June 2, 2021
人様が既に作ったプログラミングを改造する場合、
最初に絶対押さえておくべきか所が定義だ。
例えばウディタで「コモンセルフ10(以下C数字と表記)」
と置いた場合、C10が何を定義しているのか?
DB操作:C10=アイテム:ただの水:使用効果
上記場合ならC10は「アイテム>ただの水を使った効果」を示している。
まずは人様のプログラム改造を行う前に、
変数が何に使われているか、ひとつずつつかんでおかねばならない。
一つずつつかまずにあれこれ考えるから混乱をきたし、
ただただ時間だけが過ぎていくうえ、調べてもよく分からない状態が続く。
定義がわかれば後は条件分岐において、
きちんと自分の言葉でわかるように説明できる。
定義を行う際、きちんと自分の言葉で説明できるかどうかがポイントだ。
勉強に仕事も定義はまず大切

少し視点を変えて勉強の話に入ろう。
例えばあなたが数学は苦手、英語は苦手と考える。
数学や英語が苦手な理由も定義だ。
きちんと物事を定義しないまま、ただ与えられたものをやっている。
英語だと単語、文法、構文……
文法一つをとっても名詞、動詞、形容詞……
名詞一つをとっても「意味と役割」を知らないと使えない。
名詞の意味は文字の通り「名前」を表し、定義となる言葉を置く状態だ。
次に「役割」として主語、目的語、補語に活用できる。
定義と役割を知っておかないと、本来動詞を置くべき箇所に名詞を置いてしまい、
「なんでここに名詞を置いてるの? もしかしてこれ動詞でなく名詞なの?」
読み手が混乱をきたすばかりか、
あなたが伝えたい想いとは違う内容で相手が受け取ってしまう。
数学だと数式計算をごちゃごちゃやれば得意になると思っているが、
数学にもきちんと言葉一つ一つに定義があり、
定義(意味:役割)を知っておけば、使い道もわかる。
くわえて定義一つに混乱をきたさないので、スラスラ回答に取り組められる。
もしあなたが「私、●●苦手なのよ」思うなら、
まずは言葉の定義(意味と役割)をしっかり押さえるといい。
定義をひたすら調べるのに時間を費やす
ところでツイッターやってる人の中にRPGゲームを作ってる人っているんだろうか?
もし作っていて、RPGゲーム制作の裏側「コモンイベント、装備コモン改造」といった情報って求めているんだろうか?
良かったらアンケート答えてみて。#ウディタ #RPGツクールMV #ゲーム— せんけん (@megabi0) June 2, 2021
人様のプログラミングを改造する上で最も時間を費やす場所は、
定義の確認に他ならない。
複雑な条件分岐も全てケーキがあるからこそできるのであり、
すぐなんでもかんでも分岐する前にまずはケーキをきちんと押さえておく。
定義を抑えるだけで解決できるプログラムもあるからだ。
分岐を見た後数値などの代入先を見た場合、
「これは何を行っているのか?」を一つずつ把握し、
コメント(ウディタだと緑色)していこう。
改造のコツ:テキストを代入

プログラミングを改造するとき、きちんとプログラミング通りに進んでいるのか?
どこを示しているのか分からない時がある。
例えば船の乗り降りにおいて、船に乗るときはどのプログラムが働いているか?
さっぱりわからず、どこをどう直したらいいかわからず時間が過ぎる。
おすすめとして「文章」を入力する。
一言「今ここ」や「今これ」と微妙に文章を変えたら、
すぐにテストプレイを行い動作確認を取る。
テキストを入れると「あ、ここを直さないと」わかる。
時にはエラーも起きるだろうが、むしろ起きたほうが何をすべきかわかりやすい。
改造のコツ:わからない変数をいったん外せ

人様のプログラムをいじっている時、どうしてもわからないところがある。
分からないプログラムは一旦外してしまう。
外してどんなエラーが生じるかがわかった後、
改めてプログラム憎みなおす。
わざとエラーを起こして
「このプログラムはこういう意味があったのか」把握する。
わざと間違えるのもプログラムには大切だ。
改造のコツ:こまめに上書きと別フォルダに保存を
改造においてうまくいったところが必ずセーブしよう。
保存する際、二つおすすめする。
一つは上書き、言うまでもない。
二つ目は別のフォルダにセーブしておく。
上書きした後改造して間違えてしまい、
どこをどう直したら良いか全くわからなくなった時、
別フォルダから元のファイルを入れる。
少なくとも「これより先を改造すればいい」とわかるから、
最初に合ったプログラムを再び組直さなくてもいい。
時間を少しでも浮かせるのがポイントだ。
改造のコツ:最後は自分の言葉で説明できるように
プログラミングで 最後にやるべき仕事は言語化だ。
自分が 組み立てたプログラミングをきちんと、
他人に説明する形で述べていく。
いろいろ いじったら適当に できちゃいました。
確かにいいんだけど、自作で組むとき確実に詰む。
きちんと自分の言葉で説明できるようになった時、
新しいプログラムを組む際、こうするああすると戸惑わない。
一度作ったプログラミングなどもう作らないから、
言語化するのめんどくさいと思うかもしれない。
きちんと言語化しておくと、
似たプログラムを作る場合や何かしらの仕事をするうえで、
意外な形で自分の作ったプログラムが役に立つかもしれない。
万が一の可能性を考慮したうえで、
自分の作ったプログラミングをきちんと自分の言葉で説明する。
こうして初めて「習得」に至るわけだ。
くわえて人に説明できるからこそ、そこに価値交換も生じる。
実例:改造のコツ~世界地図表示~

現在私はウディタで世界地図の表示プログラムを作っている。
詳しい説明は別の記事で記したいと思う。
いくつか複雑な処理があり、解説せねばならんので。
ウディタには世界地図表示コモンがなかった。
そこで自分で作らなければならなくなった。
色々調べたところ、RPGツクールで世界地図表示コモンがあった。
ツクールにはあったのだからウディタへ応用せねばならん。
1から作るけど「ヒント」は探せばあるわけだ。
といっても何をしたらいいんだろう……
道筋がわからないと、時間だけが過ぎていく。
そもそも世界地図について、どういう時に使ってもらいたいか?
自分が考えた使い道として、船や飛行機に乗っている。
あるいは歩いているときにボタンを押してもらえば、
自動的にキーが表示されるように出る。
あるいはアイテム仕様で表示されるようになる。
いろいろ考えたら、かえってどうすればいいかわからなくなった。
まずはアイテムを使ったら表示されるようにしよう。
次にボタンを押したら自動的に出るようにしてみよう。
上記画像はアイテム「世界地図」を使ったら、
ワールドマップが表示されるようにプログラムを立ててみた。
プログラムをたてるとき、まずは何をしたらいいだろう?
大きな目的は「世界地図と現在地の表示」だ。
目的(ゴール1)が決まれば現在(スタート)がわかる。
スタートからゴールまでに最低限必要な条件として、
- 世界地図を画像として表示
- 現在地を画像として表示
ウディタの場合はピクチャを表示すればいいだけ。
次はボタンを押したら消さなければならないので、
・特定のボタンを押したら、二つのピクチャを消す
ゴール1が終わったので、ゴール2の設定だ。

ここまではうまくいったように思えたが、ピクチャすら出てこない。
原因は何か? 色々試行錯誤すると「呼び出し」で表示し、
「並列処理」でやっていなかったと分かった。
実際に呼び出しと並列処理、自動実行など実験して、
始めて「あ、こうすればいいのか」とわかる。
ボタン操作をしたものの、一向にボタンを押しても地図が消えない。
ここから先、どうしたらいいかさっぱりわからない……困った。
そこで「すでに成功している別のコモンイベント」を見た。
すると飛行船コモンイベントは3つに分かれていると気づいた。
- 乗り降りの処理が一つ。
- 移動の処理が一つ。
- 乗るときの音楽変更が一つ。
そこで飛行船コモンイベントを参考に
- アイテムを選んで、「呼び出し」で地図表示に飛ばす
- 呼び出しをもとに「並列処理」で地図表示コモンが働く
二つに分けてみた。するとうまくいった。
世界地図の表示はうまくいったが、
後は主人公の現在地がずれているので調整せねばならない。
そこで次の目的(ゴール3)を設定する。
まずは「二つ目の画像を動かす」を定めた。
そもそもどうやったら動くかわからないからだ。
画像を動かしているつもりがキャラを動かしてしまい、
江のレイヤーに隠れてキャラが動き、戦闘状態となった。
そこで地図を表示している間は十字キーを反応させない処理を行った。
実際に反応しないかテストするため、
成功したら「わざとエラーが出る」処理を行い、うまく失敗した。
うまくいったので、次に世界地図を出したときに位置キャラを出し、
主人公のキャラと重ね合わせてみたのだが……
実を言うといらない処理もしている。
後で試行錯誤しなければならないところだが。
精密座標と主人公の居場所が分かった。
コモンセルフに主人公やピクチャの座標を定義し、
主人公(ピクチャ)がどこにいるかを計算していった。
整数で掛け算した後100で割っている=%を意識して計算している。
地図上の精密座標と主人公の現在地を合わせるため、
参照していたRPGツクールの世界地図をもとに計算した。
マップとマスでは倍率が違うという。
同じように倍率を計算していろいろ動かしたところ、
だんだんマップと主人公の位置を合わせられた。
まだまだ課題があって、キャラが端っこに行くと、
途端に比率と座標にずれが生じる。
地図を開く場合にリセットを行うなど、
今後もテストプレイを重ねながら処理せねばならない。
とまあ、世界地図表示コモンを作るときに
- 仮のゴール
- 現在状況の確認
- 参考となる資料
- 定義の重要性
- 度重なるテストプレイ
プログラミングは4つのステップを繰り返せば何とかなるし、
新しいプログラムだって作成できる。
ゲーム以外のプログラミングでも、
新しい何かを作るならぜひ上記を抑えておくといい。
注意:順番を逆にしただけでエラーを起こす
さっきまで一時間近く悩ませていた問題があった。原因は単純で「順番を間違えていた」から。
赤く囲った部分、最初は順番を反対にした。エラーが生じた。下記画像にしたら正しく動いた。
一つの順番を間違えるだけで、エラーは軽く起きる。本当怖い。 #プログラミング初心者 #プログラミング勉強中 pic.twitter.com/6Sk0fBdda6— せんけん (@megabi0) June 10, 2021
プログラミングにおいて超重要で忘れがちな部分が順番だ。
順番を間違えるだけで、軽くエラーを起こしてしまう。
プログラミングは基本、前から後ろに向かって進むもの。
本来は進めてほしくないプログラムがあったとして、
勧めてほしくない変数を前に置いただけで、動かなくなる時もある。
順番が大切なので、おざなりにならないよう注意してほしい。
