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

「受信メッセージ!=直前メッセージ」意味

  • ume
  • 2019/10/17 (Thu) 19:15:54
チャットの自動化2で、

サーバー!"localhost" 接続。
受信表示=リスト!作る 200 400 大きさ 0 200 位置。
直前メッセージ=""。
タイマー!作る 1 間隔 600 回数「
  受信メッセージ=サーバー!"msg" 読む。
  「受信メッセージ!=直前メッセージ」!なら「受信表示!(受信メッセージ)書く」実行。
  直前メッセージ=受信メッセージ。
」実行。

例文のプログラムをドリトルで実行すると、説明書通り動きますが、

「受信メッセージ!=直前メッセージ」の意味がじっくり考えてもよくわかりません。
直前と新しい受信が違うときに、新しい受信を表示するのですが、
「もし、新しい受信と直前の受信が同じなら、受信を表示する」という意味にしか見えません。
その後の文で、新しい受信内容を直前の受信内容に切り替え、次の繰り返しをすると、理解していますが、

私の理解が間違っていることは、わかっても、どう理解したらいいのかがさっぱりわかりません。
教えてください。

Re: 「受信メッセージ!=直前メッセージ」意味

  • omura
  • 2019/10/17 (Thu) 20:00:14
お悩みの処理は、
『前回と同じメッセージをサーバから取得した場合には何もせず、
前回と違うメッセージをサーバから取得した時だけ、受信表示のエリアにその内容を表示する』という箇所です。
『!=』は左右の値が異なることを示します。

ここは、この分岐処理がない時にどんな問題が起こるかから考えると考えやすいです。

まずは、該当箇所の分岐処理がない、下記のような時にどんな問題が発生するかを考えてみてください。(実際にやってみるとわかりやすいです)
---------
タイマー!作る 1 間隔 600 回数「
  受信メッセージ=サーバー!"msg" 読む。
  受信表示!(受信メッセージ)書く
」実行。
---------

■発生する問題
相手が最後に送信した文面が、受信表示のリストに1秒に1回追加されてしまう

■なぜ起こるのか
タイマーの処理の中で、以下の2つの処理を1秒間隔で連続して実施しています。

1.”msg”のキー(名前)を持つ情報を、サーバから取得する。
2.取得した内容をリスト(受信表示)へ追加する

この時、「1.」を実施してもサーバから取得したデータが消えることはありません。相手が”msg”のキー(名前)を持つ情報を新たにサーバに送ってこない限り、「1.」を実行すると同じ情報を取得することになります。

したがって、この「1.]と「2.」を繰り返している限り、同じメッセージが何度も「受信表示」のエリアに追加されることになります。
(この動作は、ぜひご自身で試して確認してみてください)

■解決方法
タイマーで繰り返し受信処理をする中で、
一つ前にサーバから取り出した情報と、今取り出した情報が同じならば、受信表示にその内容を追加しない。
一つ前にサーバから取り出した情報と、今取り出した情報が異なる時だけ、受信表示にその内容を書き込む(追加する)


***
そして、この解決方法をプログラムで表したのが、今回の分岐処理です。
直前メッセージが、一つ前に受信した情報です。
受信メッセージが、今取り出した情報です。

この二つが異なる(受信メッセージ!=直前メッセージ)時だけ、受診した内容を表示しています。

ちなみに、今取り出した情報は、次の受信処理のタイミングでは、「一つ前に受信した情報」となります。
「直前メッセージ=受信メッセージ。」の部分が、直前メッセージの更新を行っている箇所です。

ボタンの表示について

  • minaty
  • 2019/10/06 (Sun) 23:03:43
お世話になります。

下記のようなプログラムで、
ボタン上に31~40の数字を表示させたいのです。
ボタンは10個できますが、数字が表示されません。
3行目の ボタン! の次の (番号) の部分が
間違っているのではないかと思うのですが、
どのようにすればよいのでしょうか。

