Skip to content

Instantly share code, notes, and snippets.

@maedaunderscore
Last active December 22, 2015 16:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maedaunderscore/744b5f695c2bf1b91939 to your computer and use it in GitHub Desktop.
Save maedaunderscore/744b5f695c2bf1b91939 to your computer and use it in GitHub Desktop.
ScratchをSmalltalkで操作してジングルベルを演奏する(https://www.youtube.com/watch?v=BJ9-j91ZUXU) でコピペしているコード
* 音のブロックを作る + ユーティリティクラス定義
[| last soundColor controlColor |
Smalltalk garbageCollect.
stage _ ScratchStageMorph allInstances first.
soundColor _ (stage class blockColorFor: 'sound').
controlColor _ (stage class blockColorFor: 'control').
last _ nil.
#(
(1.0
((60 5.53437509765625)
(53 5.66874931640625)
(72 3.0)
(57 5.6968751953125)))
(1.0 ((81 3.0)))
(1.0
((57 5.775001171874999)
(61 5.6499996093750005)
(53 5.799999023437499)
(79 3.0)))
(1.0 ((77 3.0)))
(2.0
((53 5.5062509765625)
(72 7.9156248046875)
(69 7.834376953125)
(62 5.306248828125)
(57 5.578126171875)))
(1.0
((57 5.6312507812499994)
(61 5.61874921875)
(53 5.606251171875)))
(0.333 ((69 1.125)))
(0.333 ((70 1.0)))
(0.333 ((71 1.0)))
(1.0
((53 5.628121875)
(72 3.0)
(60 5.5562484375)
(57 5.587498828125)))
(1.0 ((81 3.0)))
(1.0
((57 5.284374609375)
(53 5.256249609375)
(62 5.38124765625)
(79 3.0)))
(1.0 ((77 3.309373828125)))
(2.0
((65 5.071876171874999)
(58 5.212501171874999)
(84 11.424997265624999)
(55 11.53125)))
(2.0
((64 5.2437515625)
(58 5.150003906249999)))
(1.0 ((53 1.0)))
(1.0
((60 1.0)
(57 0.6906234374999999)))
(1.0 ((52 1.0)))
(1.0
((57 0.7437515625)
(60 0.6906234374999999)))
(1.0 ((50 1.0)))
(1.0
((60 0.7593749999999999)
(57 0.5)))
(1.0 ((48 0.72499921875)))
(1.0
((57 0.72187734375)
(60 0.65312578125)))
(1.0 ((53 1.0)))
(1.0
((57 0.74062265625)
(60 0.77812734375)))
(1.0 ((52 1.0)))
(1.0
((60 0.7468734374999999)
(57 0.6187499999999999)))
(1.0 ((50 0.6843796875)))
(1.0
((57 0.66562734375)
(60 0.73125)))
(1.0 ((48 0.7718765624999999)))
(1.0
((72 2.3187515625)
(60 0.7218703124999999)
(57 0.6062484374999999)))
(1.0 ((53 1.0) (72 3.0)))
(1.0
((81 3.0)
(57 0.64374609375)
(60 1.0)))
(1.0
((52 0.7718765624999999)
(79 3.0)))
(1.0
((57 0.7343718749999999)
(77 3.0)
(60 0.6312515624999999)))
(1.0
((50 1.0)
(72 7.400010937499999)))
(1.0
((60 1.0) (57 0.7937578125)))
(1.0 ((48 0.700003125)))
(1.0
((57 0.6843796875)
(72 2.4343734374999997)
(60 1.0)))
(1.0 ((53 1.0) (72 3.0)))
(1.0
((60 0.7968656249999999)
(81 3.0)
(57 0.7187484375)))
(1.0
((45 0.7843781249999999)
(79 3.0)))
(1.0
((77 3.0)
(53 1.0)
(60 1.20313125)))
(1.0
((46 1.0) (74 7.2437484375)))
(1.0 ((58 1.0) (53 1.0)))
(1.0 ((45 0.7875000000000001)))
(1.0
((74 2.5593749999999997)
(58 0.7593749999999999)
(53 0.7906218749999999)))
(1.0
((74 3.0) (43 0.7156265625)))
(1.0
((82 2.5687546875000002)
(58 1.0)
(53 1.0)))
(1.0 ((81 3.0) (50 1.0)))
(1.0
((79 3.0) (58 1.0) (53 1.0)))
(1.0
((76 7.962496874999999)
(48 0.6875015625)))
(1.0
((58 0.6968671874999999)
(60 1.0)))
(1.0 ((52 1.0)))
(1.0
((58 1.0)
(84 2.446875)
(60 1.0)))
(1.0
((55 0.7781203124999999)
(86 3.0)))
(1.0
((58 0.73125)
(84 3.0)
(60 1.0)))
(1.0
((48 0.6968812499999999)
(82 3.0)))
(1.0
((60 1.0)
(58 0.7499953125)
(79 3.0)))
(1.0
((81 6.9875015625)
(53 1.206253125)
(77 7.059374999999999)))
(1.0 ((52 1.2124968749999998)))
(1.0 ((50 1.153125)))
(1.0
((48 1.0) (72 2.190628125)))
(1.0 ((72 3.0) (53 1.0)))
(1.0
((57 0.7624968750000001)
(60 0.7906218749999999)
(81 3.0)))
(1.0 ((79 3.0) (52 1.0)))
(1.0
((60 1.0) (57 1.0) (77 3.0)))
(1.0
((72 6.903126562499999)
(50 1.0)))
(1.0 ((57 1.0) (60 1.0)))
(1.0 ((48 1.0)))
(1.0
((60 0.7437515625)
(72 2.512490625)
(57 0.5781375)))
(1.0 ((53 1.0) (72 3.0)))
(1.0
((60 1.0)
(57 0.7062468749999999)
(81 3.0)))
(1.0 ((79 3.0) (48 1.0)))
(1.0
((57 1.0) (77 3.0) (60 1.0)))
(1.0
((53 1.0)
(74 7.665637499999999)))
(1.0 ((58 1.0) (62 1.0)))
(1.0 ((54 1.0)))
(1.0
((60 1.0)
(74 2.51251875)
(62 1.0)))
(1.0 ((55 1.0) (74 3.0)))
(1.0
((58 0.7062468749999999)
(62 1.0)
(82 2.3562562500000004)))
(1.0
((50 0.68124375) (81 3.0)))
(1.0
((58 1.0) (79 3.0) (62 1.0)))
(1.0
((52 1.0) (84 2.399990625)))
(1.0
((58 1.0)
(84 2.437509375)
(60 1.0)))
(1.0
((48 0.7624968750000001)
(84 2.4219)))
(1.0
((84 3.0) (58 1.0) (60 1.0)))
(1.0
((86 2.57810625) (55 1.0)))
(1.0
((60 1.118728125)
(58 1.0)
(84 3.0)))
(1.0
((48 0.7343718749999999)
(82 3.0)))
(1.0
((58 1.0) (60 1.0) (79 3.0)))
(1.0
((77 2.0)
(57 1.218740625)
(53 1.0)))
(0.5 ((72 2.0)
('sabi-start' 1.0)))
(0.5 ((74 1.6093968749999998)))
(0.5
((60 5.515621874999999)
(76 1.3499999999999999)))
(0.5 ((77 1.3874906249999999)))
(0.5 ((79 1.55626875)))
(0.5 ((80 1.35624375)))
(1.0
((53 1.0)
(81 1.1468812499999999)
(77 1.206253125)
(72 1.0)
('sabiA' 1.0)))
(1.0
((81 1.0)
(60 1.0)
(77 1.0)
(72 1.0)
(57 0.7125187499999999)
('sabiA' 1.0)))
(1.0
((52 1.0)
(77 5.543746874999999)
(81 5.371874999999999)
(72 5.20936875)
('sabiB' 1.0)))
(1.0
((60 0.78125625)
(57 0.750009375)))
(1.0
((50 1.0)
(77 0.7062468749999999)
(81 0.756253125)
(72 0.64063125)
('sabiA' 1.0)))
(1.0
((60 0.7624968750000001)
(57 0.6562406249999999)
(81 1.0)
(77 1.0)
(72 1.0)
('sabiA' 1.0)))
(1.0
((48 1.0)
(81 5.253131249999999)
(72 5.29374375)
(77 5.249981249999999)
('sabiB' 1.0)))
(1.0 ((57 0.646875) (60 1.0)))
(1.0
((72 2.0)
(81 2.4343874999999997)
(77 2.5281281249999994)
(53 1.0)
('sabiA' 1.0)))
(1.0
((60 1.0)
(57 0.7124906249999999)
(84 3.0)
('sabiA' 1.0)))
(1.0
((77 4.75936875)
(74 4.2031125)
(46 0.6687562499999999)
('sabiB' 1.0)))
(0.5 ((62 1.0) (58 1.0)))
(0.5
((79 1.484353125)
('sabiA' 1.0)))
(1.0
((53 1.0)
(77 10.156246874999999)
(81 10.29375)
(72 10.018743749999999)
('sabiB' 1.0)))
(1.0
((57 0.750009375) (60 1.0)))
(1.0 ((52 1.0)))
(1.0 ((57 1.0) (60 1.0)))
(1.0
((74 2.4937312499999997)
(50 1.0)
(77 2.52185625)
(82 2.42814375)
('sabiA' 1.0)))
(1.0
((58 1.0)
(62 0.7593749999999999)
(74 3.0)
(82 2.503125)
(77 2.590621875)
('sabiA' 1.0)))
(1.0
((72 4.0)
(52 1.0)
(82 4.0)
(76 4.362496875)
('sabiB' 1.0)))
(0.5
((55 0.7999874999999999)
(60 1.0)))
(0.5 ((82 1.1843718749999999)))
(1.0
((72 3.0)
(53 1.0)
(77 3.0)
(82 2.321859375)
('sabiA' 1.0)))
(1.0
((81 2.0)
(57 0.7062468749999999)
(60 1.0)
('sabiA' 1.0)))
(1.0
((81 2.5750124999999997)
(48 1.0)
(77 3.0)
(72 2.1999937499999995)
('sabiB' 1.0)))
(0.5
((57 0.7718625)
(81 1.0)
(60 1.0)
('sabiA' 1.0)))
(0.5
((81 1.2093749999999999)
('sabiA' 1.0)))
(1.0
((71 2.5250062499999997)
(74 3.0)
(81 2.55313125)
(50 1.0)
('sabiA' 1.0)))
(1.0
((55 0.73125)
(59 0.7999874999999999)
(79 2.3437406249999997)
('sabiA' 1.0)))
(1.0
((79 3.0)
(43 0.7125187499999999)
(74 3.0)
(71 2.3562562500000004)
('sabiA' 1.0)))
(1.0
((59 1.1937375000000001)
(81 2.365621875)
(55 1.0)
('sabiA' 1.0)))
(1.0
((72 1.115634375)
(76 1.21876875)
(48 1.0)
(79 1.156246875)))
(0.5
((60 3.1593937500000004)
(72 2.0)
('sabiC' 1.0)))
(0.5 ((74 1.5625125)))
(0.5
((58 3.0) (76 1.29999375)))
(0.5 ((77 1.35624375)))
(0.5
((55 3.0)
(79 1.3656374999999998)))
(0.5 ((80 1.3406062499999998)))
(1.0
((77 1.268746875)
(81 1.3125093749999999)
(72 1.15936875)
(53 0.768740625)
('sabiD' 1.0)
('sabi-falling-neko' 1.0)))
(1.0
((72 1.0)
(81 1.0)
(77 1.0)
(60 1.0)
(57 0.671878125)))
(1.0
((81 4.740609375)
(77 5.078109375)
(72 4.8968718749999995)
(52 1.0)))
(1.0 ((57 1.0) (60 1.0)))
(1.0
((77 0.78125625)
(81 1.0)
(72 1.0)
(50 1.0)
('sabiE' 1.0)
('sabi-falling-neko' 1.0)))
(1.0
((81 1.1406375)
(77 1.0)
(60 1.0)
(72 1.0)
(57 0.7124906249999999)))
(1.0
((72 4.953121874999999)
(77 4.240603125)
(81 4.8374999999999995)
(48 1.0)))
(1.0
((57 0.7593749999999999)
(60 1.0)
('sabiF' 1.0)
('sabi-falling-neko' 1.0)))
(1.0
((53 1.0)
(77 3.0)
(81 3.0)
(72 2.0)
('sabiF' 1.0)))
(1.0
((60 1.0)
(84 2.3437687499999997)
(57 0.687515625)
('sabiF' 1.0)))
(1.0
((46 0.6187499999999999)
(74 3.215615625)
(77 4.38125625)
('sabiF' 1.0)))
(0.5 ((62 1.0) (58 1.0) ('sabiF' 1.0)))
(0.5 ((79 1.4437406249999998) ('sabiF' 1.0)))
(1.0
((77 10.14688125)
(53 1.0)
(72 9.987525000000002)
(81 10.059356249999999)
('sabiF' 1.0)))
(1.0 ((57 1.0) (60 1.0) ('sabiF' 1.0)))
(1.0 ((52 1.0) ('sabiF' 1.0)))
(1.0 ((60 1.0) (57 1.0) ('sabiF' 1.0)))
(1.0
((74 1.21561875)
(77 1.3156312499999998)
(82 1.1843718749999999)
(50 1.0)
('sabiD' 1.0)
('sabi-falling-neko' 1.0)))
(1.0
((58 1.0)
(74 1.1406375)
(77 1.234378125)
(82 1.0)
(62 0.756253125)))
(1.0
((72 3.6437625000000002)
(52 1.0)
(82 3.784359375)
(76 4.256240624999999)))
(0.5
((58 1.259353125) (62 1.0)))
(0.5
((82 1.0)
('sabiE' 1.0)
('sabi-falling-neko' 1.0)))
(1.0
((72 2.4937312499999997)
(53 1.0)
(77 3.0)
(82 2.31564375)))
(1.0
((81 2.274975)
(60 1.0)
(57 1.0)))
(1.0
((74 4.0)
(54 1.0)
(72 3.6843749999999997)
(81 4.0)))
(0.5 ((62 1.0) (57 1.0)))
(0.333 ((81 1.0)
('sabiF' 1.0)
('sabi-falling-neko' 1.0)))
(1.0 ((55 5.228128125)
(58 5.112478124999999)
(84 2.3468906249999995)
(74 2.2781249999999997)
(77 2.340646875)
(62 4.834406249999999)
('sabiF' 1.0)))
(1.0
((84 2.249971875)
(77 3.0)
(74 2.3781375)
('sabiF' 1.0)
('sabi-falling-neko' 1.0)))
(1.0 ((48 5.175)
(55 5.175)
(82 2.4093562499999996)
(72 2.4656062499999996)
(76 3.0)
(58 5.0749875)
('sabiF' 1.0)))
(1.0 ((79 3.0) ('sabiF' 1.0)))
(1.66666875
((57 1.0) (77 1.0) (53 1.0) ('sabiC' 1.0)))
(2.0
((48 6.1718625)
(36 6.300000000000001)
(76 4.34379375)
(79 4.52188125)
(84 4.31566875)
(82 4.53751875)))
(0.333 ((60 3.41870625)
('meloA' 1.0)))
(0.66665625 ((41 2.0)))
(0.333
((53 1.0) (69 3.65934375)))
(0.6666749999999999 ((45 2.0)))
(0.333 ((46 1.35624375)))
(0.66770625
((67 3.0) (47 2.0)))
(0.333
((48 1.1312437499999999)))
(0.67396875
((65 2.58125625) (36 2.0)))
(0.333
((60 6.721875000000001)
(48 0.7875000000000001)))
(0.6666749999999999 ((41 2.0)))
(0.333 ((53 1.0)))
(0.6666749999999999 ((45 2.0)))
(0.333 ((46 1.13439375)))
(0.64269375 ((47 2.0)))
(0.333 ((57 1.0) (48 1.0)))
(0.66665625
((58 2.0) (36 2.0)))
(0.333
((59 1.0)
(48 0.6905812499999999)))
(0.6749999999999999
((60 2.0) (41 2.0)))
(0.333
((69 4.271850000000001)
(53 1.0)))
(0.66354375 ((45 2.0)))
(0.333 ((46 2.0)))
(0.6666749999999999
((47 2.0) (67 3.0)))
(0.333 ((48 1.0)))
(0.6666749999999999
((36 2.12191875) (65 2.0)))
(0.333
((48 0.72185625)
(62 6.85310625)))
(0.66665625
((46 1.6999874999999998)))
(0.333 ((58 0.7156125)))
(0.6666749999999999
((50 1.6250062499999998)))
(0.333 ((51 1.1624625)))
(0.65105625 ((52 2.0)))
(0.333 ((62 1.0) (53 1.0)))
(0.6708375 ((61 2.0) (41 2.0)))
(0.333
((62 0.79374375) (53 1.0)
('meloB' 1.0)))
(0.6698062499999999
((62 2.0) (46 2.0)))
(0.333
((58 1.0)
(70 3.2187374999999996)))
(0.6666749999999999
((50 1.6468874999999996)))
(0.333 ((51 1.125)))
(0.6812437499999999
((69 3.0) (52 2.0)))
(0.333 ((53 1.1719125)))
(0.6728999999999999
((67 2.0) (41 2.0)))
(0.333
((64 6.7969124999999995)
(53 0.79059375)))
(0.6364500000000001 ((48 2.0)))
(0.333 ((60 0.73125)))
(0.6395812499999999 ((52 2.0)))
(0.39478125 ((53 1.3624875)))
(0.63230625 ((54 2.0)))
(0.333 ((55 1.0) (64 1.125)))
(0.6604125 ((63 2.0) (43 2.0)))
(0.29791874999999995
((64 1.0) (55 0.64063125)))
(0.7000125
((64 2.13125625)
(48 2.0)
(72 2.0)))
(0.3 ((60 1.16870625)))
(0.7125
((64 2.0)
(72 2.22496875)
(48 2.0)))
(0.333 ((60 1.0)))
(0.6885375
((63 3.0)
(70 2.4656062499999996)
(49 2.0)))
(0.333 ((61 0.77810625)))
(0.67708125
((67 1.5280874999999998)))
(2.0
((50 5.51559375)
(60 5.018737499999999)
(66 5.2875)
(69 5.056256249999999)
('meloC' 1.0)))
(1.0
((70 1.0)
(48 1.0)
(62 1.0)
(65 1.21876875)))
(1.3291687499999998
((60 3.181275)
(48 3.3625125)
(36 3.2093999999999996)))
(0.6583312499999999
((60 1.48753125) (41 2.0)))
(0.333
((53 1.0)
(69 3.5843624999999997)))
(0.64790625 ((45 2.0)))
(0.333
((46 1.4124937499999999)))
(0.6604125 ((47 2.0) (67 3.0)))
(0.333 ((48 1.2562875)))
(0.6666749999999999
((36 2.0)
(65 1.6062750000000001)))
(0.333
((48 1.0)
(60 6.596887499999999)))
(0.6614625 ((41 2.0)))
(0.333 ((53 1.0)))
(0.6583312499999999 ((45 2.0)))
(0.333
((46 1.3499999999999999)))
(0.66459375 ((47 2.0)))
(0.333 ((48 1.0) (60 1.2969)))
(0.6572812499999999
((58 2.0) (36 2.0)))
(0.333 ((48 1.0) (59 1.0)))
(0.66144375
((41 2.0) (60 2.0)))
(0.333
((53 1.25004375)
(69 3.3374812499999997)))
(0.6697875 ((45 2.0)))
(0.333 ((46 1.10626875)))
(0.66354375
((47 2.0) (67 3.0)))
(0.333 ((48 1.35624375)))
(0.66249375
((36 2.0) (65 1.69374375)))
(0.333
((48 0.6093562499999999)
(62 7.3280812499999985)))
(0.665625 ((46 2.0)))
(0.333 ((58 1.0)))
(0.6572812499999999
((50 1.5999749999999997)))
(0.333
((51 1.3499999999999999)))
(0.6791625 ((52 2.0)))
(0.333 ((62 1.0) (53 1.0)))
(0.6541499999999999
((41 1.6312499999999999)
(61 2.0)))
(0.333
((62 0.7687687499999999)
(53 0.7499812499999999)))
(0.65938125
((62 2.0) (46 2.0)))
(0.333
((58 1.0)
(70 3.6687374999999998)))
(0.65625 ((50 1.63749375)))
(0.333
((51 1.2531374999999998)))
(0.65625 ((52 2.0) (69 3.0)))
(0.333 ((53 1.40625)))
(0.6604312499999999
((41 2.0)
(67 1.2718687499999999)))
(0.333
((72 3.6124874999999994)
(53 0.6749999999999999)))
(0.65835 ((41 2.0)))
(0.333 ((53 1.18434375)))
(1.0
((72 2.41250625) (41 2.503125)))
(1.0
((72 4.0)
(43 2.1999937499999995)
(55 2.0)))
(0.6260249999999999
((44 2.446875) (56 2.34691875)))
(0.333 ((72 1.0)))
(0.6552
((74 0.7499812499999999)
(71 0.590625)
(67 0.6125062499999999)
(57 1.6593749999999998)))
(1.359375
((72 3.0)
(63 3.23746875)
(66 3.2749875)
(56 4.0)))
(1.0
((55 3.0)
(62 2.37808125)
(65 2.3718375)
(70 2.2624874999999998)))
(0.67291875
((62 1.6093687499999998)
(67 1.5874875)
(58 1.6593749999999998)
(48 2.0)))
(2.0
((57 0.7062749999999999)
(41 0.79689375)
(65 0.7062187499999999)
(60 0.6343875)))
(0.07291874999999999
((36 6.259387500000001)
(48 6.37813125)
(64 6.193743749999999)))
(2.334375
((72 6.334368749999999)
(68 6.415649999999999)))
(0.67813125
((69 2.0)
(60 2.0)
(65 2.0)
(41 2.0)
('sabi-start' 1.0)
('dan-costume' 1.0)
('sabi-1' 1.0)))
(0.333 ((53 1.0)))
(0.6666749999999999
((45 2.0)
(69 1.5843937500000003)
(65 2.0)
(60 1.6187624999999999)
('sabi-2' 1.0)))
(0.333
((46 1.1968874999999999)))
(0.66665625
((47 2.0)
(69 4.4250187500000004)
(60 4.61565)
(65 4.587524999999999)
('sabi-3' 1.0)))
(0.333 ((48 1.0)))
(0.6666749999999999 ((36 2.0)))
(0.333 ((48 1.0)))
(0.69166875
((60 2.0)
(69 2.0)
(65 2.0)
(41 2.0)
('dan-costume' 1.0)
('sabi-11' 1.0)))
(0.333
((68 1.3687312499999997)
(53 1.6875)))
(0.6572999999999999
((69 0.6843937499999999)
(45 2.0)
('sabi-10' 1.0)))
(0.333
((69 5.553112499999999)
(46 1.100025)
(60 5.5312874999999995)
(65 5.5594125)))
(0.6666749999999999 ((47 2.0)
('sabi-9' 1.0)))
(0.333 ((48 1.0)))
(0.6666749999999999 ((36 2.0)))
(0.333 ((48 1.0)))
(0.66665625
((41 2.0)
(69 2.5718625)
(65 3.0)
(60 2.4593625)
('sabi-4' 1.0)
('dan-costume' 1.0)))
(0.333 ((53 1.0)))
(0.6666749999999999
((45 1.6750124999999998)
(72 1.4030999999999998)
('sabi-8' 1.0)))
(0.333 ((46 1.0)))
(0.6666749999999999
((47 2.0)
(62 2.0)
(65 2.39686875)
('sabi-6' 1.0)
('dan-costume' 1.0)))
(0.333
((48 1.0) (67 0.646875)))
(0.6604125 ((36 2.0)
('sabi-8' 1.0)))
(0.333 "ru"
((60 11.4156)
(65 11.47809375)
(48 1.0)
(69 11.4593625)
('sabi-3' 1.0)
('sabi-6' 1.0)
('sabi-9' 1.0)))
(0.6666749999999999 ((41 2.0)))
(0.333 ((53 1.18434375)))
(0.6666749999999999 ((43 2.0)
('dan-joinus' 1.0)))
(0.333 ((55 0.72185625)))
(0.66665625 ((44 2.0)))
(0.333 ((56 1.0)))
(0.6666749999999999 ((45 2.0)))
(0.333 ((57 1.0)))
(1.0
((62 2.43748125)
(65 2.45626875)
(53 2.0)
(46 2.0)
(70 2.38753125)
('sabi-1' 1.0)
('dan-costume' 1.0)))
(1.0
((55 2.0)
(46 2.2281187499999997)
(62 2.1468374999999997)
(65 2.2375125)
(70 2.0)
('sabi-2' 1.0)))
(1.0
((56 2.27188125)
(62 4.0)
(65 4.0)
(46 2.33128125)
(70 3.706256249999999)
('sabi-3' 1.0)))
(0.6697875
((55 2.0) (46 2.3781375)))
(0.333
((62 0.6218999999999999)
(65 0.5500125)
(70 0.5937749999999999)
('sabi-11' 1.0)))
(0.69688125
((48 2.1250125)
(62 2.0)
(70 1.543725)
(41 2.0)
(65 2.0)
('sabi-10' 1.0)
('dan-costume' 1.0)))
(0.333
((69 0.6155999999999999)))
(0.6760499999999999
((41 2.5437374999999998)
(50 2.37189375)
('sabi-9' 1.0)))
(0.333
((60 3.5218687499999994)
(69 3.5124750000000002)
(65 3.55629375)))
(1.0
((41 2.4937312499999997)
(51 2.2687875)))
(1.0
((41 2.499975)
(69 2.53749375)
(60 2.1843562499999996)
(50 2.1969)
(65 2.47809375)
('sabi-3' 1.0)))
(0.67396875
((43 2.0)
(69 2.41250625)
(62 3.0)
(58 2.58440625)
('sabi-9' 1.0)))
(0.333 ((55 0.73125)))
(1.0
((58 2.0)
(45 2.33128125)
(67 2.18750625)
(55 2.5968374999999995)
(62 2.28751875)
('sabi-5' 1.0)))
(0.69375
((58 1.5999749999999997)
(67 2.0)
(62 2.0)
(46 2.43748125)
(55 3.0)
('sabi-7' 1.0)))
(0.333 ((69 3.346875)))
(1.0
((47 2.4937312499999997)
(55 2.3655937499999995)
('sabi-5' 1.0)))
(0.6906375
((64 2.0)
(58 1.493775)
(48 2.1125249999999998)
(67 2.0)
('sabi-3' 1.0)))
(1.0 ((60 0.6062062499999998)
('sabi-5' 1.0)))
(1.0
((84 1.0) (76 1.0) (36 1.0) ('sabi-7' 1.0) ('neko-meow' 1.0)))
(0.333 ((76 1.0) ))
(0.67603125 ((77 2.0) ))
(0.333
((79 0.6719062499999999) ('sabiC' 1.0)))
(0.66665625
((41 1.6905937499999997)
(77 2.4312375)
(72 2.443725)
(81 2.4812437499999995)))
(0.333
((53 0.7999874999999999)))
(0.6666749999999999
((45 1.6718625)
(81 2.4968812500000004)
(72 2.44063125)
(77 2.58440625)
('sabi-7' 1.0)))
(0.333 ((46 1.265625)))
(0.6812437499999999
((81 4.56249375)
(72 4.4250187500000004)
(47 2.0)
(77 4.56564375)
('sabi-2' 1.0)))
(0.333 ((48 1.0)
('sabi-4' 1.0)))
(0.66665625 ((36 2.0)
('sabi-8' 1.0)))
(0.333 ((48 1.0)
('sabiC' 1.0)))
(0.67918125
((81 2.0)
(72 2.1468937500000003)
(41 2.0)
(77 2.0)
('sabi-3' 1.0)
('sabi-1' 1.0)))
(0.333
((53 1.125)
(80 1.3343625000000001)
('sabi-8' 1.0)))
(0.6437625
((45 1.5656624999999997)
(81 1.0)
('sabi-12' 1.0)))
(0.333
((81 5.20936875)
(72 5.071837499999999)
(77 5.159362499999999)
(46 1.12809375)
('sabi-1' 1.0)
('sabi-7' 1.0)))
(0.66665625 ((47 2.0)
('sabi-11' 1.0)
('sabi-4' 1.0)
('sabi-9' 1.0)
('sabi-2' 1.0)))
(0.333
((48 1.2437437500000001)))
(0.6666749999999999 ((36 2.0)))
(0.333 ((48 1.0)))
(0.6885375
((72 2.5250062499999997)
(81 3.0)
(77 3.0)
(41 2.0)
('dan-joinus' 1.0)
('sabiC' 1.0)
('sabi-1' 1.0)))
(0.3 ((53 1.0)
('sabi-3' 1.0)))
(0.69999375
((84 3.0) (45 1.55311875)
('sabi-5' 1.0)
('dan-joinus' 1.0)
('sabiC' 1.0)))
(0.333
((46 1.1874937499999998)
('sabi-7' 1.0)))
(0.6802125
((74 2.0)
(77 2.1843562499999996)
(47 2.0)
('sabi-9' 1.0)))
(0.333 ((48 1.0) (79 1.0)
('sabi-11' 1.0)))
(0.6541687500000001 ((36 2.0)
('sabi-1' 1.0)
('sabi-5' 1.0)
('sabi-9' 1.0)))
(0.333
((72 11.668781249999999)
(77 11.706243749999999)
(48 1.0)
(81 11.67811875)
('neko-meow' 1.0)))
(0.66665625 ((41 2.0)))
(0.333 ((53 1.0)))
(0.6666749999999999 ((43 2.0)
('sabi-3' 1.0)
('sabi-7' 1.0)
('sabi-11' 1.0)
('sabiC' 1.0)))
(0.333 ((55 1.0)))
(0.6666749999999999 ((44 2.0)
('sabi-3' 1.0)
('sabi-7' 1.0)
('sabi-11' 1.0)))
(0.333 ((56 0.73434375)))
(0.66665625 ((45 2.0)
('sabi-3' 1.0)
('sabi-7' 1.0)
('sabi-11' 1.0)))
(0.333 ((57 0.7156125)))
(0.6718875000000001
((74 2.3093999999999997)
(46 2.0)
(77 2.30000625)
(82 2.16871875)
('sabi-8' 1.0)))
(0.333
((58 1.3499999999999999)))
(0.6666749999999999
((48 2.0)
(74 2.0)
(82 2.0)
(77 2.0)
('sabi-4' 1.0)))
(0.333 ((58 1.29999375)
('sabi-9' 1.0)))
(0.66665625
((50 2.0)
(76 4.45629375)
(72 4.34683125)
(82 4.23129375)
('sabi-2' 1.0)
('sabi-10' 1.0)))
(0.333 ((58 1.0)
('sabi-1' 1.0)))
(0.65311875 ((52 2.14065)
('sabi-11' 1.0)))
(0.29480625
((72 1.0)
(76 0.6687562499999999)
(58 1.0)
(82 0.7499812499999999)
('sabi-7' 1.0)
('sabi-12' 1.0)
('sabi-1' 1.0)))
(0.7103999999999999
((80 1.0)
(81 2.12810625)
(53 2.0)
('sabi-3' 1.0)
('sabi-9' 1.0)))
(0.333
((52 1.0) (80 1.20628125)
('sabi-7' 1.0)))
(0.6395812499999999
((51 1.0) (81 0.7687125)
('sabi-4' 1.0)))
(0.22291874999999997
((72 0.74064375)
(50 5.65621875)
('sabiC' 1.0)))
(0.2020875 ((83 0.5) (81 0.5) ('sabiC' 1.0)))
(0.21457500000000002
((72 0.7562249999999999)
('sabiC' 1.0)))
(0.1552125 ((81 0.63129375)
('sabiC' 1.0)))
(0.20625 ((72 1.0)
('sabiC' 1.0)))
(0.20521875 ((81 0.66560625)
('sabiC' 1.0)))
(0.21144374999999999
((72 0.72185625)
('sabiC' 1.0)))
(0.17709375 ((81 0.68754375)
('sabiC' 1.0)))
(0.27290624999999996
((72 1.3593374999999999)
('sabiC' 1.0)))
(0.5 ((81 0.5)))
(1.0
((76 1.21246875)
(84 1.18434375)
(48 1.3406062499999998)
('sabi-3' 1.0)))
(1.0
((76 2.5156124999999996)
(48 2.5812)
(84 2.2281187499999997)
('sabi-11' 1.0)))
(0.6968624999999999
((82 2.0) (50 2.0)
('sabi-7' 1.0)))
(1.0 ((52 1.0) (79 2.5187625)
('sabi-1' 1.0)
('sabi-12' 1.0)))
(1.0
((77 6.315637499999999)
(72 6.931293749999999)
(69 6.821887500000001)
(53 3.0)
('sabi-5' 1.0)
('sabi-8' 1.0)))
(0.333 ((53 1.0)
('sabi-9' 1.0)
('sabi-3' 1.0)))
(1.0 ((52 3.0)
('sabi-6' 1.0)))
(0.65625 ((50 2.0)))
(1.339575
((69 3.0)
(62 3.0)
(60 3.0)
(48 2.5250062499999997)
('sabi-2' 1.0)
('sabi-12' 1.0)))
(1.0
((36 1.0)
(62 1.39685625)
(72 1.40625)
(65 1.4468625)))
(1.0
((72 2.2093874999999996)
(65 3.0)
(62 3.0)
(36 3.1968562499999997)))
(0.6781124999999999
((62 2.0)
(38 2.0)
(70 2.0)
(65 2.0)))
(1.0 ((40 1.0) (67 1.0)))
(1.0
((41 2.1969)
(57 7.018706249999999)
(60 7.140599999999999)
(65 7.231275)
('sabiC' 1.0)
('dan-joinus' 1.0)))
(0.333
((41 1.2250124999999998)))
(1.0 ((40 3.0)))
(0.67291875 ((38 2.0)))
(1.3197937499999999
((36 3.7249874999999997)
(72 3.56878125)
(81 3.7218937500000004)
(74 3.6843749999999997)))
(1.0
((77 5.64688125)
(74 5.531231249999999)
(84 5.57499375)
('sabi-all' 1.0)
('sabiC' 1.0)))
(1.0
((36 3.2093437499999995)
(48 3.23746875)
('neko-meow' 1.0)))
(1.0
((74 5.56875)
(77 5.487525)
(84 5.21251875)))
(1.0
((36 2.4812437499999995)
(48 2.5437374999999998)))
(2.0
((72 5.675006249999999)
(82 5.02183125)
(38 4.96254375)
(76 5.4469125)
(50 4.93126875)
('sabi-all' 1.0)
('sabiC' 1.0)))
(2.0
((79 5.36563125)
(76 5.49376875)
(70 5.47498125)
(52 5.371874999999999)
(40 5.6374875)))
(1.0
((69 9.306225)
(77 9.38750625)
(72 9.456299999999999)
(53 1.0)
(41 1.0)
('sabi-all' 1.0)
('sabiC' 1.0)))
(1.0 ((45 3.0)))
(0.6687374999999999
((43 2.4031124999999998)))
(1.0 ((41 0.7187625)))
(0.083325
((47 0.6593624999999999)
(70 0.55310625)))
(1.0 ((48 3.0) (72 3.0)))
(0.0906375 ((46 1.0)))
(0.2802 ((70 1.0)))
(0.6541687500000001
((45 2.0) (69 2.0)))
(1.3947937499999998
((41 1.0) (65 1.0)))
(-314.99062499999997
((69 1.149975)
(77 1.0)
(72 1.1343375)
(41 1.0)
(53 1.0)))
)
do: [:v ||t notes block |
t _ v first.
notes _ v second.
notes do: [:v2 || note |
note _ v2 first.
block _ stage blockFromSpec: {'broadcast %e'. #-. #broadcast:} color: controlColor.
block defaultArgs: { note asString }; yourself.
last ifNil: [ stage addStack: block] ifNotNil: [ last addMorph: block].
last _ block
].
block _ stage blockFromSpec: {'rest for %n beats'. #t. #rest:elapsed:from:. t}
color: soundColor.
last addMorph: block.
last _ block.
(Delay forSeconds: 0.03) wait
].
(45 to: 100) do: [:i|| newBlock v |
v _ { i. 0.5}.
newBlock _ stage
blockFromSpec: {'when I receive %e'. #E. v first asString}
color: controlColor.
newBlock eventName: v first asString;
addMorph: ( stage blockFromSpec: {
'play note %N for %n beats'. #t. #noteOn:duration:elapsed:from:.
v first. v second}
color: soundColor).
(Delay forSeconds: 0.05) wait.
stage addStack: newBlock
].
neko say: 'Ready!'.
] fork.
(Object subclass: #BlockBuilder
instanceVariableNames: 'color stage sprite'
classVariableNames: ''
poolDictionaries: ''
category: 'Util')
compile: 'sprite: aObj
sprite _ aObj.
stage _ (sprite ownerThatIsA: ScratchFrameMorph) workPane.
color _ sprite class blockColorFor: ''control'''.
neko _ stage sprites first.
neko say: 'Now building blocks ...'.
* ユーティリティクラスのメソッド実装
BlockBuilder compile: 'stage ^stage'.
BlockBuilder compile: 'bySpec: spec ^ sprite blockFromSpec: spec color: color '.
BlockBuilder compile: 'specSeq: specs
| blocks |
^ self blockSeq: (specs collect: [:each | self bySpec: each])'.
BlockBuilder compile: 'blockSeq: blocks
blocks allButFirst inject: blocks first into: [:acc :each| acc addMorph: each. each].
^ blocks first'.
BlockBuilder compile: 'specsAndArgs: xss
| blocks |
blocks _ xss collect: [:each | self bySpec: (each at:1) put: (each at: 2)].
^ self blockSeq: blocks'.
BlockBuilder compile: 'globalVariable: aName
^ VariableBlockMorph new commandSpec: aName; receiver: stage'.
BlockBuilder compile: 'at: idx to: aBlock put: aBlock2
aBlock replaceArgMorph: (aBlock argMorphs at: idx) by: aBlock2.
^ aBlock'.
BlockBuilder compile: 'at: idx to: aBlock with: aBody
aBlock replaceArgMorph: (aBlock argMorphs at: idx) by: (aBody value: sprite).
^ aBlock'.
BlockBuilder compile: 'bySpec: spec put: args
| block |
block _ self bySpec: spec.
args isEmpty ifFalse: [
(block isKindOf: EventHatMorph) ifTrue: [
block eventName: args first
] ifFalse: [
(args first isKindOf: ReporterBlockMorph) ifTrue: [
args doWithIndex: [:each :idx| self at: idx to: block put: each]
] ifFalse: [
block defaultArgs: args
]
]
].
^block'.
BlockBuilder compile: 'bySpec: spec with: aBody
| block |
block _ self bySpec: spec.
aBody value: block.
^block'.
BlockBuilder compile: 'setter: variableName put: value scope: morph
|block|
block _ SetterBlockMorph new initSetterForVar: variableName;
receiver: morph blockReceiver.
block expressionArg numExpression: value.
^ block'.
BlockBuilder compile: 'globalSetter: variableName put: value
^ self setter: variableName put: value scope: stage'.
BlockBuilder compile: 'localSetter: variableName put: value
^ self setter: variableName put: value scope: sprite'.
BlockBuilder compile: 'localChanger: variableName put: value
|block|
block _ SetterBlockMorph new initChangerForVar: variableName;
receiver: sprite blockReceiver.
block expressionArg numExpression: value.
^ block'.
* danと背景のブロックを組み立てる
| cblock |
dan _ (stage sprites reject: [:x | x = neko]) first.
nekoBuilder _ BlockBuilder new sprite: neko.
danBuilder _ BlockBuilder new sprite: dan.
stageBuilder _ BlockBuilder new sprite: stage.
stageBuilder stage addVariable: 'sabi'.
cblock _ stageBuilder bySpec: #('forever if %b' c doForeverIf) put: {
stageBuilder bySpec: #('%s = %s' b = '' '1') put: { stageBuilder globalVariable: 'sabi'}
}.
stage addStack: cblock.
cblock attachBlock: (stageBuilder specSeq: #(
('change %g effect by %n' - changeGraphicEffect:by: 'color' 15)
('wait %n secs' t wait:elapsed:from: 0.03)
)); toggleProcess.
stage addStack: (stageBuilder blockSeq: {
stageBuilder bySpec: #('when I receive %e' E -) with: [:b| b eventName: 'sabi-start'].
stageBuilder globalSetter: 'sabi' put: '1'
}).
stage addStack: (stageBuilder blockSeq: {
stageBuilder bySpec: #('when I receive %e' E -) with: [:b| b eventName: 'meloA'].
stageBuilder globalSetter: 'sabi' put: '0'
}).
dan addStack: (danBuilder specsAndArgs: #(
(('when I receive %e' E -) ('sabiA'))
(('change size by %n' - changeSizeBy:) (30))
(('turn %n degrees' - turnLeft: 25) ())
)).
dan addStack: (danBuilder specsAndArgs: #(
(('when I receive %e' E -) ('sabiB'))
(('point in direction %d' - heading: 90) ())
(('set size to %n%' - setSizeTo: 100) (100))
(('next costume' - nextCostume) ())
)).
dan addStack: (danBuilder specsAndArgs: #(
(('when I receive %e' E -) ('sabiD'))
(('set size to %n%' - setSizeTo: 100) (100))
(('point in direction %d' - heading: 90) ())
(('switch to costume %l' - lookLike:) (1))
(('go to x:%n y:%n' - gotoX:y: 0 0) (0 0))
(('glide %n secs to x:%n y:%n' t glideSecs:toX:y:elapsed:from: 1 180 0) (1 -134 48))
)).
dan addStack: (danBuilder specsAndArgs: #(
(('when I receive %e' E -) ('sabiE'))
(('set size to %n%' - setSizeTo: 100) (100))
(('point in direction %d' - heading: 90) ())
(('switch to costume %l' - lookLike:) (2))
(('go to x:%n y:%n' - gotoX:y: 0 0) (0 0))
(('glide %n secs to x:%n y:%n' t glideSecs:toX:y:elapsed:from: 1 180 0) (1 134 48))
)).
dan addStack: (danBuilder specsAndArgs: #(
(('when I receive %e' E -) ('sabiF'))
(('next costume' - nextCostume) ())
(('go to x:%n y:%n' - gotoX:y: 0 0) (0 0))
(('change size by %n' - changeSizeBy:) (10))
(('turn %n degrees' - turnLeft: 25) ())
)).
dan addStack: (danBuilder specsAndArgs: #(
(('when I receive %e' E -) ('meloA'))
(('switch to costume %l' - lookLike:) (1))
(('show' - show) ())
(('go to x:%n y:%n' - gotoX:y: 0 0) (115 -3))
(('say %s for %n secs' t say:duration:elapsed:from: '' 2) ('Sad...' 4))
)).
dan addStack: (danBuilder specsAndArgs: #(
(('when I receive %e' E -) ('meloB'))
(('switch to costume %l' - lookLike:) (2))
(('go to x:%n y:%n' - gotoX:y: 0 0) (-149 -57))
(('say %s for %n secs' t say:duration:elapsed:from: '' 2) ('Cold...' 4))
)).
dan addStack: (danBuilder specsAndArgs: #(
(('when I receive %e' E -) ('meloC'))
(('switch to costume %l' - lookLike:) (1))
(('go to x:%n y:%n' - gotoX:y: 0 0) (-13 -37))
(('say %s for %n secs' t say:duration:elapsed:from: '' 2) ('So we gotta...' 8))
)).
* 猫のブロックを組み立てる
| builder cblock |
self sayNothing.
builder _ BlockBuilder new sprite: self.
builder stage addVariable: 'roll'.
builder stage setVar: 'roll' to: '1'.
cblock _ builder bySpec: #('forever if %b' c doForeverIf) put: {
builder bySpec: #('%s = %s' b = '' '1') put: { builder globalVariable: 'roll'}
}.
self addStack: cblock.
cblock attachBlock: (builder specSeq: #(
('turn %n degrees' - turnRight: 8)
('move %n steps' - forward: 20)
('next costume' - nextCostume)
('wait %n secs' t wait:elapsed:from: 0.2)
('if on edge, bounce' - bounceOffEdge)
)); toggleProcess.
(self media select: [:each| each isSound]) first mediaName: 'Meow'.
self addStack: (builder specsAndArgs: #(
(('when I receive %e' E -) ('sabiA'))
(('set size to %n%' - setSizeTo: 100) (80))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.05))
(('set size to %n%' - setSizeTo: 100) (120))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.05))
(('set size to %n%' - setSizeTo: 100) (80))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.05))
(('set size to %n%' - setSizeTo: 100) (100))
)).
self addStack: (builder specsAndArgs: #(
(('when I receive %e' E -) ('sabiB'))
(('set size to %n%' - setSizeTo: 100) (150))
(('turn %n degrees' - turnRight: 15) (90))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.05))
(('turn %n degrees' - turnRight: 15) (90))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.05))
(('turn %n degrees' - turnRight: 15) (90))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.05))
(('turn %n degrees' - turnRight: 15) (90))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.05))
(('set size to %n%' - setSizeTo: 100) (100))
)).
self addStack: (builder specsAndArgs: #(
(('when I receive %e' E -) ('sabiC'))
(('set size to %n%' - setSizeTo: 100) (50))
(('point in direction %d' - heading: 90) ())
(('show' - show) ())
( ('go to front' - comeToFront) ())
(('move %n steps' - forward:) (10))
(('play sound %S' - playSound:) ('Meow'))
(('go to x:%n y:%n' - gotoX:y: 0 0) (0 0))
(('change size by %n' - changeSizeBy:) (30))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.1))
(('change size by %n' - changeSizeBy:) (30))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.1))
(('change size by %n' - changeSizeBy:) (50))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.1))
(('change size by %n' - changeSizeBy:) (70))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.1))
(('change size by %n' - changeSizeBy:) (80))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.1))
(('change size by %n' - changeSizeBy:) (90))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.1))
(('change size by %n' - changeSizeBy:) (100))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.4))
(('set size to %n%' - setSizeTo: 100) (100))
)).
self addStack: (builder blockSeq: {
builder bySpec: #('when I receive %e' E -) with: [:b | b eventName: 'sabiC'].
builder globalSetter: 'roll' put: 0
}).
self addStack: (builder specsAndArgs: {
{#('when I receive %e' E -). {'sabi-falling-neko'}}.
#(('set size to %n%' - setSizeTo: 100) (500)).
#(('show' - show) ()).
#(('go to front' - comeToFront) ()).
#(('go to x:%n y:%n' - gotoX:y: 0 0) (0 0)).
#(('change size by %n' - changeSizeBy:) (-100)).
#(('wait %n secs' t wait:elapsed:from: 0.1) (0.1)).
#(('change size by %n' - changeSizeBy:) (-90)).
#(('wait %n secs' t wait:elapsed:from: 0.1) (0.1)).
#(('change size by %n' - changeSizeBy:) (-80)).
#(('wait %n secs' t wait:elapsed:from: 0.1) (0.1)).
#(('change size by %n' - changeSizeBy:) (-70)).
#(('wait %n secs' t wait:elapsed:from: 0.1) (0.1)).
#(('change size by %n' - changeSizeBy:) (-50)).
#(('wait %n secs' t wait:elapsed:from: 0.1) (0.1)).
#(('change size by %n' - changeSizeBy:) (-30)).
#(('wait %n secs' t wait:elapsed:from: 0.1) (0.1)).
#(('change size by %n' - changeSizeBy:) (-30)).
#(('hide' - hide) ())
}).
* 画面切り替え
neko hide.
filename _ (ScratchFileChooserDialog getLastFolderForType: #background) pathName,
'/Outdoors/night-city.gif'.
stage importMedia: filename.
dan heading: 90.
* コピー
| n r cblock |
dan setSizeTo: 100; heading: 90; setVolumeTo: 50.
(dan media reject: [:x| x isSound]) doWithIndex: [:m :idx || form numX numY source |
source _ m form.
numX _ (480 / source width) ceiling + 1.
numY _ (480 / source height) ceiling + 1.
form _ ColorForm extent: ( numX * source width) @ (numY * source height)
depth: 8.
form colors at: 1 put: Color transparent.
(1 to: numX) do: [:i |
(1 to: numY) do: [:j |
form copy: form boundingBox
from: source
to: ((i - 1) * source width) @ ((j - 1) * source height)
rule: Form paint
]
].
(dan media at: idx) form: form
].
n _ 12.
r _ 150.
neko hide.
neko blocksBin submorphs do: [:each | each delete].
neko owner addVariable: 'base'.
(1 to: n) collect: [:i||sprite vBlock iBlock theta builder |
sprite _ neko fullCopy.
sprite objName: 'copy-', i asString.
stage addMorphFront: sprite.
stage sprites addLast: sprite.
sprite addVariable: 'i';
setVar: 'i' to: '1';
heading: 90;
createListNamed: 'speed';
createListNamed: 'path-x';
createListNamed: 'path-y';
createListNamed: 'size'.
sprite lists do: [:each | each delete ].
(1 to: 20) do:[ :t |
sprite
append: 0.05 toList: 'speed';
append: (i * 480 / n) - 240 toList: 'path-x';
append: (t * 360 / 20) -180 toList: 'path-y';
append: (20 - t) * 5 toList: 'size'
].
theta _ ((2 * Float pi) / n * (i - 1)).
(1 to: 20) do:[ :t || r1 theta1 |
r1 _ (20 - t) * (r / 20).
theta1 _ (t * n / 90) + theta.
sprite
append: 0.05 toList: 'speed';
append: (r1 * theta1 sin negated) toList: 'path-x';
append: (r1 * theta1 cos) toList: 'path-y';
append: (20 - t) * 5 toList: 'size'
].
(1 to: 20) do:[ :t || r1 |
r1 _ t * (r / (20 / 4)).
sprite
append: (t < 9 ifTrue: [0.05] ifFalse: [0.001]) toList: 'speed';
append: (r1 * theta sin negated) toList: 'path-x';
append: (r1 * theta cos) toList: 'path-y';
append: (t < 9 ifTrue: [t * 10] ifFalse: [0]) toList: 'size'
].
(1 to: 20) do:[ :t || d |
d _ ((t \\ 4) - 2) abs.
sprite
append: (d = 1 ifTrue: [0.03] ifFalse: [0.08]) toList: 'speed';
append: (i * 480 / n) - 240 + (d * 20) toList: 'path-x';
append: ((t - (d * d / 4 * 0.2)) negated * 360 / 20) + 180 toList: 'path-y';
append: 100 toList: 'size'
].
builder _ BlockBuilder new sprite: sprite.
iBlock _ builder bySpec: #('%n + %n' r + - -) put: {
VariableBlockMorph new commandSpec: 'i'; receiver: sprite.
VariableBlockMorph new commandSpec: 'base'; receiver: builder stage
}.
vBlock _ [:listName |
builder bySpec: #('item %i of %L' r getLine:ofList: 1) with:[:bl2|
bl2 argMorphs first choice: listName.
builder at: 2 to: bl2 put: iBlock fullCopy
]
].
{'sabi-', i asString. 'sabi-all'} doWithIndex:[ :eventName :idx |
sprite addStack: (builder blockSeq: {
builder bySpec: #('when I receive %e' E -) with: [:bl| bl eventName: eventName.].
builder localSetter: 'i' put: '1'.
builder bySpec: #('go to x:%n y:%n' - gotoX:y: 0 0)
put: { vBlock value: 'path-x'. vBlock value: 'path-y' }.
builder bySpec: #('set size to %n%' - setSizeTo: 100) put: {vBlock value: 'size'}.
builder bySpec: #('show' - show).
builder bySpec: #('repeat %n' c doRepeat 20) with: [:repeatBlock |
repeatBlock attachBlock: (builder blockSeq: {
builder bySpec: #('glide %n secs to x:%n y:%n' t glideSecs:toX:y:elapsed:from: 0.05 50 50)
with: [:bl|
"bl argMorphs first numExpression: (idx = 1 ifTrue: [0.05] ifFalse: [0.01])."
builder at: 1 to: bl put: (vBlock value: 'speed').
builder at: 2 to: bl put: (vBlock value: 'path-x').
builder at: 3 to: bl put: (vBlock value: 'path-y').
].
builder bySpec: #('set size to %n%' - setSizeTo: 100) put: {vBlock value: 'size'}.
builder localChanger: 'i' put: '1'
}).
repeatBlock nextBlock: (builder bySpec: #('hide' - hide))
]
})
]
].
neko addStack: (nekoBuilder specsAndArgs: #(
(('when I receive %e' E -) ('dan-joinus'))
(('play sound %S until done' s doPlaySoundAndWait) ('Join-us'))
(('play sound %S' - playSound:) ('Scream-female'))
)).
neko addStack: (nekoBuilder specsAndArgs: #(
(('when I receive %e' E -) ('neko-meow'))
(('set size to %n%' - setSizeTo: 100) (50))
(('point in direction %d' - heading: 90) ())
(('show' - show) ())
( ('go to front' - comeToFront) ())
(('move %n steps' - forward:) (10))
(('play sound %S' - playSound:) ('Meow'))
(('go to x:%n y:%n' - gotoX:y: 0 0) (0 0))
(('change size by %n' - changeSizeBy:) (30))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.1))
(('change size by %n' - changeSizeBy:) (30))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.1))
(('change size by %n' - changeSizeBy:) (50))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.1))
(('change size by %n' - changeSizeBy:) (70))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.1))
(('change size by %n' - changeSizeBy:) (80))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.1))
(('change size by %n' - changeSizeBy:) (90))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.1))
(('change size by %n' - changeSizeBy:) (100))
(('wait %n secs' t wait:elapsed:from: 0.1) (0.4))
(('set size to %n%' - setSizeTo: 100) (100))
(('hide' - hide) ())
)).
dan addStack: (danBuilder blockSeq:{
danBuilder bySpec: #('when I receive %e' E -) with: [:bl | bl eventName: 'sabiC'].
danBuilder bySpec: #('next costume' - nextCostume).
danBuilder bySpec: #('repeat %n' c doRepeat 3) with: [:bl |
bl attachBlock: (danBuilder specsAndArgs: #(
(('show' - show) ())
(('wait %n secs' t wait:elapsed:from: 1) (0.03))
(('hide' - hide) ())
(('wait %n secs' t wait:elapsed:from: 1) (0.02))))
]
}
).
dan addStack: (danBuilder specsAndArgs: #(
(('when I receive %e' E -) ('dan-costume'))
(('next costume' - nextCostume) ())
)).
cblock _ danBuilder bySpec: #('forever' c doForever).
cblock attachBlock: (danBuilder specsAndArgs: #(
(('go to x:%n y:%n' - gotoX:y: 0 0) (0 0))
(('glide %n secs to x:%n y:%n' t glideSecs:toX:y:elapsed:from: 1 180 0) (1 0 180))
)).
dan addStack: cblock.
cblock toggleProcess.
* 最後
| filename |
stage setVar: 'base' to: 40.
filename _ (ScratchFileChooserDialog getLastFolderForType: #background) pathName, '/Nature/stars.gif'.
stage importMedia: filename
stage setVar: 'base' to: 60.
stage setVar: 'base' to: 20.
sprites _ stage sprites select: [:each | each objName beginsWith: 'copy-'].
r _ 150.
n _ sprites size.
{dan. neko} do:[:sprite | sprite blocksBin submorphs do: [:each | each stop]].
sprites withIndexDo: [:sprite :i|| theta |
theta _ ((2 * Float pi) / n * (i - 1)).
sprite
xpos: (r * theta sin negated); ypos: (r * theta cos);
heading: 90; setSizeTo: 50; show
].
filename _ (ScratchFileChooserDialog getLastFolderForType: #costume) pathName,
'/dan4.gif'.
dan importMedia: filename; say: 'Thank you!';
xpos: 0; ypos: 0;
show
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment