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

三角関数に関するバグ

  • ドナウ連邦の民
  • 2021/09/04 (Sat) 16:19:22
me=タートル!作る ペンなし 90 左回り 0 0 位置.
x=6.
y=5.
c_x=1.
c_y=1.
mem=0.
theta=2.
func_x_mem=[
mem=x
].
func_x=[
x=
c_x+(x-c_x)*cos(theta)-(y-c_y)*sin(theta)
].
func_y=[
y=
c_y+(mem-c_x)*sin(theta)+(y-c_y)*cos(theta)
].
func_main=[
me!(x) (y) 移動する.
].
time=タイマー!作る 0.01秒 間隔.
p=1.
q=0.
func_a=[
p=-5+sqrt(q)
].
func_b=[
q=q+0.01
].
func_main!実行.
[
p<9999
]!の間
[
func_x_mem!実行.
func_x!実行.
func_y!実行.
time! 1 回数[func_main!実行.]実行.
func_a!実行.
func_b!実行.
]実行.
というプログラムの結果が一通りになりません。
どうしたら良いでしょうか。

名前への埋め込み

  • ドナウ連邦の民
  • E-mail
  • 2021/07/09 (Fri) 17:47:35
定義した定数及び変数のそのときの値をオブジェクトの名前に埋め込む方法を模索しています。
"name"+"(x)"では上手くいきませんでした。

Re: 名前への埋め込み

  • かめた
  • 2021/07/21 (Wed) 10:17:35
どのような状況を想定しておられるのでしょうか?
例えば、かめた1~かめた10のような「かめた+番号」で値を保存したい場合、
『かめた=配列!作る。』で配列として保存しておき、
『かめた!(x) 読む。』などで値を読むことはできると思います。

ドリトルでジャンプゲーム

  • 吉原
  • 2021/07/09 (Fri) 16:15:27
カップ= タートル! ペンなし 作る -500 -250 位置 "C:\Users\授業用\OneDrive\ドキュメント\dolittle\running guy ill use.gif" 変身。 
ジャンプ = ボタン ! "" "SPACE" 作る 消える。
ジャンプ : 動作 =「カップ!ジャンプ」 。
画面!"C:\Users\授業用\OneDrive\ドキュメント\dolittle\background moving.gif" 背景画像。
スペース押したらジャンプができるようにしたいです。どうすればいいですか?

Re: ドリトルでジャンプゲーム

  • omura
  • 2021/07/19 (Mon) 10:27:35
開発メンバーの大村です。

『カップ:ジャンプ=「」。』でジャンプの定義を行うことを考えておられるわけですね。

ジャンプの処理というのはゲーム開発の中でも個性が現れる部分で、様々な方法があります。
たとえば(重力)加速度を加味するような処理を入れれば、ジャンプの頂点に向かって徐々に上昇量を少なくしたり、プログラム次第で、それまでの移動速度などを考慮したジャンプなども可能です。

加速度を加味した移動のプログラムは、下記にサンプルがあるので参考にしてみてください。

https://dolittle.eplang.jp/ch_qa_sample_prg#q11%E6%94%BE%E7%89%A9%E7%B7%9A%E3%82%92%E6%8F%8F%E3%81%8F%E5%8B%95%E3%81%8D%E3%82%92%E3%81%97%E3%81%9F%E3%81%84


実際には、カップのジャンプ以外の動きをどう作るかによりプログラムの方法は変わります。
ただ、考え方としては、「一定時間ごとに上下方向の移動量を変更する」という、左右方向の移動と同じ考え方です。

ドリトルテキストその18

  • ドリトル好き
  • 2021/07/07 (Wed) 20:06:04
お世話になります。ホームページに掲載されている紅林秀治先生(静岡大学教育学部)のドリトルテキストをやっていますが、「その18」を実行すると青いオブジェクトに衝突した時にエラーがでます。ご教授していただくと喜びます。ちなみにオンライン版です。よろしくお願いいたします。

Re: ドリトルテキストその18

  • honda
  • 2021/07/08 (Thu) 21:33:42
お世話になります。
オンライン版の開発を主に担当しております、本多と申します。

情報のご提供をありがとうございます。
オンライン版では命令の提供の仕方が違ってしまっていますね。
『(相手==長方形赤)!(相手==長方形黄) どれか本当』
上記の一文を、次のように変更してみていただけますか?
『どれか!(相手==長方形赤) (相手==長方形黄) 本当』

