2024年1月14日日曜日

イベントを作る⑥

  こんにちは。ひらひさです。

 雪が降りましたね。積もった雪を見るとわくわくします。

 今回も、イベントを作っていきます。今回のイベントで最後になります。

イベントの説明


今回主に使うマップです。

 前回のイベントによって、新しい場所に行けるようになりました。今回は、その新しい場所で発生するイベントです。まず、左上のマップにいる人に話しかけます。
 

 海で遊んでたら流されちゃったみたいです。家に帰りたいけどお腹が空いてて動けないようなので、食料を持ってきましょう。
 食料は、以前助けたキャンパーからもらいます。
 

 食料を貰えました。依頼主に私に行きましょう。


 おいしいものを食べて動けるようになりました。海辺の村出身みたいなので、向かいましょう。
 

 これから、キャラクターの後ろを依頼主が付いてくるようになります。


 海辺の村には最初のマップの上から行きます。


 村につきました。すぐ近くにいる人に話しかけましょう。


 無事に連れてくることができました。


 イベントが終わりました。これで、このゲームはクリアになります。

プログラムの説明

 では、このイベントを進めるプログラムを見ていきましょう。
 イベントが発生するプログラムは前回までの記事と同様です。


 989~1007行目が、mpt63の時に発生する動作です。今回の場合、流された人が対象です。
 最初に話しかけたときは、991~997行目のif文が真になります。
 992行目でflagKids1をtrueにしています。これによって、人助けイベントが開始します。
 

 キャンパーから食料をもらうときのプログラムです。依頼主に話しかけたことで、flagKids1がtrueになるので、749~753行目のelse if文が真になります。
 750行目でflagKids21がtrueになります。これで、プログラムが食料を貰ったことを認識します。
 

 依頼主に食料を渡しに行きましょう。
 キャンパーから食料をもらったことで、flagKids21がtrueになりました。そのため、今回は998~1006行目のelse if文が真になります。
 ここからは、依頼主と行動を共にすることになります。そのため、1005行目で依頼主がその場から離れることを表現するために、依頼主がいた場所の座標を地面に置き換えています。
 

 依頼主が後ろをついてくることを表現するプログラムです。
 以前岩を壊すプログラムで使った変数を使用しています。
 573~575行目のif文を見てみましょう。条件式は、左が押されてflagKids22がtrueの時です。574行目で、プレイヤーの右側に依頼主を表示するようにしています。キャラクター画像は、px、pyの値に表示されるので、プレイヤーの後ろに表示したい場合は、キーボード操作に対応してpx、pyの値を増減させればよいのです。
 同様のプログラムを右、上、下にも作ります。
 

 案内先の人のプログラムです。このイベントが発生していないときは、1015行目以降のelse文が真になります。
 依頼人を連れていると、1010~1014行目のif文が真になります。
 安心したメッセージが表示され、キーボード操作を受け付けなくします。
 1013行目のsetTimeoutで5秒後にKidspaint関数を使用し、画面表示が変わるようにし、イベントにアニメーションを加えています。


 1052行目が、Kidspaint関数の内容です。
 基本はeventpaint関数と同じで、黒背景にキャラクターの絵を表示させてメッセージを流すな内容です。
 1060行目でEndpaint関数を時間差で発動させるようにしています。
 1063~1067行目がEndpaint関数の内容です。ここでは、画面上にでかでかと「おしまい」と表示させるようにしています。

 以上が、今回のイベントで動作するプログラムの説明になります。

おわりに

 ここまでご覧いただきありがとうございました。当初考えていた内容とは大きく違ったゲームになりましたが、自分でゲームを作る経験ができて良かったです。普段ゲームをやっていてもどうやって動いているのかプログラムの内容を考えたりするようになったので、ゲームを見る目が変わりました。あと、バグと不具合に寛容になれますね。
 この記事でゲームの解説は終了です。来年も似たことをやると思いますので、見かけた際はどうぞ温かい目で見てください。
 では、半年間ありがとうございました。

2024年1月12日金曜日

イベントを作る⑤

  こんにちは。ひらひさです。

 すっかり寒くなりましたね。朝起きるのも億劫です。

 今回もイベントを作っていきます。

イベントの説明




