モンスト風ゲームを作ろう!
レベル ★★☆ボールを 引っぱって離す と、ボールが飛んでいくよ。壁で跳ね返りながら 敵にぶつけよう!
これから、このゲームを ステップバイステップ で作っていこう!
スプライトライブラリから 「Ball」 を探して追加しよう。名前を 「ボール」 に変えてね。
@greenFlag が押されたとき
[スコア v] を [0] にする
[ライフ v] を [5] にする
[ドラッグ中 v] を [0] にする
[スピードX v] を [0] にする
[スピードY v] を [0] にする
x座標を (0) 、y座標を (-120) にする
大きさを (60) %にする
表示する
ボールの完成プログラム(この時点):
@greenFlag が押されたとき
[スコア v] を [0] にする
[ライフ v] を [5] にする
[ドラッグ中 v] を [0] にする
[スピードX v] を [0] にする
[スピードY v] を [0] にする
x座標を (0) 、y座標を (-120) にする
大きさを (60) %にする
表示する
ステージをクリックして、背景ライブラリから 「Neon Tunnel」 などカッコいい背景を選ぼう。
スプライトライブラリから 「Crab」 を探して追加しよう。名前を 「てき1」 に変えてね。
@greenFlag が押されたとき
[てき1HP v] を [3] にする
画像効果をなくす
x座標を (-100) 、y座標を (80) にする
大きさを (70) %にする
表示する
てき1の完成プログラム(この時点):
@greenFlag が押されたとき
[てき1HP v] を [3] にする
画像効果をなくす
x座標を (-100) 、y座標を (80) にする
大きさを (70) %にする
表示する
ボールをクリックしたら ドラッグ開始。マウスについてくるようにしよう。
スクリプト2: ドラッグ開始
このスプライトが押されたとき
もし <(ライフ) > [0]> なら
[開始X v] を (x座標) にする
[開始Y v] を (y座標) にする
[ドラッグ中 v] を [1] にする
end
スクリプト3: ドラッグ中の追従
@greenFlag が押されたとき
ずっと
もし <(ドラッグ中) = [1]> なら
もし <(マウスのy座標) < [-40]> なら
x座標を (マウスのx座標) 、y座標を (マウスのy座標) にする
でなければ
x座標を (マウスのx座標) 、y座標を (-40) にする
end
end
end
ボールの完成プログラム(この時点):
スクリプト1(初期設定):
@greenFlag が押されたとき
[スコア v] を [0] にする
[ライフ v] を [5] にする
[ドラッグ中 v] を [0] にする
[スピードX v] を [0] にする
[スピードY v] を [0] にする
x座標を (0) 、y座標を (-120) にする
大きさを (60) %にする
表示する
スクリプト2(ドラッグ開始):
このスプライトが押されたとき
もし <(ライフ) > [0]> なら
[開始X v] を (x座標) にする
[開始Y v] を (y座標) にする
[ドラッグ中 v] を [1] にする
end
スクリプト3(ドラッグ中の追従):
@greenFlag が押されたとき
ずっと
もし <(ドラッグ中) = [1]> なら
もし <(マウスのy座標) < [-40]> なら
x座標を (マウスのx座標) 、y座標を (マウスのy座標) にする
でなければ
x座標を (マウスのx座標) 、y座標を (-40) にする
end
end
end
マウスを離したら、引っぱった 反対方向 にボールを飛ばそう!
スクリプト4: マウスを離したら発射
@greenFlag が押されたとき
ずっと
もし <<(ドラッグ中) = [1]> かつ <<マウスが押された> ではない>> なら
[スピードX v] を (((開始X) - (マウスのx座標)) * (0.2)) にする
[スピードY v] を (((開始Y) - (マウスのy座標)) * (0.2)) にする
[ドラッグ中 v] を [0] にする
[ライフ v] を (-1) ずつ変える
[発射 v] を送る
end
end
ボールの完成プログラム(この時点):
スクリプト1(初期設定):
@greenFlag が押されたとき
[スコア v] を [0] にする
[ライフ v] を [5] にする
[ドラッグ中 v] を [0] にする
[スピードX v] を [0] にする
[スピードY v] を [0] にする
x座標を (0) 、y座標を (-120) にする
大きさを (60) %にする
表示する
スクリプト2(ドラッグ開始):
このスプライトが押されたとき
もし <(ライフ) > [0]> なら
[開始X v] を (x座標) にする
[開始Y v] を (y座標) にする
[ドラッグ中 v] を [1] にする
end
スクリプト3(ドラッグ中の追従):
@greenFlag が押されたとき
ずっと
もし <(ドラッグ中) = [1]> なら
もし <(マウスのy座標) < [-40]> なら
x座標を (マウスのx座標) 、y座標を (マウスのy座標) にする
でなければ
x座標を (マウスのx座標) 、y座標を (-40) にする
end
end
end
スクリプト4(発射):
@greenFlag が押されたとき
ずっと
もし <<(ドラッグ中) = [1]> かつ <<マウスが押された> ではない>> なら
[スピードX v] を (((開始X) - (マウスのx座標)) * (0.2)) にする
[スピードY v] を (((開始Y) - (マウスのy座標)) * (0.2)) にする
[ドラッグ中 v] を [0] にする
[ライフ v] を (-1) ずつ変える
[発射 v] を送る
end
end
「発射」メッセージを受け取ったら、ボールがスピードに合わせて動くようにしよう。だんだん遅くなって止まるよ。
スクリプト5: 発射後の移動(基本)
[発射 v] を受け取ったとき
<(((スピードX) の [絶対値 v]) + ((スピードY) の [絶対値 v])) < [0.5]> まで繰り返す
x座標を (スピードX) ずつ変える
y座標を (スピードY) ずつ変える
[スピードX v] を ((スピードX) * (0.99)) にする
[スピードY v] を ((スピードY) * (0.99)) にする
end
x座標を (0) 、y座標を (-120) にする
[スピードX v] を [0] にする
[スピードY v] を [0] にする
ボールの完成プログラム(この時点):
スクリプト1(初期設定):
@greenFlag が押されたとき
[スコア v] を [0] にする
[ライフ v] を [5] にする
[ドラッグ中 v] を [0] にする
[スピードX v] を [0] にする
[スピードY v] を [0] にする
x座標を (0) 、y座標を (-120) にする
大きさを (60) %にする
表示する
スクリプト2(ドラッグ開始):
このスプライトが押されたとき
もし <(ライフ) > [0]> なら
[開始X v] を (x座標) にする
[開始Y v] を (y座標) にする
[ドラッグ中 v] を [1] にする
end
スクリプト3(ドラッグ中の追従):
@greenFlag が押されたとき
ずっと
もし <(ドラッグ中) = [1]> なら
もし <(マウスのy座標) < [-40]> なら
x座標を (マウスのx座標) 、y座標を (マウスのy座標) にする
でなければ
x座標を (マウスのx座標) 、y座標を (-40) にする
end
end
end
スクリプト4(発射):
@greenFlag が押されたとき
ずっと
もし <<(ドラッグ中) = [1]> かつ <<マウスが押された> ではない>> なら
[スピードX v] を (((開始X) - (マウスのx座標)) * (0.2)) にする
[スピードY v] を (((開始Y) - (マウスのy座標)) * (0.2)) にする
[ドラッグ中 v] を [0] にする
[ライフ v] を (-1) ずつ変える
[発射 v] を送る
end
end
スクリプト5(移動 - 基本):
[発射 v] を受け取ったとき
<(((スピードX) の [絶対値 v]) + ((スピードY) の [絶対値 v])) < [0.5]> まで繰り返す
x座標を (スピードX) ずつ変える
y座標を (スピードY) ずつ変える
[スピードX v] を ((スピードX) * (0.99)) にする
[スピードY v] を ((スピードY) * (0.99)) にする
end
x座標を (0) 、y座標を (-120) にする
[スピードX v] を [0] にする
[スピードY v] を [0] にする
スクリプト5の移動ループの中に、壁反射 を追加しよう。
追加するのはこの部分(移動ループの中に入れるよ):
もし <(x座標) > [220]> なら
[スピードX v] を ((スピードX) * (-1)) にする
x座標を (220) にする
end
もし <(x座標) < [-220]> なら
[スピードX v] を ((スピードX) * (-1)) にする
x座標を (-220) にする
end
もし <(y座標) > [160]> なら
[スピードY v] を ((スピードY) * (-1)) にする
y座標を (160) にする
end
もし <(y座標) < [-160]> なら
[スピードY v] を ((スピードY) * (-1)) にする
y座標を (-160) にする
end
ボールのスクリプト5 完成プログラム(この時点):
[発射 v] を受け取ったとき
<(((スピードX) の [絶対値 v]) + ((スピードY) の [絶対値 v])) < [0.5]> まで繰り返す
x座標を (スピードX) ずつ変える
y座標を (スピードY) ずつ変える
もし <(x座標) > [220]> なら
[スピードX v] を ((スピードX) * (-1)) にする
x座標を (220) にする
end
もし <(x座標) < [-220]> なら
[スピードX v] を ((スピードX) * (-1)) にする
x座標を (-220) にする
end
もし <(y座標) > [160]> なら
[スピードY v] を ((スピードY) * (-1)) にする
y座標を (160) にする
end
もし <(y座標) < [-160]> なら
[スピードY v] を ((スピードY) * (-1)) にする
y座標を (-160) にする
end
[スピードX v] を ((スピードX) * (0.99)) にする
[スピードY v] を ((スピードY) * (0.99)) にする
end
x座標を (0) 、y座標を (-120) にする
[スピードX v] を [0] にする
[スピードY v] を [0] にする
まずは てき1 だけ当たり判定をつけよう。
スクリプト5の移動ループの中に追加しよう:
もし <[てき1 v] に触れた> なら
[てき1ヒット v] を送る
end
てき1のスクリプト2: ヒット処理
[てき1ヒット v] を受け取ったとき
[てき1HP v] を (-1) ずつ変える
[色 v] の効果を (25) ずつ変える
もし <(てき1HP) < [1]> なら
[スコア v] を (100) ずつ変える
隠す
end
ボールのスクリプト5 完成プログラム(この時点):
[発射 v] を受け取ったとき
<(((スピードX) の [絶対値 v]) + ((スピードY) の [絶対値 v])) < [0.5]> まで繰り返す
x座標を (スピードX) ずつ変える
y座標を (スピードY) ずつ変える
もし <(x座標) > [220]> なら
[スピードX v] を ((スピードX) * (-1)) にする
x座標を (220) にする
end
もし <(x座標) < [-220]> なら
[スピードX v] を ((スピードX) * (-1)) にする
x座標を (-220) にする
end
もし <(y座標) > [160]> なら
[スピードY v] を ((スピードY) * (-1)) にする
y座標を (160) にする
end
もし <(y座標) < [-160]> なら
[スピードY v] を ((スピードY) * (-1)) にする
y座標を (-160) にする
end
[スピードX v] を ((スピードX) * (0.99)) にする
[スピードY v] を ((スピードY) * (0.99)) にする
もし <[てき1 v] に触れた> なら
[てき1ヒット v] を送る
end
end
x座標を (0) 、y座標を (-120) にする
[スピードX v] を [0] にする
[スピードY v] を [0] にする
てき1の完成プログラム(この時点):
スクリプト1(初期設定):
@greenFlag が押されたとき
[てき1HP v] を [3] にする
画像効果をなくす
x座標を (-100) 、y座標を (80) にする
大きさを (70) %にする
表示する
スクリプト2(ヒット処理):
[てき1ヒット v] を受け取ったとき
[てき1HP v] を (-1) ずつ変える
[色 v] の効果を (25) ずつ変える
もし <(てき1HP) < [1]> なら
[スコア v] を (100) ずつ変える
隠す
end
ここまでのプログラムで、スコア と ライフ はもう動いているよ!
変数の表示設定を確認しよう。ステージの左上に 「スコア」 と 「ライフ」 が表示されていればOK!
表示しない変数(スピードX、スピードY、ドラッグ中、開始X、開始Y、てき1HP など)は、変数パレットのチェックを 外そう。
敵を増やそう! スプライトライブラリから追加してね。
てき2のスクリプト1: 初期設定
@greenFlag が押されたとき
[てき2HP v] を [3] にする
画像効果をなくす
x座標を (100) 、y座標を (80) にする
大きさを (70) %にする
表示する
てき2のスクリプト2: ヒット処理
[てき2ヒット v] を受け取ったとき
[てき2HP v] を (-1) ずつ変える
[色 v] の効果を (25) ずつ変える
もし <(てき2HP) < [1]> なら
[スコア v] を (100) ずつ変える
隠す
end
てき3のスクリプト1: 初期設定
@greenFlag が押されたとき
[てき3HP v] を [5] にする
画像効果をなくす
x座標を (0) 、y座標を (100) にする
大きさを (100) %にする
表示する
てき3のスクリプト2: ヒット処理
[てき3ヒット v] を受け取ったとき
[てき3HP v] を (-1) ずつ変える
[色 v] の効果を (25) ずつ変える
大きさを ((70) + ((てき3HP) * (6))) %にする
もし <(てき3HP) < [1]> なら
[スコア v] を (300) ずつ変える
隠す
end
次に、ボール のスクリプト5にてき2・てき3の当たり判定を追加しよう。
移動ループの中に追加:
もし <[てき2 v] に触れた> なら
[てき2ヒット v] を送る
end
もし <[てき3 v] に触れた> なら
[てき3ヒット v] を送る
end
ボールのスクリプト5 完成プログラム(この時点):
[発射 v] を受け取ったとき
<(((スピードX) の [絶対値 v]) + ((スピードY) の [絶対値 v])) < [0.5]> まで繰り返す
x座標を (スピードX) ずつ変える
y座標を (スピードY) ずつ変える
もし <(x座標) > [220]> なら
[スピードX v] を ((スピードX) * (-1)) にする
x座標を (220) にする
end
もし <(x座標) < [-220]> なら
[スピードX v] を ((スピードX) * (-1)) にする
x座標を (-220) にする
end
もし <(y座標) > [160]> なら
[スピードY v] を ((スピードY) * (-1)) にする
y座標を (160) にする
end
もし <(y座標) < [-160]> なら
[スピードY v] を ((スピードY) * (-1)) にする
y座標を (-160) にする
end
[スピードX v] を ((スピードX) * (0.99)) にする
[スピードY v] を ((スピードY) * (0.99)) にする
もし <[てき1 v] に触れた> なら
[てき1ヒット v] を送る
end
もし <[てき2 v] に触れた> なら
[てき2ヒット v] を送る
end
もし <[てき3 v] に触れた> なら
[てき3ヒット v] を送る
end
end
x座標を (0) 、y座標を (-120) にする
[スピードX v] を [0] にする
[スピードY v] を [0] にする
てき2の完成プログラム:
スクリプト1(初期設定):
@greenFlag が押されたとき
[てき2HP v] を [3] にする
画像効果をなくす
x座標を (100) 、y座標を (80) にする
大きさを (70) %にする
表示する
スクリプト2(ヒット処理):
[てき2ヒット v] を受け取ったとき
[てき2HP v] を (-1) ずつ変える
[色 v] の効果を (25) ずつ変える
もし <(てき2HP) < [1]> なら
[スコア v] を (100) ずつ変える
隠す
end
てき3の完成プログラム:
スクリプト1(初期設定):
@greenFlag が押されたとき
[てき3HP v] を [5] にする
画像効果をなくす
x座標を (0) 、y座標を (100) にする
大きさを (100) %にする
表示する
スクリプト2(ヒット処理):
[てき3ヒット v] を受け取ったとき
[てき3HP v] を (-1) ずつ変える
[色 v] の効果を (25) ずつ変える
大きさを ((70) + ((てき3HP) * (6))) %にする
もし <(てき3HP) < [1]> なら
[スコア v] を (300) ずつ変える
隠す
end
引っぱっているとき、発射方向に矢印 を表示しよう。狙いやすくなるよ!
新しいスプライトを「描く」で作ろう。上向きの矢印(↑)を描いて、名前を 「やじるし」 にしてね。矢印の下端をコスチュームの中心に合わせよう。
@greenFlag が押されたとき
隠す
ずっと
もし <(ドラッグ中) = [1]> なら
[ボール v] へ行く
x座標を (((開始X) - (マウスのx座標)) * (0.5)) ずつ変える
y座標を (((開始Y) - (マウスのy座標)) * (0.5)) ずつ変える
表示する
でなければ
隠す
end
end
やじるしの完成プログラム:
@greenFlag が押されたとき
隠す
ずっと
もし <(ドラッグ中) = [1]> なら
[ボール v] へ行く
x座標を (((開始X) - (マウスのx座標)) * (0.5)) ずつ変える
y座標を (((開始Y) - (マウスのy座標)) * (0.5)) ずつ変える
表示する
でなければ
隠す
end
end
全部の敵を倒したら ゲームクリア! ライフが0なのに敵が残っていたら ゲームオーバー にしよう。
スクリプト5の ループの後ろ(元の位置にもどる処理の後) に追加しよう:
もし <<(てき1HP) < [1]> かつ <<(てき2HP) < [1]> かつ <(てき3HP) < [1]>>> なら
[ゲームクリア v] を送る
end
もし <<(ライフ) < [1]> かつ <<(てき1HP) > [0]> または <<(てき2HP) > [0]> または <(てき3HP) > [0]>>>> なら
[ゲームオーバー v] を送る
end
ボールのスクリプト6: ゲームクリア時
[ゲームクリア v] を受け取ったとき
[ゲームクリア! v] と (2) 秒言う
すべてを止める
ボールのスクリプト7: ゲームオーバー時
[ゲームオーバー v] を受け取ったとき
[ゲームオーバー... v] と (2) 秒言う
すべてを止める
最後に、ステージ(背景) にもスクリプトを追加しよう。背景を3つ用意してね(ゲームステージ、クリア、ゲームオーバー)。
ステージのスクリプト1: 初期化
@greenFlag が押されたとき
背景を [ゲームステージ v] にする
ステージのスクリプト2: ゲームクリア
[ゲームクリア v] を受け取ったとき
背景を [クリア v] にする
ステージのスクリプト3: ゲームオーバー
[ゲームオーバー v] を受け取ったとき
背景を [ゲームオーバー v] にする
ボールのスクリプト5 最終完成プログラム:
[発射 v] を受け取ったとき
<(((スピードX) の [絶対値 v]) + ((スピードY) の [絶対値 v])) < [0.5]> まで繰り返す
x座標を (スピードX) ずつ変える
y座標を (スピードY) ずつ変える
もし <(x座標) > [220]> なら
[スピードX v] を ((スピードX) * (-1)) にする
x座標を (220) にする
end
もし <(x座標) < [-220]> なら
[スピードX v] を ((スピードX) * (-1)) にする
x座標を (-220) にする
end
もし <(y座標) > [160]> なら
[スピードY v] を ((スピードY) * (-1)) にする
y座標を (160) にする
end
もし <(y座標) < [-160]> なら
[スピードY v] を ((スピードY) * (-1)) にする
y座標を (-160) にする
end
[スピードX v] を ((スピードX) * (0.99)) にする
[スピードY v] を ((スピードY) * (0.99)) にする
もし <[てき1 v] に触れた> なら
[てき1ヒット v] を送る
end
もし <[てき2 v] に触れた> なら
[てき2ヒット v] を送る
end
もし <[てき3 v] に触れた> なら
[てき3ヒット v] を送る
end
end
x座標を (0) 、y座標を (-120) にする
[スピードX v] を [0] にする
[スピードY v] を [0] にする
もし <<(てき1HP) < [1]> かつ <<(てき2HP) < [1]> かつ <(てき3HP) < [1]>>> なら
[ゲームクリア v] を送る
end
もし <<(ライフ) < [1]> かつ <<(てき1HP) > [0]> または <<(てき2HP) > [0]> または <(てき3HP) > [0]>>>> なら
[ゲームオーバー v] を送る
end
ボールのスクリプト6(クリア時):
[ゲームクリア v] を受け取ったとき
[ゲームクリア! v] と (2) 秒言う
すべてを止める
ボールのスクリプト7(ゲームオーバー時):
[ゲームオーバー v] を受け取ったとき
[ゲームオーバー... v] と (2) 秒言う
すべてを止める
ステージの完成プログラム:
スクリプト1:
@greenFlag が押されたとき
背景を [ゲームステージ v] にする
スクリプト2:
[ゲームクリア v] を受け取ったとき
背景を [クリア v] にする
スクリプト3:
[ゲームオーバー v] を受け取ったとき
背景を [ゲームオーバー v] にする
ひっぱりハンティングをもっと面白くする 改造アイデア だよ。自分だけのゲームにしよう!