衝突の対象によって動作を設定したい

  • AA
  • 2013/07/14 (Sun) 19:34:41
こんにちは。
かめが衝突する際に、相手が宝なら得点を増やし、敵ならゲームオーバーにしたいのですが、

得点=フィールド! 0 作る。
かめ:衝突=「|相手|「相手==宝」!
なら
「得点!((得点!読む)+10)書く。 相手! 消える。 自分:衝突=「」」実行」。

にしても、一つの宝にしか反応しません。一つだけが消えて得点が加算されるのみで、
他の宝に重なっても何も起こりません。
また敵と衝突した場合の条件分岐はどうしたらいいでしょうか?
よろしくお願いします。

衝突の対象によって動作を設定したい

  • kanemune
  • 2013/07/17 (Wed) 19:38:01
動いたそうでよかったですね。
いろいろと工夫を考えていてすばらしいと思います。
ぜひプログラムを楽しんでください。

衝突の対象によって動作を設定したい

  • AA
  • 2013/07/17 (Wed) 19:29:50
回答ありがとうございます。
できました!頂いたサンプルでようやくわかりました。タイマーで何度も判定しなくてはいけませんね。
あと、タイマーの判定回数を増やして時間も長くとりました。200という大きな数字では無理なようなので、
別の得点欄に1や2といった小さな点数で計算させて、そちらの方で判定を出す形式にしました。
まずこのような根本的な部分からプログラムを作っていけばよかったですね。
勉強になりました。ありがとうございました。

衝突の対象によって動作を設定したい

  • kanemune
  • 2013/07/17 (Wed) 18:28:45
ご質問の件は、次のプログラムと同じ状況でしょうか?

=====
得点=フィールド!”0” 作る。
タイマー!作る「得点!増やす」実行。
「(得点!読む)==10」!なら「ラベル!”あいうえお” 作る。」実行。
=====

条件が満たされたかどうかはタイマーで繰り返すたびに調べる必要がありますので、
この例では実行する部分(得点!増やす)の後ろに条件判定を置くのがよいと思います。

=====
得点=フィールド!”0” 作る。
タイマー!作る「得点!増やす。「(得点!読む)==10」!なら「ラベル!”あいうえお” 作る。」実行。」実行。
=====

プログラムが大きくなってくると調べるのは大変ですね。
今回のように「その部分だけを試す小さなプログラム」を別に作って試すとわかりやすいと思います。

衝突の対象によって動作を設定したい

  • AA
  • 2013/07/17 (Wed) 18:11:40
回答ありがとうございます。サンプルを参考にしたおかげで敵、宝と衝突定義はうまくいったのですが、
「(得点!読む)>= 160」! なら「かめ! 消える。 ラベル! ”おめでとう!” 作る (赤) 文字色」実行。
として160点以上とっても何の反応もしません。
<=にすれば、得点の初期値は0であるため実行した瞬間にラベルが出現するのですが
>=や==だと得点の条件を満たしても何も起こりません。どうしたらいいのでしょうか。

衝突の対象によって動作を設定したい

  • kanemune
  • 2013/07/15 (Mon) 19:59:47
大きなプログラムを作ってから衝突を加えるのは大変ですね。
私のサンプルのように小さな10行くらいの確実に動く状態から始めて、少しずつ拡張するのが早道かもしれません。

衝突の対象によって動作を設定したい

  • AA
  • 2013/07/15 (Mon) 18:33:45
回答ありがとうございます。
サンプルの方では可能なのですが、私の作っているプログラムで宝を1つ1つ作り、
宝1、2それぞれに衝突定義をしても何の反応もありません。
私のプログラムでは、かめを上下左右に操作し、乱数で配置された宝や敵が落下してくるというものなのですが、
それらが乱数で生成される為に、すでに何かと衝突してしまっているのでは……と思い、
宝の方に、相手がかめならば…の、>>1に記述したプログラムの一部変更したものを定義したものの、
やはり何の反応もありません。
宝や敵が落下してこない、場所固定のプログラムにしてしまえば可能でしょうか?

衝突の対象によって動作を設定したい

  • kanemune
  • 2013/07/15 (Mon) 15:07:06
サンプルです。

=====
かめた=タートル!作る。

花1=タートル!作る ペンなし 100 歩く "tulip.png" 変身する。
花2=タートル!作る ペンなし 200 歩く "tulip.png" 変身する。
敵1=タートル!作る ペンなし 300 歩く "car.png" 変身する。
花1:衝突=「自分!消える」。
花2:衝突=「自分!消える」。
敵1:衝突=「|相手| 相手!消える」。

タイマー!作る「かめた!10 歩く」実行。

衝突の対象によって動作を設定したい

  • bb
  • 2013/07/15 (Mon) 14:58:39
//先生(置くだけ)
先生1=タートル! 作る ペンなし ”IMG.gif”変身する 0 300 位置 。
先生2=タートル! 作る ペンなし ”IMG2.gif”変身する -150 300 位置 。
先生3=タートル! 作る ペンなし ”IMG3.gif”変身する 150 300 位置。

//プレイヤーの上下左右移動
プレイヤー=タートル! 作る ペンなし 0 -150 位置 ”back.gif”変身する。
左=ボタン! ”左” ”LEFT” 作る -200 -220 位置。
左:動作=「プレイヤー! -20 0 移動する」。
右=ボタン! ”右” ”RIGHT” 作る 50 -220 位置。
右:動作=「プレイヤー! 20 0 移動する」。
上=ボタン! ”上” ”UP” 作る -70 -170 位置。
上:動作=「プレイヤー! 0 20 移動する」。
下=ボタン! ”下” ”DOWN” 作る -70 -270 位置。
下:動作=「プレイヤー! 0 -20 移動する」。