よろしくお願い致します。
-------------------------------------------------------
番号=30。
「番号=番号+1。
選択ボタン=ボタン!(番号) 作る 60 40 大きさ。
」!10回 繰り返す。

Re: ボタンの表示について

  • minaty
  • 2019/10/07 (Mon) 08:29:54
kameta 様
いつもお世話になっております。

早速、おしえていただいたように、
修正し、うまく表示することができました。

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

これで、次の課題に進めます。

今後ともよろしくお願い致します。

Re: ボタンの表示について

  • kameta
  • 2019/10/07 (Mon) 06:02:23
minatyさん、こんにちは。
インストール版では、ボタンを作るときに文字列が渡されることを想定しているようです。次のバージョンで数値を受け取れるように修正したいと思います。

今回は、次のようにプログラムを修正して使っていただけますでしょうか。

(旧)ボタン!(番号) 作る
(新)ボタン!(""+番号) 作る

続けて教えてください

  • tetsupooh
  • 2019/09/08 (Sun) 20:38:46
教えていただいた方法でデータの送信はできるようになりましたが、LED?マイクロビットの前面にある25個のランプが光りません。なぜなのでしょうか?ちなみに命令は、この間研修で教わった通りに入力したので、問題ないはずなのですが・・・

Re: 続けて教えてください

  • Omura
  • 2019/09/09 (Mon) 11:56:16
動作が確認できてよかったです。

経験上、上記の場面では、引数の数がずれていたり、数字と命令の後の間に空白がなかった場合が、動作しない原因として多いと感じています。

プログラムチェック時の参考にしていただければと思います。

Re: 続けて教えてください

  • tetsupooh
  • 2019/09/08 (Sun) 22:49:18
「sample」フォルダ内のサンプルプログラムは動作しました。
やはり、プログラムの書き方が悪かったのかもしれません。
丁寧に教えていただき、ありがとうございました。
また、いろいろやってみて、動作しないプログラムになった場合は、書き込ませていただきますね。

Re: 続けて教えてください

  • Omura
  • 2019/09/08 (Sun) 21:28:12
コンパイルができるようになったとのことで安心しました。

プログラムの動作については、こちらでも、動作を確認させていただきたいと思います。
お書きになられたプログラムをご提示いただけますでしょうか。


また、「sample」フォルダ内の「microbit」にdisplay_picture.dtlというサンプルプログラムがあります。
こちらのファイルを開き、動作をしているかも確認いただければと思います。(AまたはBのボタンを押すと絵が出るかを確認いただきたいです。)

どうすればいいか教えてください

  • tetsupooh
  • 2019/09/07 (Sat) 16:08:22
Microbitを接続し、制御ライブラリのフォルダ内のファイルをマイクロビットのフォルダにコピー、microbit setup batを実行した後、ドリトルを起動して命令を実行すると、いつも「コンパイルが正常に行われたか確認してください」とエラーが出ます。どう対処したらいいか教えてください。

Re: どうすればいいか教えてください

  • Omura
  • 2019/09/07 (Sat) 22:52:24
開発メンバーの大村です。

ご確認いただいたエラーが発生する旨のご質問では、下記のパターンが多いです。

---------------------------------
1.ドリトルフォルダまでのパスが長い
2.setup後にフォルダを移動している
 (setup実施後の環境をコピーしている)
---------------------------------

この場合,以下の2つを行うことで問題が解消できる場合があります。お試しください。

********
A)ストレージ直下(「C:\」など)にドリトル環境を作成する。

B)microbitフォルダ内の「cleanup.bat」を実行し、もう一度microbit_setup.batを実行。