次回の更新の際には、元のプログラムが実行できるよう調整いたします。
今後ともよろしくお願いいたします。

制限のない繰り返し

  • ドナウ連邦の民
  • E-mail
  • 2021/07/03 (Sat) 20:54:03
マニュアルを熟読したのですが無限に繰り返す手法が分からず、一応、
x = 0。
func1= [
x=x*1
]。
[
x<1
]!の間
[...
func1!実行。
]実行。
とコーディングしたのですが、
実行するとフリーズしたためこちらではどうも手詰まりです。
良いアイデアを持っていらっしゃる方、どうか教えて下さい。

Re: 制限のない繰り返し

  • honda
  • 2021/07/08 (Thu) 21:26:15
おそらく、無限に繰り返されているからこそ、止まることなく動き続けてフリーズしているのでしょうね…。

『t=タイマー!作る 1 回数。』
を先頭に入れて、
『func1!実行。』
のあとに『t!実行 待つ。』を挿入すると、
無限ループの中でも0.1秒ずつプログラムの実行を停止してくれるので、
フリーズはしなくなるかもしれません。

ドリトルのプログラミングについて

  • K.Sayuri
  • 2021/07/01 (Thu) 09:09:03
こんにちは、私はゲーム作成中で、もしこの8個のコイン回収できればゲームクリアのラベルが表してゲームが終わる。としたいです。ラベルが二つあるためで、どちらか表したらもう一つのほうが表せないようにしたいです。

コイン!(乱数(600)-200)(乱数(300)-150)位置。
コイン!作る(乱数(600)-180)(乱数(300)-250)位置。
コイン!作る(乱数(600)-400)(乱数(300)-180)位置。
コイン!作る(乱数(600)-500)(乱数(200)-150)位置。
コイン!作る(乱数(600)-200)(乱数(400)-150)位置。
コイン!作る(乱数(600)-260)(乱数(100)-100)位置。
コイン!作る(乱数(600)-340)(乱数(280)-80)位置。
コイン!作る(乱数(600)-500)(乱数(600)-150)位置。
時計=タイマー!作る 10000000000000000 回数。
時計!「沙由里! 3 歩く」実行。
//サーファが私のライバルで、触れたら死んじゃいます~
サーファーアタック=「
サーファ=タートル!作る 0 左回り ペンなし (乱数(600) -300) (乱数(300) -150) 位置。
サーファ!"C:\Users\授業用\Downloads\dolittle331win\backgroundtsunami\silver.gif" 変身する。
サーファ:エンジン=「タイマー!作る「自分!50 歩く」実行」。
サーファ!エンジン。
」。

タイマー!作る 1  間隔 1000 時間「
!サーファーアタック。
」実行。


//コイン&ポイントアップ。死ぬ前にコイン全部回収するのが目的です。ラベルがないけどね(笑)
コイン=タートル!作る "C:\Users\授業用\Downloads\dolittle331win\backgroundtsunami\coin2.gif" 変身する ペンなし。
コイン!(乱数(600)-200)(乱数(300)-150)位置。
コイン!作る(乱数(600)-180)(乱数(300)-250)位置。
コイン!作る(乱数(600)-400)(乱数(300)-180)位置。
コイン!作る(乱数(600)-500)(乱数(200)-150)位置。
コイン!作る(乱数(600)-200)(乱数(400)-150)位置。
コイン!作る(乱数(600)-260)(乱数(100)-100)位置。
コイン!作る(乱数(600)-340)(乱数(280)-80)位置。
コイン!作る(乱数(600)-500)(乱数(600)-150)位置。
沙由里:衝突=「|相手|「相手==サーファ」!なら「自分!消える。 ラベル! "ドンマイ!おまけです~" 作る -500 200 位置 100 文字サイズ (赤) 文字色 。」そうでなければ「相手!消える 」実行」。

Re: ドリトルのプログラミングについて

  • honda
  • 2021/07/08 (Thu) 21:22:07
コインが8枚取れたら…というのを、どう判定するかですね。

===
枚数=0。
コイン:衝突=「:枚数=:枚数+1」。
===

としたら、沙由里がコインに当たるたびに枚数がカウントされますね。