今回使うマップです。

 まず、右上のアリに話しかけます。



 穴を掘っていて指輪を落としてしまったようです。これは大変ですね。
 指輪を探しに行きましょう。まず、上のマップに行きます。

 次に、左側に進みます。 



  指輪が見つかりました。拾いに行きましょう。
 

 綺麗な指輪を見つけました。しかし、どうやら今の状態では取れないようです。どうしましょう。
 いったんアリの村に戻って案内係に聞いてみましょう。


 案内係はアリの村に入ってすぐにいます。水に濡らしてとるというアドバイスを貰いました。水辺は確か地上にありましたね。水辺に行きましょう。
 ちなみに、案内係に話してもイベントの進行には影響はありません。あくまでもヒントを貰うために存在しています。今回のイベント同様に、他のアリイベントでも、話しかければ適宜アドバイスをくれます。

 

 初期マップの右下の水場に来ました。この水で指輪がとれそうです。指輪の元に急ぎましょう。


 無事取れました。依頼主の元へ届けましょう。


 無事渡すことができました。これで、穴堀を続けてもらえます。
 3秒後に、次のメッセージが流れます。


 またこの3秒後に、画面が暗転します。
 暗転後、画面上に地上に出れる割れ目が追加されます。これで、地上に出ることができます。


 以上で、このイベントはクリアとなります。

プログラムの説明

 では、このイベントを進めるプログラムを見ていきましょう。
 イベントが発生するプログラムは前回までの記事と同様です。


 903~930行目が、mpt60の時に発生する動作です。今回の場合、指輪を落としたアリが対象です。
 最初に話しかけたときは、904~906行目のif文が真になります。何気ない会話ですが、本イベント以外のアリイベントをクリアしていると、907~916行目が真となります。条件は、flagAntEvAとFlagAntEvBがtrueの時です。これによって、他のイベントをクリアした時にに今回のイベントが発生するようにしています。
 

 932~951行目は、指輪に触れた時の処理です。
 今回のイベントが始まっていない場合は、947~950行目が真になります。
 依頼主に話しかけた後だと、flagAntC1がtrueになるので、933~939行目のif文が真になります。934行目でflagAntC2をtrueにしています。
 

 池の水のプログラムです。ここは、記事「イベントを作る②」で使用しました。これを、今回のイベントでも使用しています。
 以前はキャンパーに対するイベントでしたので、726~730行目が真になり、キャンプイベントが進行していました。しかし、今回は指輪を取るイベントなので、そちらは使いません。
 flagAntC2がtrueになっているため、731~734行目のelse if文が真になります。
 732行目でflagAntC31がtrueになります。これで、主人公が水を汲んだことをプログラムが認識します。
 

 指輪を取りに戻ります。水を汲んだことでflagAntC31がtrueになりました。そのため、今回は、941~946行目のelse if文が真になります。
 942行目でflagAntC32をtrueにしています。これで、指輪と取ったことをプログラムが認識します。
 943行目で、指輪があった場所を地面に置き換えています。指輪を取ったということを強くユーザーに認識させるためにプログラムしました。
 指輪を取ったので依頼アリの元へ行きましょう。


 依頼アリのプログラムです。画像が大きくなってしまうため、少し分割しました。
 指輪を取ってflagAntC32がtrueになったので、917~925行目のelse if文が真になります。これで、依頼アリに指輪を渡して、イベントはクリアとなります。
 918行目で、キーボード操作を無効にしています。今回のイベントは、クリア後に少しアニメーションを用意したので、そのアニメーションの邪魔をしないようにしています。
 919行目で、flagAntEvCがtrueになります。これで、アリイベントCがクリアしたということをプログラムが認識します。
 924行目は、setTimeout関数です。内容は以下になります。

setTimeout(使用したい関数, 使用するまでの長さ)

 今回の場合は、3秒後にantpaint関数を使うようにしています。


 antpaint関数です。中身は、eventpaint関数とほとんど同じです。メッセージの内容を変えています。
 setTimeoutを使うことで、3秒後にメッセージを変えているような感じです。これによって、メッセージを自動で送っています。
 antpaint関数でも、setTimeoutを用いて3秒後にdigpaint1関数を使用するようにしています。


 972~976行目がdigpaint1関数です。ここで、画面全体を黒く表示しています。
 975行目で、またsetTimeoutを使用して、3秒後にdigpaint2関数を使用するようにしています。

 978~985行目がdigpaint2関数です。
 979行目でキーボード操作を有効にしています。これで、ユーザーはまたゲームを操作できるようになります。
 980、981行目でプレイヤーの位置を移動しています。
 982、983行目で指定したマップの座標に地上と地下を切り替える裂け目を加えています。

 アニメーションの一連の流れは以下のようになります。
