マイクラの「ゾンビお家に帰ろう」プラットフォーマーの作り方 #2

マイクラの「ゾンビお家に帰ろう」プラットフォーマーの作り方 #2
ok-scratch

スクラッチに挑戦している皆さん、どうも!スクラッチコーチです。

マイクラ風のゾンビを操作して溶岩を避けながら11ステージのゴールを目指すプラットフォーマーゲームを作るよ。摩擦・慣性・重力の物理演算、壁ジャンプ、昼夜サイクルなど本格テクニックが満載!

さぁ、スクラッチでナニ作る!?

チュートリアルの元になった作品

マインクラフト風の横スクロールプラットフォーマーゲーム。ゾンビ親子を操作して溶岩や障害物を避けながらステージを進み、ゴールを目指す。griffpatch式の壁登り・壁ジャンプ、昼夜サイクルによるダメージゾーン、sin波による月の脈動アニメーション、ゴールセレブレーション演出など多彩な仕組みを持つ

今回の目標

タイミング計測を使ったターボモード(ズル)検出機能を追加して、ゲームの公平性を守る仕組みを完成させよう。

スターター作品をリミックスしよう

このチュートリアルにはスターター作品があります。使わなくても大丈夫だけど、最低限の素材などが用意されてるので便利です。
スターター作品をダウンロード

このチュートリアルでは作者さんの実装方法を尊重して作ってますが、最低限の改善をしてます。(参考作品と同じものが完成するわけではない点はご注意)

#1ターボ検出カウンター

ok-scratch ok-scratch
ターボモードというズルを検出するスプライトを作るよ。まずは高速カウンターの部分からだね。

準備

スプライト「ターボ検出」を開く

ターボ検出ターボ検出
スプライトについて
ターボモード(チート)を検出し、使用を検出した場合にゲームを全停止する
どんな役割か
ターボモードというチートを使っていないかチェックするスプライトだよ。タイミング計測でズルを見抜いて、ゲームを止める仕組みを作るよ。

変数「★ターボ」を追加

ターボモード検出用のカウンター。0.001秒間の増分で実行速度を判定

変数「★ターボ」を追加

実装

step-56

見た目 ( ) へ移動する で最前面に配置して、 動き x座標を ( ) 、y座標を ( ) にする で画面中央(0, 0)に置くよ。 制御 ずっと ループの中で 変数 ( ) を ( ) ずつ変える を使って「★ターボ」変数を1ずつ増やし続けるんだ。このカウンターがどれくらいの速さで増えるかが、ターボモード判定のカギになるよ。

#2ターボモード判定

ok-scratch ok-scratch
別のスクリプトで、0.001秒の間にカウンターがどれだけ増えたかチェックするよ。
step-57

制御 ずっと ループの中で、まず 変数 ( ) を ( ) にする で「★ターボ」を0にリセットするよ。次に 制御 ( ) 秒待つ で0.001秒だけ待つんだ。通常モードでは0.001秒の間に「★ターボ」が3を超えることはないけど、ターボモードでは処理速度が跳ね上がるから軽々と超えてしまうよ。

制御 もし ( ) ならでなければ で「★ターボ」が3より大きいかチェックして、ターボモードかどうかを判定するよ。

#3チート検出と停止

ok-scratch ok-scratch
ターボモードが検出されたら、警告を表示してゲームを全停止するよ。これですべての機能が完成だね。
step-58

「★ターボ」が3を超えていたら 見た目 表示する で警告メッセージを表示して、 制御   ですべてを止めるんだ。通常モードの場合は 見た目 隠す で警告を非表示のままにしておくよ。

ok-scratch ok-scratch
この仕組みは「2つの並行ループの競争」で実行速度を測るテクニックだよ。片方がひたすらカウントして、もう片方が一定時間後にその値をチェックする。カウントが速すぎたら、通常より速く動いている証拠なんだ。こういうチート対策の考え方は、オンラインゲームの公平性を保つためにプロの開発者も使っている手法だよ。

まとめ

これで完全に完成!ターボモード検出は「2つの並行ループの競争で実行速度を測る」というユニークなテクニックだよ。今回のゲームで学んだ物理演算、数学的アニメーション、チート対策のすべてを活かして、次のオリジナル作品にチャレンジしてみよう!

このスクラッチゲームの作り方への質問受付中! このスクラッチゲームの作り方への質問受付中!
チュートリアルで分からないことがあったらスクラッチAI「アスクラッチ」で何でも聞いてみよう!キミの作品の「中を見て」具体的にバグの調査をAIが手伝ってくれるよ!
アスクラッチで質問する
ブクマよろしくお願いします! ブクマよろしくお願いします!
どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!