その上で、「沙由里:衝突」の「そうでなければ」の中で、

===
「:枚数==8」!なら「ラベル!"クリア" 作る」実行。
===

という一文を入れるとか?
色々考えられて面白いですね。

ドリトルのプログラムについて

  • K
  • 2021/06/25 (Fri) 17:01:53
はじめまして。
ドリトルでブロック崩しを作成していて、すべてのブロックを壊し終わったら即終了するプログラムを書きたいと考えているのですがあまりうまく行きません。
今試している方法は
ヒット数=0。
ブロック1:衝突=「自分!消える。:ヒット数=:ヒット数+1。」。
時計=タイマー!作る。
時計!「
 「ヒット数=4」!なら「時計!中断。」実行。
」実行。
としてやっているのですが、ヒット数が4になっても中断が動きませんでした。

このプログラムの問題点、あるいは代替案があればご教授お願いいたします。



Re: ドリトルのプログラムについて

  • K
  • 2021/06/30 (Wed) 21:01:51
お急がしい中返信ありがとうございました。
無事、自分の意図する形でプログラムが実行されるようになりました。
また何か躓いたら質問させていただくと思います。

ありがとうございました。

Re: ドリトルのプログラムについて

  • honda
  • 2021/06/27 (Sun) 08:36:51
Kさん、こんにちは。
開発チームの本多と申します。

なるほど、ある条件下で処理を終わらせるというのは難しくもとても重要なことですね。
「ヒット数」と「4」を比較している部分を注目してみてください。
「=」は、ドリトルでは等価を表す演算子ではなく、代入を表す演算子なんです。
2つの値が等しいかどうかを比較したい場合には、「==」をお使いください。
各種演算については、この辺りが参考になるはずです。
https://dolittle.eplang.jp/ref_basic33

ネットワーク版について

  • suzuki
  • 2021/05/28 (Fri) 07:19:08
ネットワーク対応ベータ版のサーバー設定や詳しい使い方等の説明は今後掲載されるのでしょうか?またすでに掲載等あればURL等教えて頂きたいと思います。よろしくお願いいたします。

Re: ネットワーク版について

  • suzuki
  • 2021/06/09 (Wed) 18:59:12
昨年度はWindowsインストール版で、本年度からはchromebookで活用します。
chromebook版の開発大変ありがとうございました。
今後ともよろしくお願いいたします。

Re: ネットワーク版について

  • omura
  • 2021/06/08 (Tue) 15:01:39
開発メンバーの大村です。

昨日、ベータ版に関するマニュアルを公開いたしました。
公式ページより確認できますので、ご参照ください。


◆ベータ版追加機能に関するマニュアル
https://dolittle.eplang.jp/manualjsv2021.05.13

タートルの変身画像について

  • K.Y
  • 2021/03/28 (Sun) 14:32:10
タートルを変身させるときの画像は自作できますか。
例えばチューリップのような画像のことです。
教えてください。

Re: タートルの変身画像について

  • omura
  • 2021/03/29 (Mon) 18:00:38
開発メンバーの大村です。
タートルの変身で使用する画像については自作可能です。
利用したい画像をPNG形式、JPEG形式のいずれかで作成してください。
PNG形式の場合は透過色に対応することができます。

先生があらかじめ利用する画像を準備されるならば、ドリトルの実行ファイル(dolittle.bat等)のあるフォルダに作成した画像を保存してください。
チューリップの画像(tulip.png)などと同様にファイル名の指定で作成した画像を利用することができます。

生徒が個々に好きな画像を利用したいということであれば、一旦作成しているドリトルのプログラムを保存し、保存したファイル(***.dtl)のあるフォルダに使いたい画像データを保存するように指示してください。
上記と同様にファイル名の指定だけで画像を利用できるようになります。
(ただしこちらはVer3.31以降で対応した機能となります。)

復元ソフト等が導入されていて先生が所定のフォルダに画像ファイルを保存することができず、また、Ver3.30以前を使用している場合はファイルパスを指定することでも利用できます。

例)Zドライブのdolittleフォルダにあるimg.pngファイルを利用する場合
かめた!”z:\dolittle\img.png”変身する。

ボタンの動作とタイマーの最後に実行

  • 野部
  • 2021/02/02 (Tue) 16:48:11