********
ドリトルのmicroBit制御ライブラリでは、windowsのバッチファイルを利用しています。
この都合で、ドリトルのフォルダまでのパスが長いと、エラーが発生する場合があるようです。
また、上記の場合も含め、microbit_setup.batを実行した後にフォルダを移動したり、削除したりする場合は、readmeに記載の通りアンインストール作業が必要です。
別のPCで動作していた環境をコピーした場合も、「cleanup.bat」によるアンインストール処理を実施する必要があります。


チャットの受信について

  • minaty
  • 2019/08/07 (Wed) 23:18:17
初心者です。よろしくお願い致します。
下のものは、タイマーの中に入れる決まり文句のように使われていますが、今一つ、理解できていません。
確かに実行するとうまくいくのですが、
受信メッセージと直前メッセージが同じときに書き続けるように思えるのですが、それでよいのでしょうか?
-----------------------------------------------------
「 受信メッセージ!= 直前メッセージ 」! なら 「 受信表示!(受信メッセージ)書く。」実行。
直前メッセージ=受信メッセージ。

Re: チャットの受信について

  • kameta
  • 2019/08/09 (Fri) 12:21:10
ご確認ありがとうございました。
なるほど、「!」は確かによく使われるため、目立たないかもしれません!

Re: チャットの受信について

  • minaty
  • 2019/08/08 (Thu) 21:02:39
kametaさん、ありがとうございます。
「!=」は、比較演算子だったんですね。
「!」が多く使われるので、気づきませんでした。
他の言語の経験があればよかったのですが、
お手を煩わせてしまいました。

今後ともよろしくお願い致します。

Re: チャットの受信について

  • kameta
  • 2019/08/08 (Thu) 09:07:47
こんにちは。確かにわかりにくい部分ですね。。。
「直前メッセージ」に1つ前のメッセージが入っています。
新しいメッセージと比較したときに、「!=」で「等しくない」と判定されたときに「新しいメッセージ」と判断して表示しています。
(同じメッセージのときは「!=」が成り立たないため表示しません)

ドリトル

  • aiu
  • 2019/08/02 (Fri) 06:07:03
敵を作り自動でロケットを発射させたいのですが、どうすればよろしいのでしょうか?

Re: ドリトル

  • kameta
  • 2019/08/03 (Sat) 17:08:10
aiuさん、ご確認ありがとうございます。
使っていただけそうでよかったです。

Re: ドリトル

  • aiu
  • 2019/08/03 (Sat) 16:52:52
kametaさん回答ありがとうございます。
乱数を使うとゲームっぽくなりとてもよく作れました。
本当にありがとうございます。

Re: ドリトル

  • kameta
  • 2019/08/03 (Sat) 13:23:26
このようなものはいかがでしょう。

=====
ミサイル発射=「
ミサイル=タートル!作る 90 左回り ペンなし (乱数(300))0 位置。
ミサイル:エンジン=「タイマー!作る「自分!10 歩く」実行」。
ミサイル!エンジン。
」。

タイマー!作る 1 間隔 10 回数「
!ミサイル発射。
」実行。

Re: ドリトル

  • aiu
  • 2019/08/02 (Fri) 22:03:43
どめこさん回答ありがとうございます。
ボタンで発射するのではなく、自動で発射してくれる敵を作成したいのですが、タイマーをどのように使えばいいのか困っています。

Re: ドリトル

  • どめこ
  • 2019/08/02 (Fri) 07:31:43
こちらのページが参考になるかもしれません
https://dolittle.eplang.jp/ch_shooting

マイクロビットの端子

  • うすい
  • E-mail
  • 2019/07/29 (Mon) 15:16:53
マイクロビットの[端子]オブジェクトはありますか?あるのでしたらメソッドと使いかたを知りたいです。

Re: マイクロビットの端子

  • Omura
  • 2019/07/29 (Mon) 15:34:00
開発メンバーの大村です。

端子オブジェクトはmicro:bitのP0-P2端子に対応する「端子0」,「端子1」,「端子2」のオブジェクトがあります。
(以後それぞれの端子番号をxとして、「端子x」と表記します)

