かなり難しい動作かもしれない(質問掲示板

投稿: Material 43133 1 mini 亀狸兎 投稿:2012/07/27 16:35:27(最新:2012/07/27 20:53:27)
「RmakeでACTゲームをつくろう」の例を見ながらACTゲームのスクリプトを勉強中です。

次の障害物を作ってみようと試行錯誤しましたが、なかなかうまくいきません。


機能1 ブロックがランダムに上から降ってくる。
機能2 ブロックにはさまれたらゲームオーバー。
機能3 ブロックに乗れる。
機能4 降ってきたブロックが地面でとどまる。(テトリスのように)


ゲーム内容:落ちてくるブロックを避けて、積みあがった先にあるゴールに到着する


幾日も削って苦戦していますので、質問掲示板にて助けを求める形に至りました。

解決できそうなスクリプトがあれば教えてください。

コメントする

コメントするには、ログインする必要があります。

コメント一覧

Nyan mini rurun9(投稿日:2012/07/27 16:42, 履歴)
試行錯誤の経過をまずは教えてくれない事には。
ゲーム内容からして、テトリスというより「ワリオの森」に近いかな
・画面はスクロールするのか?
・操作方法と使うボタンは?
・ブロックフィールドは縦横何マスずつ?
Material 43133 1 mini 亀狸兎(投稿日:2012/07/27 18:40, 履歴)
コメントはやっ!!?

・縦スクロールあり
・Zでジャンプ、←→で左右移動
・ブロックフィールドは、ACTの参考スクリプトにのっとり

 横:25マス 縦:19マス

○経過報告

操作キャラクターを表示できた。

マップを配置できた

操作キャラクターに当たり判定をつけた

操作キャラクターをジャンプさせることができた

ブロックを表示できた

ブロックの当たり判定を設定した……が

1st argument is not array.

問題のある行
blockHit_X = getVariable("hit_map")[blockHitpos_Y1][blockHitpos_X1]

以後、原因の調査と他方法の模索に走る。

未解決

といった経緯です。早いコメントありがとうございます、そして遅くなりすみませんでした。
Nyan mini rurun9(投稿日:2012/07/27 19:40, 履歴)
予想してたよりも返信が早過ぎる件について。
エラー文の訳:おっと、ソイツは配列じゃねぇぜお嬢さんよ

・hit_mapがまだ配列になっていない
・hit_map[blockHitpos_Y1]がまだ配列になってない
・[y1][x1]となってるけど実は[x1][y1]の間違いだった→縦より横が長いので表示の際に一定数を超えると毎回ソレ以上は配列じゃないツッコミが来る罠

の可能性があるカモ
でも既に全体を改造してるならどーでもいいか


落ちてくるのが1マスブロック単発のみなら、ソレは「落下中ブロック」として別スプライトを作る方が良いカモ
プレイヤーキャラと一緒でマス単位ではなく、スムーズに落とす事が可能になるし、衝突判定はコレひとつなので処理も特別重くならない気がする
ただ、1個ずつしか降ってこないとなると横25はおそらく広過ぎてプレイ時間が伸び、ランダムではゴールへの足場ができる前に超えられない壁が積まれる未来が見えるw
Material 43133 1 mini 亀狸兎(投稿日:2012/07/27 20:53, 履歴)
おぉ!! たしかに横幅は狭くしたほうがよいですな。

以前のスクリプトはエラーがでない段階で保存してあります。すぐに全体を改造できる知識と技術はないので、まずは前回のを再チェックします。

心強い解説をありがとうございます!
128 mini fragile(投稿日:2012/07/27 17:51, 履歴)
ぷよぷよみたいに滑らかには動かないけど(一マスずつ動くタイプなら比較的ラク)
二次配列(hit[7][4]みたいに[]が2つある配列)を用意して
地形
0何もなし
1移動し終わったブロック
2ゴール地点
3~必要に応じて
を作って,
それとは別に
現在の座標,今落下中のブロックの座標を配列で用意するのがいいかと。


128 mini fragile(投稿日:2012/07/27 18:14, 履歴)
途中で切れたorz

分かりにくいけど
表の方の配列はある座標を指定して,そこはどういう状態かを調べるため,
その下の文章の方の配列はある対象(ここでいうとプレーヤーと落下中のブロック)が今どこにいるかを調べるためのもの
でちょっと違うのでご注意を。

例を出すと
上の場合
a[7][2] = 1 → (7,2)にはブロックがある

下の場合は
pos[0] = 7 ; pos[1] = 4 → 今(7,4)にいる

となんか言葉にすると分かりにくいですが,自分はこの方法でやってます。

こうしておけば
if 0 = a[rakka[0]][rakka[1]+1]

(落下中のブロックの1マス下は開いているか?)
みたいに判定が楽なので。

後,自分で書いておきながら
やっぱゴール地点も別で用意しておいた方が良かったかも。
分かりにくくてすいませんorz
128 mini fragile(投稿日:2012/07/27 18:26, 履歴)
たぶん流れはこんな感じのハズ
*

入力はあったか?
yes
→プレーヤーを動かす
 (ブロックに埋まらないように注意)

落下中のブロックはあるか?
yes
→ブロックの下は空いているか?
 yes
 →ブロックを一個下げる
 no
 →落下中のブロックを消して、
  二次配列に移し替える
no
→新しくブロックを作る

プレーヤーはブロックに潰されていないか?
yes
→ゲームオーバー
no
→プレーヤーはゴールについたか?
 yes
 →ゲームクリア
 no
 →(特に何もなし)

画像を写したり


*に戻る

役に立たない文を長々とすいません。
自分で書いておいて顰蹙ですが,自分で方法を見つけたほうが身に馴染みやすいです
Material 43133 1 mini 亀狸兎(投稿日:2012/07/27 19:06, 履歴)
この短時間でフローチャートができたことに驚きです。参考にしてもう一度作り直してみますね。ご丁寧に教えて頂きありがとうございます!