【ドリトル掲示板】

プログラミング言語「ドリトル」の質問と回答をお気軽に書いてください。新規の書き込みは画面のいちばん下にあります(背景が薄緑色の部分)
・最新の情報は作者のBlogドリトルのページをご覧ください。
・詳しい情報交換はユーザーフォーラムで行われています。初めての方はアカウントを作成してログイン後、ドリトルのコースに参加して「このコースを登録する」をクリックしてください。ゲストによる閲覧も行えます。


ゲームを終わらせられません。

1:LIN :

2011/02/11 (Fri) 12:57:24

赤色のカメが長方形の図形にぶつかったらゲームクリア、
他の色のカメがぶつかったらゲームオーバー
という命令を出したいのですが、どうすればよいのでしょうか?
IF関数のようなものを使うのでしょうが、ピンポンゲームの作り方を参照しても
わかりません(><)
29:kanemune :

2012/02/16 (Thu) 19:16:16

タイマーの実行中に条件判定をしているからかもしれません。
(判定の行の前後にラベルなどで文字を表示してみると、タイマーが終わる前に表示されることがわかると思います)
タイマーの「待つ」という命令を調べてみてください。
28:λ :

2012/02/16 (Thu) 00:21:40

ゲームを終わらすことができません。助けてください。
これは、プログラムの一部です。


終焉のカウントダウン予告=ラベル! 作る "地球侵攻まで残り・・・” 書く 300 -200 位置。 
ラベル! 作る ”秒” 書く -250 450 位置。
制限時間=100。
終焉のカウントダウン=フィールド! 作る 300 -250 位置。
終了時計=タイマー! 作る 1秒 間隔 (制限時間) 時間。
終了時計!「|n|終焉のカウントダウン!(制限時間-n)書く。
」実行。
敵:衝突=「自分! 消える。得点!10 増やす」。
得点=フィールド!作る 0 書く 100 50 大きさ 450 250 位置 (黄) 色。
「(得点! 読む)>= 20」!なら「ラベル!”地球侵攻を防ぎました!おめでとう!!!” 作る 200 200 位置。 ラベル!”くそ!撤退だ!” 作る 100 100 位置。終了時計!中断」そうでなければ「ラベル!”地球が侵攻されました・・・” 作る 200 200 位置。 ラベル!”Game Over” 作る 100 100 位置。 終了時計!中断」実行。
27:ぷにょ :

2012/02/13 (Mon) 21:49:29


タイマーに分岐させてラベルを作る行でエラー表示が出ているんですが
何が原因なのかがどうしても分からないです…
プログラミングの文章は合っているはずですし…

ここまで教えていただいて本当にありがとうございます!
26:わだ :

2012/02/13 (Mon) 21:04:49

ぷにょさん、わだです。
まずはどこでエラーが出てるのかを確かめてください。
エラーが出た所を理解した上でもう一度考えてみてください。
25:ぷにょ :

2012/02/13 (Mon) 19:04:23

本当に何回も申し訳ないです!
このプログラムで大丈夫でしょうか?
ドリトルのサイトのお試し版(家でもできるやつ)でやったらエラーがでたのですが…
---
かめこ=タートル!作る”runner.png”変身する。

左ボタン=ボタン!”左””LEFT”作る。
左ボタン:動作=「かめこ! 30 左回り」。
右ボタン=ボタン!”右””RIGHT”作る。
右ボタン:動作=「かめこ! 30 右回り」。
時計=タイマー!作る 0.1秒 間隔 20秒 時間。
時計!「かめこ!5歩く。「(宝物!要素数?) == 0」!なら「ラベル!"おめでとう!!!"作る -100 200 位置。時計!中断 」実行」実行。
画面! (緑) 塗る。

宝物=配列!作る。
宝=タートル!作る "star.png" 変身する 。
宝物!(宝!(乱数(600)-300)(乱数(300)-150) 位置)書く。
宝物!(宝!作る (乱数(600)-300)(乱数(300)-150) 位置)書く。
宝物!(宝!作る (乱数(600)-300)(乱数(300)-150) 位置)書く。
宝物!(宝!作る (乱数(600)-300)(乱数(300)-150) 位置)書く。
宝物!(宝!作る (乱数(600)-300)(乱数(300)-150) 位置)書く。
かめこ:衝突=「|宝|宝! 消える。 宝物!(宝)消す」。
---
24:わだ :

