Discuss Scratch

inoking
Scratcher
1000+ posts

Scratchスクリプトクイズ

#660 は実にエレガントで
同じことを実現するのにも書き方でどうにでもなるという典型的な例ですね。

なお、
#659 が悪いというわけではありません。
トリッキーなところが一切ないので誰でも簡単に理解できるという利点があります。
inoking
Scratcher
1000+ posts

Scratchスクリプトクイズ

NT_ZZzz wrote:

想定解はこちらです。
まだ解いていない人は想定解を見る前に自力で考えてみてください
Scratch の実装のクセを利用した技で、
面白いですがかなりトリッキーですね。
kekelolo
Scratcher
500+ posts

Scratchスクリプトクイズ

トピ違いなので削除

Last edited by kekelolo (Jan. 3, 2020 09:36:19)

abee
Scratcher
1000+ posts

Scratchスクリプトクイズ

Scratchは文書による仕様が示されていない困った言語で、trueが1、falseが0になることも明示的に示されていません(ソースコードにはある)。
実際、1.4までは、設定言語により変化し、日本語の場合は「はい」「いいえ」の文字列が返されました。
したがって、将来もこれが使える保証はどこにもなく、なるべくそういうものに依存しない書き方が良いとする考えもあるかもしれません。
inoking
Scratcher
1000+ posts

Scratchスクリプトクイズ

そういう意味では #660 も真偽値を 1, 0 としている時点でトリッキーだと言えますね。
「真偽値が 1, 0 である前提とするのはよくない」と自分で提唱していたのを忘れていました
wakisaka285
Scratcher
100+ posts

Scratchスクリプトクイズ

問題です。
((1) から (16) までの乱数)
を使って、0から15までの乱数を一行で作ってください。
使えないブロック
(() + ())
(() - ())
(() * ())
(() / ())
(() から () までの乱数)//1から16のみOK
([] と [])
([ v] \( () \)::operators)
<真偽値ブロック::custom>
演算カデコリ以外のブロック::operators
mituki1729
Scratcher
19 posts

Scratchスクリプトクイズ

wakisaka285 wrote:

問題です。
((1) から (16) までの乱数)
を使って、0から15までの乱数を一行で作ってください。
使えないブロック
(() + ())
(() - ())
(() * ())
(() / ())
(() から () までの乱数)//1から16のみOK
([] と [])
([ v] \( () \)::operators)
<真偽値ブロック::custom>
演算カデコリ以外のブロック::operators

(((1) から (16) までの乱数)を(16)で割った余り)
ですか?
takkun0530
Scratcher
100+ posts

Scratchスクリプトクイズ

問題
ターボモードかターボモードではないか判定するには?
KYHID
Scratcher
99 posts

Scratchスクリプトクイズ

ループできる回数とか..?

例)
@greenFlag がクリックされたとき :: events :: hat
[TurboThresold v] を [200] にする
[Counter v] を [0] にする
[StartTimer v] を (タイマー) にする
<((タイマー) - (StartTimer)) > [1]> まで繰り返す
[Counter v] を (0) ずつ変える
end
もし <(Counter) > (TurboThresold)> なら
[ターボモードだよ!] と言う
でなければ
[ターボモードじゃないよ!] と言う
end

Last edited by KYHID (Feb. 8, 2020 05:59:04)

kakurenbo
Scratcher
500+ posts

Scratchスクリプトクイズ

昔作った奴ですが、、
Poteto143
Scratcher
1000+ posts

Scratchスクリプトクイズ

問題
任意の地点にある二つのスプライト間の直線距離がn以下なら“Yes”、そうでなければ“No”を吹き出しに表示するプログラムを作って下さい。
ただし10≦n≦200とします。また、
([ v] までの距離)
は使えないものとします。

上記を守れば、どんなプログラムでもかまいません。頑張って下さい!

Last edited by Poteto143 (Feb. 8, 2020 05:10:15)

kakurenbo
Scratcher
500+ posts

Scratchスクリプトクイズ

Poteto143 wrote:

問題
任意の地点にある二つのスプライト間の直線距離がn以下なら“Yes”、そうでなければ“No”を吹き出しに表示するプログラムを作って下さい。
ただし10≦n≦200とします。また、
([ v] までの距離)
は使えないものとします。

上記を守れば、どんなプログラムでもかまいません。頑張って下さい!
もし <([平方根 v] \( ((((x1) - (x2)) * ((x1) - (x2))) + (((y1) - (y2)) * ((y1) - (y2)))) \)) > (n)> なら 
[No] と言う
でなければ
[Yes] と言う
end

Last edited by kakurenbo (Feb. 8, 2020 05:30:09)

Poteto143
Scratcher
1000+ posts

Scratchスクリプトクイズ

正攻法の正解です。

「正攻法の」と言った意味は、邪道もあるということです。探してみて下さい・・・
KYHID
Scratcher
99 posts

Scratchスクリプトクイズ

愚直に三平方の定理で
定義 直線距離判定 (n)(Sprite1_x)(Sprite1_y)(Sprite2_x)(Sprite2_y)
もし <((n)*(n)) > ((((Sprite2_x)-(Sprite1_x))*((Sprite2_x)-(Sprite1_x)))+(((Sprite2_y)-(Sprite1_y))*((Sprite2_y)-(Sprite1_y))))> なら
[Yes] と言う
でなければ
[No] と言う
end
もしくは….
//Sprite1で再描画せず実行すること
定義 直線距離判定 (n)
[距離 v] を [0] にする
[元の角度 v] を (向き) にする
[Sprite2 v] へ向ける
<[Sprite2 v] に触れた> まで繰り返す
(1) 歩動かす
[距離 v] を (1) ずつ変える
end
(() - (距離::variables)) 歩動かす
(元の角度) 度に向ける
もし <(n) > (距離::variables)> なら
[Yes] と言う
でなければ
[No] と言う
end

Last edited by KYHID (Feb. 8, 2020 05:53:07)

inoking
Scratcher
1000+ posts

Scratchスクリプトクイズ

単純に「触れた」を使うだけでは中心同士の距離が判定できませんね。
KYHID
Scratcher
99 posts

Scratchスクリプトクイズ

inoking wrote:

単純に「触れた」を使うだけでは中心同士の距離が判定できませんね。
そうですね!盲点でした。1pxのコスチュームとかに互いを変えればいいでしょうか…?
mi9g0n
Scratcher
1000+ posts

Scratchスクリプトクイズ

こんなのはどうですか?
inoking
Scratcher
1000+ posts

Scratchスクリプトクイズ

「画面を再描画せずに実行」状態でもコスチュームの変更は有効のようですが
互いにコスチュームを変えるとなるとタイミングが揃わないので
別スプライトを作って追従させるとよいかもしれません。
inoking
Scratcher
1000+ posts

Scratchスクリプトクイズ

mi9g0n wrote:

こんなのはどうですか?
これはどういう仕組みですか?
mi9g0n
Scratcher
1000+ posts

Scratchスクリプトクイズ

半径を距離分の円をペンで描画して、最初のスプライトがその色に触れたのなら円の中だから距離の内なのでYESかなぁ、という考え方です。

Powered by DjangoBB