//得点
得点=フィールド! 0 作る。
単位:衝突=「得点!10 増やす。自分!消える」。






// チョーク
敵たち=配列! 作る。
敵=タートル! 作る "chalk.gif" 変身する ペンなし。
敵たち!(敵!  (乱数(100)-200) 200 位置)書く。
敵たち!(敵! 作る (乱数(100)-100) 200 位置)書く。
敵たち!(敵! 作る (乱数(100)+1) 200 位置)書く。
敵たち!(敵! 作る (乱数(100)+100) 200 位置)書く。

//単位
単位たち=配列! 作る。
単位=タートル! 作る "10point.gif" 変身する ペンなし。
単位たち!(単位!  (乱数(100)-200) 150 位置)書く。
単位たち!(単位! 作る (乱数(100)-100) 150 位置)書く。
単位たち!(単位! 作る (乱数(100)+1) 150 位置)書く。
単位たち!(単位! 作る (乱数(100)+100) 150 位置)書く。


// 敵と単位の移動 1回目
時計=タイマー! 作る 0.8秒 間隔。
時計! 13 回数「敵たち!「|敵|敵! 0 -30 移動する」それぞれ実行」実行。

時計=タイマー! 作る 0.6秒 間隔。
時計! 20 回数「単位たち!「|単位|単位! 0 -30 移動する」それぞれ実行」実行。

//2回目
時計! 待つ。
敵たち!(敵!  (乱数(100)-200) 150 位置)書く。
敵たち!(敵! 作る (乱数(100)-100) 150 位置)書く。
敵たち!(敵! 作る (乱数(100)+1) 150 位置)書く。
敵たち!(敵! 作る (乱数(100)+100) 150 位置)書く。
時計=タイマー! 作る 0.8秒 間隔。
時計! 13 回数「敵たち!「|敵|敵! 0 -30 移動する」それぞれ実行」実行。

単位たち!(単位!  (乱数(100)-200) 150 位置)書く。
単位たち!(単位! 作る (乱数(100)-100) 150 位置)書く。
単位たち!(単位! 作る (乱数(100)+1) 150 位置)書く。
単位たち!(単位! 作る (乱数(100)+100) 150 位置)書く。
時計=タイマー! 作る 0.6秒 間隔。
時計! 20 回数「単位たち!「|単位|単位! 0 -30 移動する」それぞれ実行」実行。

//3回目
時計! 待つ。
敵たち!(敵!  (乱数(100)-200) 150 位置)書く。
敵たち!(敵! 作る (乱数(100)-100) 150 位置)書く。
敵たち!(敵! 作る (乱数(100)+1) 150 位置)書く。
敵たち!(敵! 作る (乱数(100)+100) 150 位置)書く。
時計=タイマー! 作る 0.8秒 間隔。
時計! 13 回数「敵たち!「|敵|敵! 0 -30 移動する」それぞれ実行」実行。

単位たち!(単位!  (乱数(100)-200) 150 位置)書く。
単位たち!(単位! 作る (乱数(100)-100) 150 位置)書く。
単位たち!(単位! 作る (乱数(100)+1) 150 位置)書く。
単位たち!(単位! 作る (乱数(100)+100) 150 位置)書く。
時計=タイマー! 作る 0.6秒 間隔。
時計! 20 回数「単位たち!「|単位|単位! 0 -30 移動する」それぞれ実行」実行。

//4回目
時計! 待つ。
敵たち!(敵!  (乱数(100)-200) 150 位置)書く。
敵たち!(敵! 作る (乱数(100)-100) 150 位置)書く。
敵たち!(敵! 作る (乱数(100)+1) 150 位置)書く。
敵たち!(敵! 作る (乱数(100)+100) 150 位置)書く。
時計=タイマー! 作る 0.8秒 間隔。
時計! 13 回数「敵たち!「|敵|敵! 0 -30 移動する」それぞれ実行」実行。

単位たち!(単位!  (乱数(100)-200) 150 位置)書く。
単位たち!(単位! 作る (乱数(100)-100) 150 位置)書く。
単位たち!(単位! 作る (乱数(100)+1) 150 位置)書く。
単位たち!(単位! 作る (乱数(100)+100) 150 位置)書く。
時計=タイマー! 作る 0.6秒 間隔。
時計! 20 回数「単位たち!「|単位|単位! 0 -30 移動する」それぞれ実行」実行。

今作ってるプログラムですが・・・間違いありますか?

無題

  • bb
  • 2013/07/15 (Mon) 14:51:54
できませんねー。
自分! 消える にするとどっちも消えてくれませんし点数も増えません・・・・

衝突の対象によって動作を設定したい

  • kanemune
  • 2013/07/15 (Mon) 13:22:49
相手が多いと、条件判断が大変ですね。
1個ずつ定義することになりますが、宝や敵のほうに衝突を定義してはいかがでしょう。

宝1:衝突=「得点!10 増やす。自分!消える」。
宝2:衝突=「得点!10 増やす。自分!消える」。
敵1:衝突=「時計!中断」。
敵2:衝突=「時計!中断」。

(投稿前に、内容をプレビューして確認できます)