2012/02/13 (Mon) 18:09:33

ぷにょさん、わだです。
時計の中での分岐の書き方が間違っていますね。
---
「(宝!5!) == 0」!なら
---

ドリトルでは!の後ろは命令が入ります。
ここでは、宝物という配列の要素数が0になったときに「おめでとう!!!」というラベルを出すので
---
「宝物!要素数?==0」!なら
---
といった書き方をします。
要素数?という命令は配列の要素数を返す命令です。
ですので条件文の中は”宝”ではなく、”宝物”になります。
配列の要素数のところは条件文の中で指定する必要はありません。
ここだけ変えれば上手く動くと思います。

あと宝物を拾うキャラクターの名前はかめこのはずなのに、時計の中ではかめたになっていますよ。
23:ぷにょ :

2012/02/13 (Mon) 17:48:56

またまたすみません!
今度はこう打ち込んだらエラーが出ました!
何がダメなんでしょう?
何回もすみません。
---
かめこ=タートル!作る”runner.png”変身する ペンなし。
左ボタン=ボタン!”左””LEFT”作る。
左ボタン:動作=「かめこ! 30 左回り」。
右ボタン=ボタン!”右””RIGHT”作る。
右ボタン:動作=「かめこ! 30 右回り」。
時計=タイマー!作る 0.1秒 間隔 20秒 時間。
時計!「かめた!5 歩く。「(宝!5!) == 0」!なら「ラベル!"おめでとう!!!"作る -100 200 位置。時計!中断 」実行」実行。
画面! (緑) 塗る。

宝物=配列!作る。
宝=タートル!作る "star.png" 変身する ペンなし。
宝物!(宝!(乱数(600)-300)(乱数(300)-150) 位置)書く。
宝物!(宝!作る (乱数(600)-300)(乱数(300)-150) 位置)書く。
宝物!(宝!作る (乱数(600)-300)(乱数(300)-150) 位置)書く。
宝物!(宝!作る (乱数(600)-300)(乱数(300)-150) 位置)書く。
宝物!(宝!作る (乱数(600)-300)(乱数(300)-150) 位置)書く。
かめこ:衝突=「|宝|宝! 消える。 宝物!(宝)消す」。
---
何がダメなんでしょう?
あとこのプログラムだと要素数は5でいいんでしょうか?


22:わだ :

2012/02/11 (Sat) 18:09:24

ぷにょさん、わだです。
遅くなって申し訳ありません。
宝物の作り方は以下のように配列に入れて作るといいと思います。
以下に作り方の例を書きます。
---
宝物=配列!作る。
宝=タートル!作る "star.png" 変身する ペンなし。
宝物!(宝!(乱数(600)-300)(乱数(300)-150) 位置)書く。
宝物!(宝!作る (乱数(600)-300)(乱数(300)-150) 位置)書く。
宝物!(宝!作る (乱数(600)-300)(乱数(300)-150) 位置)書く。
宝物!(宝!作る (乱数(600)-300)(乱数(300)-150) 位置)書く。
宝物!(宝!作る (乱数(600)-300)(乱数(300)-150) 位置)書く。
---
それから、衝突の所は
かめこ:衝突=「|相手|相手!消える。宝物!(相手)消す」。
または
宝:衝突=「自分!消える。宝物!(自分)消す」。
このように書くといいと思います。
そして全部拾ったら終了の部分は前回書いた所を参考にしてください(すみません、終了時計と書いてある所は時間に直してください。私のミスです)
またわからなくなったら聞いてください。では、頑張ってください。
21:ぷにょ :

2012/02/10 (Fri) 15:08:31

わださん、回答ありがとうございました!
ですが残念ながらどうしても分からず、説明不足だったかもしれないので
打ち込んだプログラムを見ていただけますか?
めんどくさいことを言ってしまい申し訳ありません!
----------------------------------------------------
かめこ=タートル!作る”runner.png”変身する ペンなし。
左ボタン=ボタン!”左””LEFT”作る。
左ボタン:動作=「かめこ! 30 左回り」。(以下少し省略します。右ボタンも作りました)
時計=タイマー!作る 300 回数。

宝=タートル!作る "star.png"変身する ペンなし。
宝! (乱数(600)-200)(乱数(300)-200)位置。
宝! 作る(乱数(600)-200)(乱数(300)-200)位置。
かめこ:衝突=「|宝|宝! 消える」。

