注:当ブログでは広告を利用しています。

今からわかるプログラム改造の基本

おはよう。
3日間くらいゲームプログラミングに悩んでいた。

どのサイトを調べても答えがない。
答えがない部分は自分で作っていくしかない。

自分で創るとは試行錯誤の日々であり、無駄に時間をかけてしまう。

プログラミングだけではない。

勉強もビジネスもシナリオもイラスト他ありとあらゆる分野で
「自分で作らなければならない」領域がある。

「自分で作らねばならない領域」について、
どういう方針で行けばなるべく時間をかけずに済むのか。

何を知らないからいつまでも路頭に迷う、
ただただ時間だけが過ぎていくのか?

ドラミングができれば勉強のし大いに変わるし
仕事のやり方や取り組み方にも大きな変化をもたらす。

 

プログラミング改造の基本:定義

人様が既に作ったプログラミングを改造する場合、
最初に絶対押さえておくべきか所が定義だ。

例えばウディタで「コモンセルフ10(以下C数字と表記)」
と置いた場合、C10が何を定義しているのか?

DB操作:C10=アイテム:ただの水:使用効果

上記場合ならC10は「アイテム>ただの水を使った効果」を示している。

まずは人様のプログラム改造を行う前に、
変数が何に使われているか、ひとつずつつかんでおかねばならない。

一つずつつかまずにあれこれ考えるから混乱をきたし、
ただただ時間だけが過ぎていくうえ、調べてもよく分からない状態が続く。

定義がわかれば後は条件分岐において、
きちんと自分の言葉でわかるように説明できる。

定義を行う際、きちんと自分の言葉で説明できるかどうかがポイントだ。

 

勉強に仕事も定義はまず大切

英語時制

少し視点を変えて勉強の話に入ろう。
例えばあなたが数学は苦手、英語は苦手と考える。

数学や英語が苦手な理由も定義だ。
きちんと物事を定義しないまま、ただ与えられたものをやっている。

英語だと単語、文法、構文……
文法一つをとっても名詞、動詞、形容詞……
名詞一つをとっても「意味と役割」を知らないと使えない。

名詞の意味は文字の通り「名前」を表し、定義となる言葉を置く状態だ。

次に「役割」として主語、目的語、補語に活用できる。

定義と役割を知っておかないと、本来動詞を置くべき箇所に名詞を置いてしまい、

「なんでここに名詞を置いてるの? もしかしてこれ動詞でなく名詞なの?」

読み手が混乱をきたすばかりか、
あなたが伝えたい想いとは違う内容で相手が受け取ってしまう。

数学だと数式計算をごちゃごちゃやれば得意になると思っているが、
数学にもきちんと言葉一つ一つに定義があり、
定義(意味:役割)を知っておけば、使い道もわかる。

くわえて定義一つに混乱をきたさないので、スラスラ回答に取り組められる。

もしあなたが「私、●●苦手なのよ」思うなら、
まずは言葉の定義(意味と役割)をしっかり押さえるといい。

 

定義をひたすら調べるのに時間を費やす

人様のプログラミングを改造する上で最も時間を費やす場所は、
定義の確認に他ならない。

複雑な条件分岐も全てケーキがあるからこそできるのであり、
すぐなんでもかんでも分岐する前にまずはケーキをきちんと押さえておく。

定義を抑えるだけで解決できるプログラムもあるからだ。

分岐を見た後数値などの代入先を見た場合、
「これは何を行っているのか?」を一つずつ把握し、
コメント(ウディタだと緑色)していこう。

 

改造のコツ:テキストを代入

プログラム

プログラミングを改造するとき、きちんとプログラミング通りに進んでいるのか?
どこを示しているのか分からない時がある。

例えば船の乗り降りにおいて、船に乗るときはどのプログラムが働いているか?
さっぱりわからず、どこをどう直したらいいかわからず時間が過ぎる。

おすすめとして「文章」を入力する。

一言「今ここ」や「今これ」と微妙に文章を変えたら、
すぐにテストプレイを行い動作確認を取る。

テキストを入れると「あ、ここを直さないと」わかる。
時にはエラーも起きるだろうが、むしろ起きたほうが何をすべきかわかりやすい。

 

改造のコツ:わからない変数をいったん外せ

プログラム2

人様のプログラムをいじっている時、どうしてもわからないところがある。
分からないプログラムは一旦外してしまう。

外してどんなエラーが生じるかがわかった後、
改めてプログラム憎みなおす。

わざとエラーを起こして
「このプログラムはこういう意味があったのか」把握する。

わざと間違えるのもプログラムには大切だ。

 

改造のコツ:こまめに上書きと別フォルダに保存を

改造においてうまくいったところが必ずセーブしよう。
保存する際、二つおすすめする。