■■デジタル入力■■
端子のデジタル入力値を取得する命令は「デジタル値?」です。
電圧がHighの時は1、Lowの時は0を返します。

例)端子x!デジタル値?

■■デジタル出力■■
端子にデジタル値を出力する命令は「デジタル出力」です。
Highの出力をしたい時は1、Lowの時は0を引数に設定します。

例)端子0!0 デジタル出力。


プログラム例は
sampleフォルダ内のdigitalOutput.dtlやdigitalinput.dtlを
ご参考にしていただけければとおもいます。

ドリトル

  • aiur
  • 2019/07/25 (Thu) 15:54:36
ドリトルで、かめを図形の上を歩かすことはできますか?

例えば
四角形の辺を歩く感じです。

Re: ドリトル

  • kameta
  • 2019/07/26 (Fri) 05:43:33
すでに描いてある線の上を走らせる、ライントレースのような動きをさせるのは簡単でないと思います。

りんご

  • 鍋沢ひな
  • 2019/06/28 (Fri) 11:24:03
かめた=タートル!作る。
かめた!(緑)線の色 20 線の太さ 500 歩く。
地面=かめた!図形を作る -250 -170 位置。
//操作ボタンを作る
かめた! ペンなし -500 -140 移動する。
左ボタン=ボタン!”左””LEFT”作る -60 -180 位置 60 50 大きさ。
右ボタン=ボタン!”右””RIGHT”作る 0 -180 位置 60 50 大きさ。
左ボタン:動作=「かめた!-10 0 移動する」。
右ボタン:動作=「かめた!10 0 移動する」。
//得点と衝突したときの判断を作る
出力=ラベル!作る。
出力!(0)書く。
ゲット数=0。
地面:衝突=「|相手|相手!消える。」。
かめた:衝突=「|相手|相手!消える。ゲット数=ゲット数+1。出力!(ゲット数)書く 」。
//リンゴを落とす
「時計=タイマー!作る。
時計! 3秒 時間。
かめきち=タートル!作る ペンなし ”apple.png”変身する (乱数(400)-200)(乱数(250)-50)位置。 
時計!「かめきち! 0 -25 移動する」実行。
時計!待つ。」!10 繰り返す。
//ゲーム終了
出力2=ラベル!”おしまい!”作る。
このプログラムを打ったところ する という命令が見つかりませんと出たのですかどうしてでしょう?誰か教えてください

Re: りんご

  • きつね
  • 2019/06/29 (Sat) 13:56:10
わたしのコンピュータやIpadでは
『「する」が見つからない』というエラーは出ませんでした。(ただし、ipadでは//は直しました)

ひなさんが遭遇したエラーは、
「移動する」、「変身する」の漢字部分と”する”の間に空白が入っていたり、改行が入ってしまっていたりすると起こりやすいです。

「移動する」、「変身する」の語句の部分を一旦消して、書き直してみることも試してみてください。

Re: りんご

  • kameta
  • 2019/06/28 (Fri) 21:04:37
オンライン版で実行したところ、全角のコメント「//」を半角「//」に修正すると、正しく動くようでした。プログラム自体は問題ないように見えますがいかがでしょう。
https://jsdolittle.eplang.jp/djs/

ドリトル

  • 山内ことみ
  • 2019/06/25 (Tue) 18:19:41
壁がカメ太に迫ってくらようにするにはどうすればいいですか?

Re: ドリトル

  • きつね
  • 2019/06/25 (Tue) 18:36:31
以下は図形を移動するプログラムです。
これが参考になると思います。
あとは、マニュアルをよく読んで色々試してみましょう。

--------
かめた=タートル!つくる。
「かめた!100 歩く 90 右回り」!4 繰り返す。
棒=かめた!(青) 図形を作る。
棒!200 100 位置。
時計=タイマー!作る。
時計!「棒!-20 0 移動」実行。