----------------------------------------------
この要領で、敵(当たったら消えてしまう)やキノコ(当たったら大きくなる)など作りました。
ただどうしても終わりません!
長々と失礼しました。
20:わだ :

2012/02/08 (Wed) 21:29:03

ぷにょさん、大阪電気通信大学の和田です。
やり方としてはタイマーの中で条件分岐を入れるとうまいこといきます。
以下はタイマーの中に条件分岐を入れた書き方の例です。宝物という配列に拾うための宝を入れて使います。
---
時間=タイマー!作る 0.1秒 間隔 20秒 時間。
時間!「
  かめた!5 歩く。
 「(宝物!要素数?) == 0」!なら「
  ラベル!"おめでとう!!!"作る -100 200 位置。
  終了時計!中断
 」実行
」実行。
---

画面上に置く宝を配列にいれておきます。
宝を拾うたびに残りの宝の数を1つずつ減らしていきます。
最終的に時間内に全部の宝を拾えたら宝物の数が0となりその場で「おめでとう!」というラベルが出てきて
時計が中断し、ゲーム終了となります。

おそらくActive5とActive7のシューティングのプログラムを合体させれば出来ると思います。
頑張ってください。
19:ぷにょ :

2012/02/08 (Wed) 17:08:15


授業で宝拾いゲームを作っていて宝(複数ちらばっている)をすべて拾うと
ゲームクリアでゲームが終わり、「おめでとう!」と表示されるようにしたいのですが
どうすればそのようにできるでしょうか?

ちなみに宝をちらばせたりするところまではできています。
ただ宝を全部取っても終われないんです…。
時間がないので誰か返答お願いします。
18:kanemune :

2011/02/13 (Sun) 08:09:12

動いてよかったですね。カメたちも喜んでいると思います。
17:LIN :

2011/02/13 (Sun) 07:18:03

出来ました!!
感動です、
長々と教えて頂いてありがとうございました!!\(≧∇≦)/
16:kanemune :

2011/02/12 (Sat) 22:17:42

コロン(:)の左にはオブジェクトの名前を書きます。先ほどの例を参考にしてください。
かめた:印=1。
15:LIN :

2011/02/12 (Sat) 22:00:52

う~む・・・。
実はすでにそれを試しています。
宝:衝突=「|カメ太|カメ太!”ayumiRed.png"変身する。「カメ太!”ayumiRed.png"
変身する」:印=1。」。ではありませんか?
14:kanemune :

2011/02/12 (Sat) 12:37:33

先ほども書きましたが、衝突は次の形です。命令はすべて、括弧の中に書きます。
宝:衝突=「...」。

括弧の中には、複数の命令を続けて書けます。
次のように、カメを変身させる命令と、値を設定する命令を書いたらどうでしょう。
宝:衝突=「...。...。」。
13:LIN :

2011/02/12 (Sat) 12:28:23

印をつけるというのは理解できるのですが・・・。
あれから試行錯誤してますが、何度やっても「残念」しか出てきません。

宝:衝突=「|カメ太|カメ太!”ayumiRed.png"変身する」。
この、カメ太!”ayumiRed.png"変身する の部分を印=1にすればいいのですよね?
「カメ太!”ayumiRed.png"変身する」:印=1と書いて見事に間違えました。


ここまで教えて頂いたからにはどうしても完成させたいのです。
よろしくお願いします。
12:LIN :

2011/02/12 (Sat) 11:35:45

こんなやり方があるんですね!
わかりました、とりあえず頑張ってみます!
ありがとうございました。
11:kanemune:

2011/02/12 (Sat) 11:00:30

書き忘れました。
先ほどのサンプルでは、最後の行を「かめた」と「かめきち」に変えて、動作の違いを比べてみてください。
10:kanemune:

2011/02/12 (Sat) 10:59:10

特定のカメではないのですね。ひとつの方法は、変身させたカメに値を持たせておくことです。
衝突したら、壁は相手の値を調べて、特定のカメかどうかを調べます。
サンプルを載せておきます。もし理解できたら、自分のプログラムに組み込んでください。

-----
かめた=タートル!作る "ayumiAka.gif" 変身する。
かめた:印=1。

かめきち=タートル!作る。

壁=タートル!作る ペンなし 200 0 位置。
壁:衝突=「|相手| 「相手:印==1」!なら「ラベル!”おめでとう”作る」そうでなければ「ラベル!”残念”作る」実行」。

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