一つは上書き、言うまでもない。
二つ目は別のフォルダにセーブしておく。

上書きした後改造して間違えてしまい、
どこをどう直したら良いか全くわからなくなった時、
別フォルダから元のファイルを入れる。

少なくとも「これより先を改造すればいい」とわかるから、
最初に合ったプログラムを再び組直さなくてもいい。

時間を少しでも浮かせるのがポイントだ。

 

改造のコツ:最後は自分の言葉で説明できるように

プログラミングで 最後にやるべき仕事は言語化だ。

自分が 組み立てたプログラミングをきちんと、
他人に説明する形で述べていく。

いろいろ いじったら適当に できちゃいました。

確かにいいんだけど、自作で組むとき確実に詰む。

きちんと自分の言葉で説明できるようになった時、
新しいプログラムを組む際、こうするああすると戸惑わない。

一度作ったプログラミングなどもう作らないから、
言語化するのめんどくさいと思うかもしれない。

きちんと言語化しておくと、
似たプログラムを作る場合や何かしらの仕事をするうえで、
意外な形で自分の作ったプログラムが役に立つかもしれない

万が一の可能性を考慮したうえで、
自分の作ったプログラミングをきちんと自分の言葉で説明する。

こうして初めて「習得」に至るわけだ。
くわえて人に説明できるからこそ、そこに価値交換も生じる。

 

実例:改造のコツ~世界地図表示~

世界地図

現在私はウディタで世界地図の表示プログラムを作っている。
詳しい説明は別の記事で記したいと思う。

いくつか複雑な処理があり、解説せねばならんので。

ウディタには世界地図表示コモンがなかった。
そこで自分で作らなければならなくなった。

色々調べたところ、RPGツクールで世界地図表示コモンがあった。
ツクールにはあったのだからウディタへ応用せねばならん。

1から作るけど「ヒント」は探せばあるわけだ。

といっても何をしたらいいんだろう……
道筋がわからないと、時間だけが過ぎていく。

そもそも世界地図について、どういう時に使ってもらいたいか?

自分が考えた使い道として、船や飛行機に乗っている。
あるいは歩いているときにボタンを押してもらえば、
自動的にキーが表示されるように出る。

あるいはアイテム仕様で表示されるようになる。
いろいろ考えたら、かえってどうすればいいかわからなくなった。

まずはアイテムを使ったら表示されるようにしよう。
次にボタンを押したら自動的に出るようにしてみよう。

上記画像はアイテム「世界地図」を使ったら、
ワールドマップが表示されるようにプログラムを立ててみた。

プログラムをたてるとき、まずは何をしたらいいだろう?
大きな目的は「世界地図と現在地の表示」だ。

目的(ゴール1)が決まれば現在(スタート)がわかる。
スタートからゴールまでに最低限必要な条件として、

  • 世界地図を画像として表示
  • 現在地を画像として表示

ウディタの場合はピクチャを表示すればいいだけ。

次はボタンを押したら消さなければならないので、

・特定のボタンを押したら、二つのピクチャを消す

ゴール1が終わったので、ゴール2の設定だ。

世界地図

ここまではうまくいったように思えたが、ピクチャすら出てこない。

原因は何か? 色々試行錯誤すると「呼び出し」で表示し、
「並列処理」でやっていなかったと分かった。

実際に呼び出しと並列処理、自動実行など実験して、
始めて「あ、こうすればいいのか」とわかる。

ボタン操作をしたものの、一向にボタンを押しても地図が消えない。

ここから先、どうしたらいいかさっぱりわからない……困った。

そこで「すでに成功している別のコモンイベント」を見た。
すると飛行船コモンイベントは3つに分かれていると気づいた。

  • 乗り降りの処理が一つ。
  • 移動の処理が一つ。
  • 乗るときの音楽変更が一つ。

そこで飛行船コモンイベントを参考に

  • アイテムを選んで、「呼び出し」で地図表示に飛ばす
  • 呼び出しをもとに「並列処理」で地図表示コモンが働く

二つに分けてみた。するとうまくいった。

世界地図の表示はうまくいったが、
後は主人公の現在地がずれているので調整せねばならない。

そこで次の目的(ゴール3)を設定する。

まずは「二つ目の画像を動かす」を定めた。
そもそもどうやったら動くかわからないからだ。

画像を動かしているつもりがキャラを動かしてしまい、
江のレイヤーに隠れてキャラが動き、戦闘状態となった。

そこで地図を表示している間は十字キーを反応させない処理を行った。

実際に反応しないかテストするため、
成功したら「わざとエラーが出る」処理を行い、うまく失敗した。

うまくいったので、次に世界地図を出したときに位置キャラを出し、
主人公のキャラと重ね合わせてみたのだが……

