見出し画像

Mind Renderを使用してステージ自動クリアプログラムを作った話

Mind Renderを使用して、「Mind Render +こーじ第2回プログラミングコンテスト」の課題である、与えられたステージを自動でクリアするプログラムを作成しました。本プログラムの作成方法や課題について触れます。

対象読者

Mind Renderを利用したゲーム開発に興味がある人
Mind Renderを利用したプログラミングコンテストに興味がある人

本ゲームのプレイ方法


MindRender上で「miya コンテスト2301」とプログラム名を検索することでプレイ可能です。作ったプログラムは下記リンクからDL可能です。
https://share.mindrender.app/locker.html?key=CZuduT9C6DAHHZLPFgnYNLSC4WmpeHcAygw5ZMaM7e2LlkFMcnGzGS90IqOhElmqd3XelycVOS8gnxJpkSt

Mind Renderとは?


Scratchのようなブロックベースのゲーム開発ツールとなります。
2D、3Dゲームの開発やムービーの作成、物理エンジンを利用したシミュレーションなどを行うことができます。

プログラム編集画面

本コンテストについて


事前に用意されたステージ上で、センサーなどを駆使してプレイヤー(戦士)を自動でゴール地点まで移動させるMind Renderのプログラムを作るコンテストとなります。利用して良いプレイヤーの基本的な移動処理も事前に与えられた処理(前進とジャンプ)のみとなります。
賞にはプログラム賞と人気賞の2つがあります。プログラム賞は主催者審査のもとで決定され、人気賞は、プレイした第三者からの「いいね」数で決定される賞となります。クリアタイムやクリア確率、独創性、演出の要素などが評価対象になるようです。

本ステージについて


プレイヤー(戦士)、溶岩、左右に動く敵(鶏)、固定された床、左右に動く床、りんご、上下に移動する赤ブロックなどで構成されたステージとなります。
溶岩、敵、上下に移動する赤ブロックにプレイヤーが触れるとゲームオーバーになります。そのため、プレイヤーをジャンプさせてこれらから回避させる必要があります。

敵(鶏)をジャンプで回避
赤レンガ接触後ゲームオーバー

りんごに触れると、足場が浮上するようになっています。触れると溶岩上に足場が浮上して渡れるようになったり、逆に浮上しすぎて渡れなくなる場合もあり、触れるりんごを選別する必要があります。

りんご取得前
りんご取得後足場が浮上

作成方法


1. ステージと基本的なプログラムのダウンロード

共有ロッカー上で指定された共有キーを入力して、本コンテスト対象のステージと基本的なプログラム(プレイヤーの基本的な移動処理(前進やジャンプ)や敵、移動する床、ゲームオーバー、経過時間表示など)をダウンロードします(現在はDLできないようです)。

2. ゲーム開始以降プレイヤーを継続的に右移動させる

ゲーム開始(スタートボタンが押された)後、継続的に前進を実行して、常にプレイヤーを右方向に前進させます。下のプログラム内のstopはプレイヤーの移動を停止させるための変数であり、stopが0の場合に限り前進が実行されます。

ゲーム開始後、継続的に前進を実行させるプログラム
前進マクロ

3. センサーの作成

溶岩、敵、イベント地点などのオブジェクトを検知するセンサーを作成しました。センサーをプレイヤーに追従させ、画像のように下方向を向くようにしました。検知したオブジェクトに応じてプレイヤーにさまざまな行動をとらせるようにしています。例えば、溶岩や敵などを検知した場合は基本的にジャンプして回避させるようにしています。

センサー(赤丸)が溶岩検知後ジャンプ。
センサーが敵検知後ジャンプ
センサーが溶岩や敵を検知後、ジャンプを実行するプログラム
戦士が着地するまで待機する(無限ループを繰り返す)マクロ。
センサーが敵などを検知後、その後のジャンプ処理を確実に実行させるために作成しました。
ジャンプマクロ

イベント地点は見えないオブジェクトで、これらを随所に設置しています。例えばりんごの手前に設置されたイベント地点検知後は、ジャンプしてりんごをとらせたり、左右に移動する床の端に設置されたポイント検知後はジャンプで飛び移れるまで待機させたりしています。

りんご手前の見えないイベント地点(1)検知後、ジャンプ
りんご手前のイベント地点(1)検知後、ジャンプするプログラム
移動する床手前の見えないイベント地点(2)検知後、渡れるまで待機
待機後ジャンプ
イベント地点(2)検知後、渡れるまで(3.5秒間)待機するプログラム

4. 時間計測マクロの作成

イベント地点における適切な待機時間を調査するために作成したデバッグ用のマクロです。時間計測開始を実行すると、時間計測終了まで、デバッグウインドウに経過時間が表示されます。

時間計測マクロ。時間計測開始(終了)を呼び出すと計測開始(終了)します。
上下に動く床手前で待機する時間を計測中。下に経過時間が表示されます。

5. プレイヤーのセリフ表示

ゲーム開始時、りんご取得時、待機時などにセリフを表示させるようにしています。

ゲーム開始時とりんご取得時にセリフ表示

6. プレイヤーのセリフ削除マクロ作成

セリフを指定時間表示後に削除する処理がないようなので、自作しました。

[要素1]秒経過後セリフを削除するマクロ

課題


1. ゴリ押しの解消

本プログラムはゴリ押しでクリアするプログラムとなっており、この解消が課題として挙げられます。例えば左右に動く床に飛び乗るまでの待機時間はプログラムに直接書き込まれた静的な時間となっているため、地形の形状が少し変化した場合に全く対応できません。これを改善するためには、例えばセンサーを使ってプレイヤーと床との接近を検知させ、飛び移れるタイミングを待つように改良することが挙げられます。

2. クリアできる確率を高める

本プログラムは毎回必ずクリアできるものではないため、クリア確率を高めることが課題として挙げられます。
クリアできないケースの一例として、動く床の向こう岸に飛び移れないケースが挙げられます。どうも、プレイする度に、動く床が動き始めるタイミングが微妙に異なるようで運が悪いと飛び移れないようです。対策としては、課題1で挙げたセンサーを使って飛び移れるタイミングを待つ方法などが挙げられます。

3. 演出的な要素の実装

本プログラムは基本的に演出的な要素はない(せいぜいプレイヤーに「もらった!」などのセリフを喋らせる程度)ため、演出の実装が課題として挙げられます。
一応夢オチの演出を考えていましたが、実装には至りませんでした。

4. イベント地点一瞬表示されるバグ対処

イベント地点は非表示(不透明度が0)のオブジェクトですが、一瞬半透明に表示されるイベント地点が存在する原因不明のバグがあり、解消することが課題として挙げられます。

一瞬半透明に表示されるイベント地点

まとめ

本記事では、Mind Renderを利用した第二回プログラミングコンテストの課題である、ステージを自動でクリアするプログラムの作成方法などについて触れました。本記事の読者の方が、Mind Renderを利用したプログラミングやそのコンテストに対する理解を深めることができれば幸いです。





いいなと思ったら応援しよう!