2011/02/12 (Sat) 10:25:12

なるほど!「」がもう一つ必要だったのですね!
それはわかりました^^

赤カメのお話なんですが、ある敵にぶつかると、カメ太が”ayumiRed.png"に変身するという
設定にしていて、その状態のまま長方形にぶつかると、ゲームクリアとしたいのです。

「相手==赤カメ」とすると、赤カメというオブジェクトを作らなければなりませんよね?
カメ太を複製するのかな?と思い、赤いカメになったら「カメ子」という名前に変えようと
しましたが自滅しました。

最初の投稿の時、説明不足でした。すみません(><)
8:kanemune:

2011/02/12 (Sat) 10:10:22

衝突は次の形です。この、...の部分にifに相当する文を入れましょう。
長方形:衝突=「...」。

そうすると、次の形になります。これがエラーの原因でした。
長方形:衝突=「「」!なら「」そうでなければ「」実行」。

次に、赤いカメかどうかの比較ですが、前に
>> オブジェクトは==で等しいかどうかを調べられます。(「相手==赤カメ」のような形)
と書いたように、比べるのは色(赤)や画像ファイル(〜.png)ではなく、カメ太のようなオブジェクトです。
ぶつかった相手は、衝突のブロック(「...」)の先頭で受け取れます。説明は本のp24(ステップ4)を見てください。

長方形:衝突=「|相手| 「相手==赤カメ」!なら「...」そうでなければ「...」実行」。
7:LIN :

2011/02/12 (Sat) 10:00:58

お答えありがとうございます。

長方形:衝突=「相手==”ayumiRed.png"」!なら「ラベル!”おめでとう!”作る。
時計!中断」そうでなければ「ラベル!”残念”作る。時計!中断」実行。

のように書いてみましたが、エラー表示が出ました。
他にも

長方形:衝突=「|カメ太|時計!中断」。
「カメ太==”ayumiRed.png"」!なら・・・

とかもやってみました。
IF関数で、色の指定ってできるんですか?「相手==(赤)」のような。

すみません。どなたかお願いします。
6:kanemune:

2011/02/11 (Fri) 23:25:12

プログラムはご自分の理解している範囲で自由に作ってください。(理解していないものを作るのは無理だと思います)
ドリトルの質問にはお答えできますが、他人のプログラムを作ることはできませんので。
5:なお :

2011/02/11 (Fri) 23:21:52

そのプログラムだと両方とも跳ね返ってしまいました。
もうこのプログラムは諦めます。

じゃあ、発射した玉が上の壁に当たると「ゲームクリア」とゆう言葉が
表示されるプログラムってできますか?
4:kanemune:

2011/02/11 (Fri) 22:51:58

> 壁ではなく敵に当たれば、跳ね返るプログラムを作りたい

タートルは「(相手に関係なく)何かにぶつかったら跳ね返る」という動作しかできません。
・弾に「何かにぶつかったら跳ね返る」という意味の衝突を定義する。
・壁に「誰かがぶつかってきたらその相手を消す」という衝突を定義する。
という定義をすれば、お望みの動作になるかもしれません。

ただ、発射する弾に衝突を定義できるかは、プログラムの書き方によると思います。
ドリトルの本のp30(ステップ2)の例であれば、次のようにすればうまく行くかもしれません。(試していないので動くかは未確認です)
カメ太:発射=「自分:衝突=タートル:跳ね返る。タイマー!作る「自分!20 歩く」実行」。
3:kanemune:

2011/02/11 (Fri) 22:43:48

> 赤色のカメが長方形の図形にぶつかったらゲームクリア、
> 他の色のカメがぶつかったらゲームオーバー

赤色のカメが1匹しかいないのであれば、相手が赤色のカメかどうかを調べてみたらどうでしょう。
オブジェクトは==で等しいかどうかを調べられます。(「相手==赤カメ」のような形)
2:なお :

2011/02/11 (Fri) 22:29:35

発射したものが壁に当たって消える、とゆうプログラムは
できたのですが、それに加えて壁ではなく敵に当たれば、
跳ね返るプログラムを作りたいんですけど、教えてください。
ほんとに時間がないんです。助けてください。

  • 名前: E-mail(省略可):

Copyright © 1999- FC2, inc All Rights Reserved.