バラバラパズル      作品例:バラバラパズル.mwx <学習内容>
・インスタンス化
・カメの状態変数
・スペースのあるメッセージ

 を左クリックすると、絵がバラバラになります。
 ( を左クリックすると、絵が元にもどります。)
 バラバラになったピースをマウスで移動して、元の絵にします。
 を左クリックすると、
 正解すると「good job」、不正解だと「no good」が出ます。
<考え方>
(1)12個のカメを作って、画面に整列します。
(2)それぞれのカメが100×100ドットの画面のピースになってランダムに動きます。
(3)画面のピースを正しい位置に移動して、正しいかの判定をします。


(1)カメの整列

<考え方>
・ 画面を縦に3列、横に4列の 3×4 個のピースに分けるので、それぞれのピースの位置にカメを整列させます。 
カメの整列のもと.mwxを 左クリックしてはじめましょう。 

 12個のカメを作って、整列するプログラムを書きます。

・ 最初に今あるカメを全部無くします。
・ 横(X)に4回くりかえして4個のカメを作り、それを縦(Y)に3回くりかえして、4×3= 12 個のカメを作ります。(インスタンス化)
・ 作ったカメは、見えない状態になっているので、 st で見えるようにします。
英語 日本語
to GO
G1
end
to G1
everyone[remove who]
dotimes [Y 3]
[
 dotimes[X 4]
 [
 newturtle (word "K :X :Y)
 setx :X * 200 - 300
 sety :Y * 200 - 200
 st
 ]
]
end
手順は GO
G1
終わり
手順は G1
全部「無くす 今のカメ」
それぞれの数字をやる「Y 3」

 それぞれの数字をやる「X 4」
 「
 新しいカメ (ワード ”K :X :Y)
 横の位置は :X × 200 - 300
 縦の位置は :Y × 200 - 200
 出てくる
 」

終わり
を左クリックすると、が作られて整列します。 


(2) カメを絵のピースにしてバラバラにする

<考え方>
・ 画面の絵をピースに分けてカメの形にして、カメを動かすことで絵をバラバラにします。
カメでピースのもと.mwxを 左クリックしてはじめましょう。 


 絵をカメのピースにするプログラムを書きます。

snapshot で画面の絵を記憶します。
snaparea で画面を100×100の大きさでカメの形にコピーして、画面の絵を消します。
・ 画面の絵を消します。
restore で記憶してあった画面をもどします。 
英語 日本語
to GO
snapshot
G1
clean
everyone[clickon]

end
to G1
everyone[remove who]
dotimes [Y 3]
[
 dotimes[X 4]
 [
 newturtle (word "K :X :Y)
 setx :X * 200 - 300
 sety :Y * 200 - 200
 G2
 st
 ]
]
end
to G2
set who "rule
[launch[repeat random 150 [fd 1]]]
setheading random 360
snaparea 1 list xcor - 100 ycor + 100 [200 200]
setshape 1
end
to G3
restore
everyone[remove who]
stopall
end
手順は GO
はいけいのスナップ
G1
絵だけ消す
全部「クリックオン」

終わり
手順は G1
全部「無くす 今のカメ」
それぞれの数字をやる「Y 3」

 それぞれの数字をやる「X 4」
 「
 新しいカメ (ワード ”K :X :Y)
 横の位置は :X × 200 - 300
 縦の位置は :Y × 200 - 200
 G2
 出てくる
 」

終わり
手順は G2
設定する 今のカメ ”めいれい
「はじめる「くりかえす 乱数 150 「前へ 1」」」
向きは 乱数 360
範囲のスナップ 1 リスト 横の位置 - 100 縦の位置 + 100「200 200」
形は 1
終わり

手順は G3
元のまま
全部「無くす 今のカメ」
みんなとまる
終わり
を左クリックすると、絵がバラバラになります。
を左クリックすると、絵が元にもどります。


(3)パズルの判定

<考え方>
・ ピースの位置が元の位置とのずれが10ドット以内であれば正解と判定します。
パズルの判定のもと.mwxを 左クリックしてはじめましょう。 


 ピースの位置が正しいかを判定するプログラムを書きます。

turtlesown でカメの位置を記憶する状態変数を作ります。一度作ると、もう一度作ろうとしたときエラーになるので carefully を使います。
 カメの状態変数は、同じ変数名で、カメごとに異なる値を保存します。
・ 横の位置が10ドット以上ずれていたら、ER を立てます(1にします=フラッグを立てる)。
ER によってメッセージを出します。
英語 日本語
to GO
carefully[turtlesown "X1][]
carefully[turtlesown "Y1][]

snapshot
everyone[remove who]
G1
clean
everyone[clickon]
end
to G1
dotimes [Y 3]
[
dotimes[X 4]
[
newturtle (word "K :X :Y)
setx :X * 200 - 300
sety :Y * 200 - 200
G2
st
]
]
end
to G2
set who "rule
[launch[repeat random 150 [fd 1]]]
setheading random 360
snaparea 1 list xcor - 100 ycor + 100 [200 200]
setshape 1
setX1 xcor
setY1 ycor
end
to G3
restore
everyone[remove who]
stopall
end
to P
make "ER 0
everyone
[
if (abs difference xcor X1) > 10 [make "ER 1]
if (abs difference ycor Y1) > 10 [make "ER 1]
]
ifelse :ER > 0
[announce[no good]]
[announce [good job]]
G3
end
手順は GO
注意してやる「カメの中の名前は ”X1」「」
注意してやる「カメの中の名前は ”Y1」「」

はいけいのスナップ
全部「無くす 今のカメ」
G1
絵だけ消す
全部「クリックオン」
終わり
手順は G1
それぞれの数字をやる「Y 3」

それぞれの数字をやる「X 4」

新しいカメ (ワード ”K :X :Y)
横の位置は :X × 200 - 300
縦の位置は :Y × 200 - 200
G2
出てくる


終わり
手順は G2
設定する 今のカメ ”めいれい
「はじめる「くりかえす 乱数 150 「前へ 1」」」
向きは 乱数 360
範囲のスナップ 1 リスト 横の位置 - 100 縦の位置 + 100「200 200」
形は 1
X1は 横の位置
Y1は 縦の位置
終わり
手順は G3
元のまま
全部「無くす 今のカメ」
みんなとまる
終わり
手順は P
名前は ”ER 0
全部

もし (絶対値 差 横の位置 X1) > 10 「名前は ”ER 1」
もし (絶対値 差 縦の位置 Y1) > 10 「名前は ”ER 1」

もしどちらかを :ER > 0
「メッセージを出す「no good」」
「メッセージを出す「good job」」
G3
終わり

を左クリックすると、絵がバラバラになります。 
バラバラになったピースをマウスで移動して、元の絵にします。
を左クリックすると、正解すると「good job」、不正解だと「no good」のメッセージを出します。言葉を「 」で囲むとリストになるので、スペースのある文字も表示されます。 「言葉」 の代わりに ”|言葉|とすると、スペースだけでなく改行も含むことができます。