兼宗先生、ご無沙汰しております。

ドリトルのピンポンゲームの難易度を変更できるようにするために歩く速さと実行時間の選択メニューをつくる、「実行ボタン」により動作をするようにしました。
時間や速度は問題なくうごいています。

しかし、左壁に衝突したときのゲームクリアの値が「はい」になったままで、衝突しても「ゲームクリア」と表示されてしまいます。時計は中断するのですが、最後に実行の「」内でゲームクリアの変数は「はい」に戻っているようです。
(ラベルで書き出して確認しました)

動作を、29行目のあとにもってくると、いきなり終了判定をするので、すべてを動作=「」の中にいれていますが、いろいろ試してみたのですが、うまくいかないです。

ご教示いただければありがたいです。

かめた=タートル! 作る。
かめた!(緑)線の色 20 線の太さ。
かめた!500 歩く 90 右回り 420 歩く 90 右回り 500 歩く。
壁=かめた!図形を作る -200 200 位置。
かめた!90 右回り。
左壁=かめた!(黄)線の色 440 歩く 図形を作る -210 -230 位置。
パドル=かめた!(青)線の色 120 歩く 図形を作る -190 -210 位置。
上ボタン=ボタン! "上" "UP" 作る -380 50 位置。
下ボタン=ボタン! "下" "DOWN" 作る -380 0 位置。
上ボタン:動作=「パドル! 0 50 移動する」。
下ボタン:動作=「パドル! 0 -50 移動する」。
ラベル!”歩く速さ”作る -500 300 位置。
速さ=選択メニュー!作る 50 45 大きさ。
速さ! 10 書く 20 書く 30 書く 40 書く。
ラベル!”制限時間” 作る -300 300 位置。
制限時間=選択メニュー!作る 50 45 大きさ。
制限時間! 10 書く 30 書く 60 書く。
実行ボタン=ボタン!”実行” 作る。
// ボールを動かす(ステップ3)
かめた! ペンなし。
かめた!(乱数(200))(乱数(300)-150)位置。
かめた!45 向き。
かめた:衝突=タートル:跳ね返る。
時計=タイマー! 0.05 間隔。
実行ボタン:動作=「
速度=(速さ!(速さ!何番目?)読む)。
実行時間=(制限時間!(制限時間!何番目?)読む)。
時計! (実行時間) 時間。
時計! 「かめた! (速度) 歩く」実行。
ゲームクリア=はい。
左壁:衝突=「ゲームクリア=いいえ。時計!中断」。
時計!「
 「ゲームクリア==はい」! なら「
    ラベル! "ゲームクリア! "作る (青)文字色。
  」そうでなければ「
    ラベル! "ゲームオーバー! "作る (赤)文字色。
  」実行。
」最後に実行。」。




Re: ボタンの動作とタイマーの最後に実行

  • omura
  • 2021/02/04 (Thu) 10:15:56
開発メンバーの大村です。

#その1 ラベルの消去について
現在は、ラベルオブジェクトには「クリア」命令および、テキストを消す処理を行う命令はありません。
ご質問のように処理を意味単位でまとめることは、わかりやすいプログラムを書く時には重要なので、下記のように独自の命令を定義してしまうのも一つの方法かと思います。
----------------
判定=ラベル!作る -300 200 位置。
判定:消す=「判定!"        " 書く。」。

(以後は「判定!消す。」でラベル内の文字を消す)
----------------

#その2 時計の作成場所について
こちらの質問も前出の「変数とその束縛」の内容に関連します。
左壁に衝突して「時計!中断」が呼び出された際に、「『実行ボタン』が所有しているタイマー」が正しく選択されないため、エラーが発生しました。

したがって、以下のようにして、実行ボタンが所有している「時計」であることを明示すれば、『実行ボタン:動作=「 」の中で時計を作る』を行っても、正しく動作します。

左壁:衝突=「ゲームクリア=いいえ。(実行ボタン:時計)!中断」。


■■詳細■■
実行ボタン:動作=「時計=タイマー!作る。」。

と記載すると、実行ボタンを押したときにタイマーが作られます。
ここで作成されたタイマーは
「『実行ボタン』が所有しているタイマー」
として扱われます。

それに対して、

左壁:衝突=「時計!中断」。