①依頼アリに指輪を渡す。メッセージが流れる。同時にキーボード操作が行えなくなる。
②(antpaint関数発動)3秒後、別のメッセージが表示される。
③(digpaint1関数発動)3秒後、画面全体が暗転する。
④(digpaint2関数発動)3秒後、キャラクターの位置がずれ、地上に上がる割れ目がマップに新しく表示される。

 これで、新しい場所に行けるようになりました。これで、今回のイベントがクリアとなります。

おわり

 以上が今回のプログラムの解説になります。またお使いイベントでしたね。しかし、今回はアニメーションを加えてみました。今まで使ったことがなかったので、少し苦戦しましたが、思い通りの動作になって嬉しいです。
 今回はイベントを進めるために水を使用しましたが、海水を使えるように分岐させても面白いかなと思っています。時間がないような気がしますが、気が向いたら実装してみます。
 次回も、イベントに関する記事を書きたいと思います。

イベントを作る④

  こんにちは。ひらひさです。

今回も、イベントを作っていきます。

イベントの説明

今回使うマップです。


 画面下にいる3匹のアリのうち、右端のアリに話しかけます。どうやら触角の動かし方を忘れてしまったようです。これは大変ですね。周りのアリに話しかけて動かし方を聞いてほしいみたいです。
 では、暇そうなアリに話しかけてみましょう。


 画面下にいる3匹のアリのうち、中央のアリに話しかけました。現在は適当なことを言っていますが、後々詳しい文章にする予定です、、、
 このように、話しかけると触角を動かすヒントを教えてくれます。残りのアリにも同様に話しかけていきます。
 

 上の丸がついている5匹のアリに話しかければクエストクリアになります。
 

 全員に話しかけた後、依頼アリに話しかけるとイベントクリアです。

プログラムの説明

 では、このイベントを動かすプログラムを見ていきましょう。
 イベントが発生するプログラムは前回までの記事と同様です。


 879~901行目が、mpt59の時に発生する動作です。この場合は、触角の動かし方を忘れたアリが対象です。
 最初に話しかけたときは、880~888行目のif文が真となります。条件は、

flagAntBx==false || flagAntBx==true && flagAntBy==false || flagAntBy==true...

です。条件式内の「||」は、falseまたはtrueの時という意味になります。
 このイベントが発生したら、色々なアリに話しかける必要があるのですが、全てのアリと話していないと、上記のメッセージが出るようになっています。
 881行目でflagAntB1をtrueにしています。これによって、触角イベントが発生したことをプログラムが認識します。
 

 イベントが発生した際の話を聞くアリのプログラムです。普段は何気ないことを言うのですが、触角イベントが発生した際に、イベントに関することを言うようにプログラムします。
 741行目のif文の条件式は、flagAntB1がtrueの時かつflagAntEvBがfalseの時が条件です。
 flagAntB1は、触角イベントの依頼アリに話しかけたときにtrueになります。モブアリAの場合、依頼アリに話しかけないと、741行目の条件式が偽になるため、触角イベントに対応したメッセージが出ないようになります。
 742行目でflagAntB2をtrueとします。これで、モブアリAに話しかけたことをプログラムが認識します。
 
 同様のプログラムを他の4匹のモブアリにも行います。


 521~514行目は全てのアリから情報を得たことを認識するプログラムです。
 条件式がflagAntBx==true && ~ となっています。先ほどの解説ではモブアリAに話しかけたときに、flagAntB2がtrueになるようにしていました。同様のプログラムをほかのモブアリにも施しています。そのため、全てのモブアリに話しかけると、この条件式が真になり、flagAntB6がtrueになります。
 

 依頼アリのプログラムに戻ります。
 すべてのアリと話した後、依頼アリに話かけると、893~897行目のelse if 文が真になります。これで、触角イベントがクリアとなります。

おわり

 以上が今回のプログラムの解説になります。簡単なお使いイベントでした。アリ要素を入れたくて触角の動かし方を忘れたということにしましたが、現実ではありえないですよね。
 次回も、イベントに関する記事を書きたいと思います。                  

ホットな投稿

イベントを作る⑥