実を言うといらない処理もしている。
後で試行錯誤しなければならないところだが。

精密座標と主人公の居場所が分かった。

コモンセルフに主人公やピクチャの座標を定義し、
主人公(ピクチャ)がどこにいるかを計算していった。

整数で掛け算した後100で割っている=%を意識して計算している。

地図上の精密座標と主人公の現在地を合わせるため、
参照していたRPGツクールの世界地図をもとに計算した。

マップとマスでは倍率が違うという。

同じように倍率を計算していろいろ動かしたところ、
だんだんマップと主人公の位置を合わせられた。

まだまだ課題があって、キャラが端っこに行くと、
途端に比率と座標にずれが生じる。

地図を開く場合にリセットを行うなど、
今後もテストプレイを重ねながら処理せねばならない。

とまあ、世界地図表示コモンを作るときに

  1. 仮のゴール
  2. 現在状況の確認
  3. 参考となる資料
  4. 定義の重要性
  5. 度重なるテストプレイ

プログラミングは4つのステップを繰り返せば何とかなるし、
新しいプログラムだって作成できる。

ゲーム以外のプログラミングでも、
新しい何かを作るならぜひ上記を抑えておくといい。

 

注意:順番を逆にしただけでエラーを起こす

プログラミングにおいて超重要で忘れがちな部分が順番だ。
順番を間違えるだけで、軽くエラーを起こしてしまう

プログラミングは基本、前から後ろに向かって進むもの。

本来は進めてほしくないプログラムがあったとして、
勧めてほしくない変数を前に置いただけで、動かなくなる時もある。

順番が大切なので、おざなりにならないよう注意してほしい。

お願い

めがびちゃんからお知らせ♪

お知らせ

megabe-0へ訪問した"本当"の理由

まさか記事の書き形一つでこうなるとは…

お願い1

Writer軽い自己紹介

ティラノスクリプトや小説家になろう、ピクシブ他で物語を書きながら、 「私が気になった事件」の裏側を作家の視点で書いているおっさん。

プロフィール画像は自画像でなく、Megabe-0ブログのマスコット、めがびちゃん。

 

雷が苦手で、光を見ると頭が固まる(元から固い)。 月初めは墓参りと神社参拝を行い、賽銭箱へ1万円を入れた際、とても気持ちがすっきりした。

 

■ 簡単な自分史 ■

0歳:釧路のある病院で生まれる。暇さえあれば母乳を吸って、ご飯を4膳食べても体重が落ちるほど、母のダイエットにものすごく貢献したらしい

 

3歳:行方不明になり、全裸で海を泳ごうとしたところ、いとこのお姉さんに発見され、この世へ留まる

 

8歳:自分のお金でおもちゃのカードを初めて買い、経済を知る。なぜか父親に怒られ、家出するがすぐに見つかる。

 

12歳:学校で給食委員長になる。委員長として初めて全校生徒の前にて演説する際、原稿用紙を忘れてアドリブで笑いを誘いながらも何とかやり過ごし、多くの生徒に名前と顔を覚えてもらう。また、運動会の騎馬戦では変なアドリブを行い、多くの笑いを誘った。

 

18歳:初めて好きな人ができたけれど、告白が恥ずかしくてついにできず、別れたことを今でも根に持っている(妻となる人にははっきり言えてよかった)

 

21歳:大学在学中、アルバイトを始める。人手不足かつとても忙しい日々を過ごしながら「どうせなら自分から楽しいことをしていきたいなあ⇒起業って選択肢があるのか」働き方の選択肢を見つける

 

27歳:自分で作った会社がうまくいかず、一度たたんで都落ち。実家でとことん自分を責める日が続く。「何をやっても駄目だな、お前は」など。自分を責めても自殺ができず、体中から毒素があふれ出て苦しい日々を送る。寝るのも怖かった日々。

 

28歳:「このままじゃいけない」決心を決め、小学校からの勉強をやり直す。高校の勉強で躓きながらも、学び直すうちに「自分は何もわかっていなかったんだなあ」大切な教えに気づかされる。 加えて、小説やイラストなど「今までの自分が手を出さなかった分野」に手を伸ばしてみた。

 

29歳:「定義」と「自己肯定」こそが生き方を決めると気づかされ、不安な日々が起きても、心が強くなったと感じる。でも子供の誘惑にはめっぽう弱くなる。

 

35歳:人生初の交通事故(物損)に出会う。冬道の運転で車を上下に大回転(スピンではない)を体型氏、何とか命を取り留め、なぜ生きているのかわからない状態に陥る。

自分の生き方はすべて自分が握っている。わずかな瞬間にしか現れない「自分の真実」を表に引きずり出し、ピンチからチャンスを生み出す発想や視点をブログやメルマガ他で提供中。