の中での「時計!中断」は、以下のいずれかと認識されます。
A)『左壁(オブジェクト)』が所有している『時計』オブジェクト
B)グローバル(ルートが所有)の『時計』オブジェクト


したがって、左壁に衝突して「時計!中断」が呼び出された際に、「『実行ボタン』が所有しているタイマー」が正しく選択されないため、エラーが発生しました。

Re: ボタンの動作とタイマーの最後に実行

  • 野部
  • 2021/02/03 (Wed) 11:07:09
大村先生

野部です。ありがとうございます。
修正でうまくうごくようになりました。

追加で2点、質問です。
その1 ラベルの消去について
画面上に作成した実行ボタンを押すと、「ゲームオーバー」や「ゲームクリア」が残ってしまいます。最初からラベルを作成し、そこに空白を書き込む方法で消去しましたが、フィールドのようにラベルの中身をクリアする方法はないのでしょうか?

プログラム抜粋です。

判定=ラベル!作る -300 200 位置。
(テキストのステップ1とステップ2省略)

ラベル!”歩く速さ”作る -500 300 位置。
速さ=選択メニュー!作る 50 45 大きさ。
速さ! 10 書く 20 書く 30 書く 40 書く。
ラベル!”制限時間” 作る -310 300 位置。
制限時間=選択メニュー!作る 50 45 大きさ。
制限時間! 10 書く 30 書く 60 書く。
実行ボタン=ボタン!”実行” 作る -140 300 位置。
// ボールを動かす(ステップ3)
かめた! ペンなし。
かめた!45 向き。
かめた:衝突=タートル:跳ね返る。
時計=タイマー!作る。
実行ボタン:動作=「
判定!"        " 書く。
かめた!(乱数(200))(乱数(300)-150)位置。
速度=(速さ!(速さ!何番目?)読む)。
実行時間=(制限時間!(制限時間!何番目?)読む)。
時計! 0.1 間隔 (実行時間) 時間。
時計! 「かめた! (速度) 歩く」実行。
:ゲームクリア=はい。
左壁:衝突=「:ゲームクリア=いいえ。時計!中断」。
時計!「
 「:ゲームクリア==はい」! なら「
    判定! "ゲームクリア! " 書く (青)文字色。
  」そうでなければ「
    
    判定! "ゲームオーバー! " 書く (赤)文字色 。
  」実行。
」最後に実行。」。

一応、上記のプログラムで消えていますが、スマートではないなあと思っています。



その2 時計の作成場所について
テキストに載っている形を崩さないようにしようとすると、実行ボタン:動作=「 」の中で時計を作る設定をすることになります。
一度、その状態でプログラムを実行すると、中断のときに「時計がつくられていません」というメッセージがでました。
実行ボタンの外でつくっておくことで解決はできましたが、その理由がわからないため気になるため、もし教えていただけるならうれしいです。

よろしくお願いします。



Re: ボタンの動作とタイマーの最後に実行

  • omura
  • 2021/02/03 (Wed) 01:29:14
開発メンバーの大村です。

『左壁:衝突=「ゲームクリア=いいえ。時計!中断」。』の部分の「ゲームクリア」変数はインスタンス変数、それ以外はグローバル変数として処理されているため、思った通りの動作にならなかったのだと考えられます。

この場合「ゲームクリア」変数をグローバル変数として明示することで改善します。
下記の通り修正して、意図通り動いているかご確認ください。

[修正前]------------------------
ゲームクリア=はい。
左壁:衝突=「ゲームクリア=いいえ。時計!中断」。

時計!「
 「ゲームクリア==はい」! なら「

[修正後]------------------------
:ゲームクリア=はい。
左壁:衝突=「:ゲームクリア=いいえ。時計!中断」。

時計!「
 「:ゲームクリア==はい」! なら「
------------------------


変数の前に:を付けるとグローバル変数であることを明示できます。
(変数の前に「ルート:」を付けても同じです。)


変数の種類(振る舞い)については、Webマニュアルの「ドリトル言語の基礎知識」の項目の、「変数とその束縛」の節がございます。
ぜひ確認ください。

(URL:)
https://dolittle.eplang.jp/ch_syntax#%E5%A4%89%E6%95%B0%E3%81%A8%E3%81%9D%E3%81%AE%E6%9D%9F%E7%B8%9B