smalruby-editor 0.0.12-x86-mingw32 → 0.1.0-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of smalruby-editor might be problematic. Click here for more details.

Files changed (179) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -0
  3. data/.travis.yml +2 -0
  4. data/LEGAL +32 -0
  5. data/Rakefile +1 -1
  6. data/app/assets/demos/default.xml +126 -0
  7. data/app/assets/demos/rgb_led_anode.xml +83 -0
  8. data/app/assets/images/favicon.ico +0 -0
  9. data/app/assets/javascripts/application.js +18 -1
  10. data/app/assets/javascripts/block_mode.js.coffee.erb +10 -0
  11. data/app/assets/javascripts/blocks/blockly.js.coffee.erb +34 -0
  12. data/app/assets/javascripts/blocks/character.js.coffee.erb +76 -0
  13. data/app/assets/javascripts/blocks/control.js.coffee.erb +180 -0
  14. data/app/assets/javascripts/blocks/data.js.coffee.erb +6 -0
  15. data/app/assets/javascripts/blocks/etc.js.coffee.erb +6 -0
  16. data/app/assets/javascripts/blocks/events.js.coffee.erb +82 -0
  17. data/app/assets/javascripts/blocks/hardware.js.coffee.erb +313 -0
  18. data/app/assets/javascripts/blocks/looks.js.coffee.erb +163 -0
  19. data/app/assets/javascripts/blocks/motion.js.coffee.erb +297 -0
  20. data/app/assets/javascripts/blocks/operators.js.coffee.erb +279 -0
  21. data/app/assets/javascripts/blocks/pen.js.coffee.erb +6 -0
  22. data/app/assets/javascripts/blocks/ruby.js.coffee.erb +74 -0
  23. data/app/assets/javascripts/blocks/sensing.js.coffee.erb +241 -0
  24. data/app/assets/javascripts/blocks/sound.js.coffee.erb +75 -0
  25. data/{public/favicon.ico → app/assets/javascripts/collections/.keep} +0 -0
  26. data/app/assets/javascripts/collections/character_set.js.coffee +12 -0
  27. data/app/assets/javascripts/generators/ruby.js.coffee.erb +188 -0
  28. data/app/assets/javascripts/models/.keep +0 -0
  29. data/app/assets/javascripts/models/character.js.coffee +66 -0
  30. data/app/assets/javascripts/models/scene.js.coffee +5 -0
  31. data/app/assets/javascripts/models/source_code.js.coffee +64 -0
  32. data/app/assets/javascripts/routers/.keep +0 -0
  33. data/app/assets/javascripts/ruby_mode.js.coffee.erb +12 -0
  34. data/app/assets/javascripts/smalruby.js.coffee +97 -0
  35. data/app/assets/javascripts/views/.keep +0 -0
  36. data/app/assets/javascripts/views/character_modal_view.js.coffee +148 -0
  37. data/app/assets/javascripts/views/character_selector_view.js.coffee +109 -0
  38. data/app/assets/javascripts/views/main_menu_view.js.coffee +264 -0
  39. data/app/assets/stylesheets/editor.css.scss +318 -2
  40. data/app/assets/stylesheets/toolbox.css.scss.erb +62 -0
  41. data/app/assets/templates/.keep +0 -0
  42. data/app/controllers/application_controller.rb +19 -0
  43. data/app/controllers/editor_controller.rb +4 -0
  44. data/app/controllers/source_codes_controller.rb +8 -2
  45. data/app/helpers/application_helper.rb +1 -0
  46. data/app/helpers/editor_helper.rb +46 -0
  47. data/app/models/source_code.rb +49 -6
  48. data/app/views/editor/_block_tab.html.haml +53 -0
  49. data/app/views/editor/_character_modal.html.haml +53 -0
  50. data/app/views/editor/_toolbox.html.haml +384 -0
  51. data/app/views/editor/demo.html.erb +16 -0
  52. data/app/views/editor/index.html.haml +60 -0
  53. data/app/views/layouts/application.html.erb +7 -0
  54. data/config/application.rb +1 -0
  55. data/config/initializers/teaspoon.rb +79 -0
  56. data/config/routes.rb +4 -0
  57. data/lib/smalruby_editor/version.rb +1 -1
  58. data/lib/tasks/gem.rake +7 -4
  59. data/lib/tasks/release.rake +43 -0
  60. data/public/apple-touch-icon.png +0 -0
  61. data/public/blockly/media/1x1.gif +0 -0
  62. data/public/blockly/media/click.mp3 +0 -0
  63. data/public/blockly/media/click.ogg +0 -0
  64. data/public/blockly/media/click.wav +0 -0
  65. data/public/blockly/media/delete.mp3 +0 -0
  66. data/public/blockly/media/delete.ogg +0 -0
  67. data/public/blockly/media/delete.wav +0 -0
  68. data/public/blockly/media/handclosed.cur +0 -0
  69. data/public/blockly/media/handopen.cur +0 -0
  70. data/public/blockly/media/quote0.png +0 -0
  71. data/public/blockly/media/quote1.png +0 -0
  72. data/public/blockly/media/trashbody.png +0 -0
  73. data/public/blockly/media/trashlid.png +0 -0
  74. data/public/blockly/media/tree.png +0 -0
  75. data/public/browserconfig.xml +1 -0
  76. data/public/large.png +0 -0
  77. data/public/smalruby/assets/ball1.png +0 -0
  78. data/public/smalruby/assets/ball2.png +0 -0
  79. data/public/smalruby/assets/ball3.png +0 -0
  80. data/public/smalruby/assets/ball4.png +0 -0
  81. data/public/smalruby/assets/ball5.png +0 -0
  82. data/public/smalruby/assets/ball6.png +0 -0
  83. data/public/smalruby/assets/car1.png +0 -0
  84. data/public/smalruby/assets/car2.png +0 -0
  85. data/public/smalruby/assets/car3.png +0 -0
  86. data/public/smalruby/assets/car4.png +0 -0
  87. data/public/smalruby/assets/cat1.png +0 -0
  88. data/public/smalruby/assets/cat2.png +0 -0
  89. data/public/smalruby/assets/cat3.png +0 -0
  90. data/public/smalruby/assets/frog1.png +0 -0
  91. data/public/smalruby/assets/piano_do.wav +0 -0
  92. data/public/smalruby/assets/piano_do_2.wav +0 -0
  93. data/public/smalruby/assets/piano_fa.wav +0 -0
  94. data/public/smalruby/assets/piano_mi.wav +0 -0
  95. data/public/smalruby/assets/piano_ra.wav +0 -0
  96. data/public/smalruby/assets/piano_re.wav +0 -0
  97. data/public/smalruby/assets/piano_si.wav +0 -0
  98. data/public/smalruby/assets/piano_so.wav +0 -0
  99. data/public/square.png +0 -0
  100. data/public/tiny.png +0 -0
  101. data/public/wide.png +0 -0
  102. data/smalruby-editor.gemspec +4 -0
  103. data/spec/acceptance/block_mode/blocks/character/new.feature +136 -0
  104. data/spec/acceptance/block_mode/blocks/control/await.feature +20 -0
  105. data/spec/acceptance/block_mode/blocks/control/await_until.feature +39 -0
  106. data/spec/acceptance/block_mode/blocks/control/break.feature +20 -0
  107. data/spec/acceptance/block_mode/blocks/control/if.feature +68 -0
  108. data/spec/acceptance/block_mode/blocks/control/if_else.feature +78 -0
  109. data/spec/acceptance/block_mode/blocks/control/loop.feature +45 -0
  110. data/spec/acceptance/block_mode/blocks/control/next.feature +20 -0
  111. data/spec/acceptance/block_mode/blocks/control/redo.feature +20 -0
  112. data/spec/acceptance/block_mode/blocks/control/sleep.feature +41 -0
  113. data/spec/acceptance/block_mode/blocks/control/times.feature +72 -0
  114. data/spec/acceptance/block_mode/blocks/control/until.feature +68 -0
  115. data/spec/acceptance/block_mode/blocks/events/on_click.feature +75 -0
  116. data/spec/acceptance/block_mode/blocks/events/on_hit.feature +83 -0
  117. data/spec/acceptance/block_mode/blocks/events/on_key_push_or_down.feature +171 -0
  118. data/spec/acceptance/block_mode/blocks/events/on_start.feature +75 -0
  119. data/spec/acceptance/block_mode/blocks/hardware/init_hardware.feature +44 -0
  120. data/spec/acceptance/block_mode/blocks/hardware/led_off.feature +75 -0
  121. data/spec/acceptance/block_mode/blocks/hardware/led_on.feature +75 -0
  122. data/spec/acceptance/block_mode/blocks/hardware/on_sensor_change.feature +81 -0
  123. data/spec/acceptance/block_mode/blocks/hardware/rgb_led_off.feature +81 -0
  124. data/spec/acceptance/block_mode/blocks/hardware/rgb_led_on.feature +87 -0
  125. data/spec/acceptance/block_mode/blocks/hardware/sensor_value.feature +100 -0
  126. data/spec/acceptance/block_mode/blocks/looks/hide.feature +69 -0
  127. data/spec/acceptance/block_mode/blocks/looks/say.feature +106 -0
  128. data/spec/acceptance/block_mode/blocks/looks/show.feature +69 -0
  129. data/spec/acceptance/block_mode/blocks/looks/vanish.feature +69 -0
  130. data/spec/acceptance/block_mode/blocks/motion/change_x_by.feature +81 -0
  131. data/spec/acceptance/block_mode/blocks/motion/change_y_by.feature +81 -0
  132. data/spec/acceptance/block_mode/blocks/motion/move.feature +81 -0
  133. data/spec/acceptance/block_mode/blocks/motion/reach_wall.feature +98 -0
  134. data/spec/acceptance/block_mode/blocks/motion/rotate_left.feature +81 -0
  135. data/spec/acceptance/block_mode/blocks/motion/rotate_right.feature +81 -0
  136. data/spec/acceptance/block_mode/blocks/motion/self_angle.feature +92 -0
  137. data/spec/acceptance/block_mode/blocks/motion/self_x.feature +92 -0
  138. data/spec/acceptance/block_mode/blocks/motion/self_y.feature +92 -0
  139. data/spec/acceptance/block_mode/blocks/motion/set_angle.feature +81 -0
  140. data/spec/acceptance/block_mode/blocks/motion/set_x.feature +81 -0
  141. data/spec/acceptance/block_mode/blocks/motion/set_x_y.feature +95 -0
  142. data/spec/acceptance/block_mode/blocks/motion/set_y.feature +81 -0
  143. data/spec/acceptance/block_mode/blocks/motion/turn.feature +69 -0
  144. data/spec/acceptance/block_mode/blocks/motion/turn_if_reach_wall.feature +69 -0
  145. data/spec/acceptance/block_mode/blocks/sensing/character_property.feature +114 -0
  146. data/spec/acceptance/block_mode/blocks/sensing/hit.feature +110 -0
  147. data/spec/acceptance/block_mode/blocks/sensing/input_key_push_or_down.feature +91 -0
  148. data/spec/acceptance/block_mode/blocks/sensing/input_mouse_pos_x.feature +39 -0
  149. data/spec/acceptance/block_mode/blocks/sensing/input_mouse_pos_y.feature +39 -0
  150. data/spec/acceptance/block_mode/blocks/sensing/input_mouse_push_or_down.feature +91 -0
  151. data/spec/acceptance/block_mode/blocks/sensing/time_now.feature +43 -0
  152. data/spec/acceptance/block_mode/blocks/sound/play.feature +81 -0
  153. data/spec/acceptance/block_mode/demo.feature +49 -0
  154. data/spec/acceptance/{text_editor → ruby_mode}/base.feature +11 -2
  155. data/spec/acceptance/{standalone → ruby_mode}/check.feature +8 -9
  156. data/spec/acceptance/ruby_mode/download.feature +33 -0
  157. data/spec/acceptance/{text_editor → ruby_mode}/load.feature +13 -13
  158. data/spec/acceptance/standalone/run.feature +17 -0
  159. data/spec/acceptance/standalone/save.feature +6 -6
  160. data/spec/helpers/editor_helper_spec.rb +110 -10
  161. data/spec/javascripts/collections/character_set_spec.coffee +41 -0
  162. data/spec/javascripts/models/character_spec.coffee +146 -0
  163. data/spec/javascripts/models/scene_spec.coffee +15 -0
  164. data/spec/javascripts/spec_helper.js +29 -0
  165. data/spec/spec_helper.rb +3 -8
  166. data/spec/steps/block_mode_steps.rb +37 -0
  167. data/spec/steps/global_variable.rb +30 -6
  168. data/spec/steps/text_editor_steps.rb +20 -2
  169. data/spec/teaspoon_env.rb +46 -0
  170. data/vendor/assets/javascripts/blockly/blockly_compressed.js +992 -0
  171. data/vendor/assets/javascripts/blockly/blocks_compressed.js +129 -0
  172. data/vendor/assets/javascripts/blockly/msg/js/ja.js +377 -0
  173. data/vendor/assets/javascripts/jquery.blockUI.js +619 -0
  174. metadata +290 -23
  175. data/app/assets/javascripts/editor.js.coffee.erb +0 -137
  176. data/app/views/editor/index.html.erb +0 -22
  177. data/spec/acceptance/text_editor/check.feature +0 -29
  178. data/spec/acceptance/text_editor/save.feature +0 -34
  179. data/spec/support/assets.rb +0 -18
@@ -0,0 +1,69 @@
1
+ # encoding: utf-8
2
+ # language: ja
3
+ @javascript
4
+ 機能: motion_turn_if_reach_wall - 「もし端に着いたら、跳ね返る」ブロック
5
+ シナリオ: ブロックのみ配置する
6
+ 前提 "ブロック" タブを表示する
7
+
8
+ もし 次のブロックを配置する:
9
+ """
10
+ %block{:type => "motion_turn_if_reach_wall", :x => "0", :y => "0"}
11
+ """
12
+ かつ ブロックからソースコードを生成する
13
+
14
+ ならば テキストエディタのプログラムは "" であること
15
+
16
+ シナリオ: キャラクターとブロックを配置する
17
+ 前提 "ブロック" タブを表示する
18
+ かつ 次のキャラクターを追加する:
19
+ | name | costumes | x | y | angle |
20
+ | car1 | car1.png | 0 | 0 | 0 |
21
+
22
+ もし 次のブロックを配置する:
23
+ """
24
+ %block{:type => "character_new", :x => "21", :y => "15"}
25
+ %field{:name => "NAME"}<
26
+ car1
27
+ %statement{:name => "DO"}
28
+ %block{:type => "motion_turn_if_reach_wall", :x => "0", :y => "0"}
29
+ """
30
+ かつ ブロックからソースコードを生成する
31
+
32
+ ならば テキストエディタのプログラムは以下であること:
33
+ """
34
+ require "smalruby"
35
+
36
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
37
+ car1.turn_if_reach_wall
38
+
39
+ """
40
+
41
+ シナリオ: キャラクターとイベントとブロックを配置する
42
+ 前提 "ブロック" タブを表示する
43
+ かつ 次のキャラクターを追加する:
44
+ | name | costumes | x | y | angle |
45
+ | car1 | car1.png | 0 | 0 | 0 |
46
+
47
+ もし 次のブロックを配置する:
48
+ """
49
+ %block{:type => "character_new", :x => "21", :y => "15"}
50
+ %field{:name => "NAME"}<
51
+ car1
52
+ %statement{:name => "DO"}
53
+ %block{:type => "events_on_start"}
54
+ %statement{:name => "DO"}
55
+ %block{:type => "motion_turn_if_reach_wall", :x => "0", :y => "0"}
56
+ """
57
+ かつ ブロックからソースコードを生成する
58
+
59
+ ならば テキストエディタのプログラムは以下であること:
60
+ """
61
+ require "smalruby"
62
+
63
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
64
+
65
+ car1.on(:start) do
66
+ turn_if_reach_wall
67
+ end
68
+
69
+ """
@@ -0,0 +1,114 @@
1
+ # encoding: utf-8
2
+ # language: ja
3
+ @javascript
4
+ 機能: sensing_character_property - 「変数:[▼キャラクター]の[▼プロパティ]」ブロック
5
+ シナリオ: ブロックのみ配置する
6
+ 前提 "ブロック" タブを表示する
7
+ かつ 次のキャラクターを追加する:
8
+ | name | costumes | x | y | angle |
9
+ | car1 | car1.png | 0 | 0 | 0 |
10
+
11
+ もし 次のブロックを配置する:
12
+ """
13
+ %block{:type => "sensing_character_property", :x => "0", :y => "0"}
14
+ %field{:name => "CHAR"}<
15
+ car1
16
+ %field{:name => "PROPERTY"}<
17
+ x
18
+ """
19
+ かつ ブロックからソースコードを生成する
20
+
21
+ ならば テキストエディタのプログラムは "" であること
22
+
23
+ シナリオ: 文とブロックを配置する
24
+ 前提 "ブロック" タブを表示する
25
+ かつ 次のキャラクターを追加する:
26
+ | name | costumes | x | y | angle |
27
+ | car1 | car1.png | 0 | 0 | 0 |
28
+
29
+ もし 次のブロックを配置する:
30
+ """
31
+ %block{:type => "ruby_p", :x => "0", :y => "0", :inline => "true" }
32
+ %value{:name => "ARG"}
33
+ %block{:type => "sensing_character_property", :x => "0", :y => "0"}
34
+ %field{:name => "CHAR"}<
35
+ car1
36
+ %field{:name => "PROPERTY"}<
37
+ x
38
+ """
39
+ かつ ブロックからソースコードを生成する
40
+
41
+ ならば テキストエディタのプログラムは以下であること:
42
+ """
43
+ require "smalruby"
44
+
45
+ p("")
46
+
47
+ """
48
+
49
+ シナリオ: キャラクターと文とブロックを配置する
50
+ 前提 "ブロック" タブを表示する
51
+ かつ 次のキャラクターを追加する:
52
+ | name | costumes | x | y | angle |
53
+ | car1 | car1.png | 0 | 0 | 0 |
54
+
55
+ もし 次のブロックを配置する:
56
+ """
57
+ %block{:type => "character_new", :x => "21", :y => "15"}
58
+ %field{:name => "NAME"}<
59
+ car1
60
+ %statement{:name => "DO"}
61
+ %block{:type => "ruby_p", :x => "0", :y => "0", :inline => "true" }
62
+ %value{:name => "ARG"}
63
+ %block{:type => "sensing_character_property", :x => "0", :y => "0"}
64
+ %field{:name => "CHAR"}<
65
+ car1
66
+ %field{:name => "PROPERTY"}<
67
+ x
68
+ """
69
+ かつ ブロックからソースコードを生成する
70
+
71
+ ならば テキストエディタのプログラムは以下であること:
72
+ """
73
+ require "smalruby"
74
+
75
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
76
+ p(car1.x)
77
+
78
+ """
79
+
80
+ シナリオ: キャラクターとイベントと文とブロックを配置する
81
+ 前提 "ブロック" タブを表示する
82
+ かつ 次のキャラクターを追加する:
83
+ | name | costumes | x | y | angle |
84
+ | car1 | car1.png | 0 | 0 | 0 |
85
+
86
+ もし 次のブロックを配置する:
87
+ """
88
+ %block{:type => "character_new", :x => "21", :y => "15"}
89
+ %field{:name => "NAME"}<
90
+ car1
91
+ %statement{:name => "DO"}
92
+ %block{:type => "events_on_start"}
93
+ %statement{:name => "DO"}
94
+ %block{:type => "ruby_p", :x => "0", :y => "0", :inline => "true" }
95
+ %value{:name => "ARG"}
96
+ %block{:type => "sensing_character_property", :x => "0", :y => "0"}
97
+ %field{:name => "CHAR"}<
98
+ car1
99
+ %field{:name => "PROPERTY"}<
100
+ x
101
+ """
102
+ かつ ブロックからソースコードを生成する
103
+
104
+ ならば テキストエディタのプログラムは以下であること:
105
+ """
106
+ require "smalruby"
107
+
108
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
109
+
110
+ car1.on(:start) do
111
+ p(x)
112
+ end
113
+
114
+ """
@@ -0,0 +1,110 @@
1
+ # encoding: utf-8
2
+ # language: ja
3
+ @javascript
4
+ 機能: sensing_hit - 「条件:[▼キャラクター]に触れた」ブロック
5
+ シナリオ: ブロックのみ配置する
6
+ 前提 "ブロック" タブを表示する
7
+ かつ 次のキャラクターを追加する:
8
+ | name | costumes | x | y | angle |
9
+ | car1 | car1.png | 0 | 0 | 0 |
10
+ | car2 | car2.png | 0 | 0 | 0 |
11
+
12
+ もし 次のブロックを配置する:
13
+ """
14
+ %block{:type => "sensing_hit", :x => "0", :y => "0"}
15
+ %field{:name => "CHAR"}<
16
+ car2
17
+ """
18
+ かつ ブロックからソースコードを生成する
19
+
20
+ ならば テキストエディタのプログラムは "" であること
21
+
22
+ シナリオ: 文とブロックを配置する
23
+ 前提 "ブロック" タブを表示する
24
+ かつ 次のキャラクターを追加する:
25
+ | name | costumes | x | y | angle |
26
+ | car1 | car1.png | 0 | 0 | 0 |
27
+ | car2 | car2.png | 0 | 0 | 0 |
28
+
29
+ もし 次のブロックを配置する:
30
+ """
31
+ %block{:type => "ruby_p", :x => "0", :y => "0", :inline => "true" }
32
+ %value{:name => "ARG"}
33
+ %block{:type => "sensing_hit", :x => "0", :y => "0"}
34
+ %field{:name => "CHAR"}<
35
+ car2
36
+ """
37
+ かつ ブロックからソースコードを生成する
38
+
39
+ ならば テキストエディタのプログラムは以下であること:
40
+ """
41
+ require "smalruby"
42
+
43
+ p("")
44
+
45
+ """
46
+
47
+ シナリオ: キャラクターと文とブロックを配置する
48
+ 前提 "ブロック" タブを表示する
49
+ かつ 次のキャラクターを追加する:
50
+ | name | costumes | x | y | angle |
51
+ | car1 | car1.png | 0 | 0 | 0 |
52
+ | car2 | car2.png | 0 | 0 | 0 |
53
+
54
+ もし 次のブロックを配置する:
55
+ """
56
+ %block{:type => "character_new", :x => "21", :y => "15"}
57
+ %field{:name => "NAME"}<
58
+ car1
59
+ %statement{:name => "DO"}
60
+ %block{:type => "ruby_p", :x => "0", :y => "0", :inline => "true" }
61
+ %value{:name => "ARG"}
62
+ %block{:type => "sensing_hit", :x => "0", :y => "0"}
63
+ %field{:name => "CHAR"}<
64
+ car2
65
+ """
66
+ かつ ブロックからソースコードを生成する
67
+
68
+ ならば テキストエディタのプログラムは以下であること:
69
+ """
70
+ require "smalruby"
71
+
72
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
73
+ p(car1.hit?(car2))
74
+
75
+ """
76
+
77
+ シナリオ: キャラクターとイベントと文とブロックを配置する
78
+ 前提 "ブロック" タブを表示する
79
+ かつ 次のキャラクターを追加する:
80
+ | name | costumes | x | y | angle |
81
+ | car1 | car1.png | 0 | 0 | 0 |
82
+ | car2 | car2.png | 0 | 0 | 0 |
83
+
84
+ もし 次のブロックを配置する:
85
+ """
86
+ %block{:type => "character_new", :x => "21", :y => "15"}
87
+ %field{:name => "NAME"}<
88
+ car1
89
+ %statement{:name => "DO"}
90
+ %block{:type => "events_on_start"}
91
+ %statement{:name => "DO"}
92
+ %block{:type => "ruby_p", :x => "0", :y => "0", :inline => "true" }
93
+ %value{:name => "ARG"}
94
+ %block{:type => "sensing_hit", :x => "0", :y => "0"}
95
+ %field{:name => "CHAR"}<
96
+ car2
97
+ """
98
+ かつ ブロックからソースコードを生成する
99
+
100
+ ならば テキストエディタのプログラムは以下であること:
101
+ """
102
+ require "smalruby"
103
+
104
+ car1 = Character.new(costume: "car1.png", x: 0, y: 0, angle: 0)
105
+
106
+ car1.on(:start) do
107
+ p(hit?(car2))
108
+ end
109
+
110
+ """
@@ -0,0 +1,91 @@
1
+ # encoding: utf-8
2
+ # language: ja
3
+ @javascript
4
+ 機能: sensing_input_key_push_or_down - 「条件:キーボードの[▼キー]が[▼押された]」ブロック
5
+ シナリオ: [▼押された]ブロックのみ配置する
6
+ 前提 "ブロック" タブを表示する
7
+
8
+ もし 次のブロックを配置する:
9
+ """
10
+ %block{:type => "sensing_input_key_push_or_down", :x => "0", :y => "0"}
11
+ %field{:name => "KEY"}<
12
+ K_SPACE
13
+ %field{:name => "POD"}<
14
+ push
15
+ """
16
+ かつ ブロックからソースコードを生成する
17
+
18
+ ならば テキストエディタのプログラムは以下であること:
19
+ """
20
+ require "smalruby"
21
+
22
+ Input.key_push?(K_SPACE)
23
+
24
+ """
25
+
26
+ シナリオ: 文と[▼押された]ブロックを配置する
27
+ 前提 "ブロック" タブを表示する
28
+
29
+ もし 次のブロックを配置する:
30
+ """
31
+ %block{:type => "ruby_p", :x => "0", :y => "0", :inline => "true" }
32
+ %value{:name => "ARG"}
33
+ %block{:type => "sensing_input_key_push_or_down", :x => "0", :y => "0"}
34
+ %field{:name => "KEY"}<
35
+ K_SPACE
36
+ %field{:name => "POD"}<
37
+ push
38
+ """
39
+ かつ ブロックからソースコードを生成する
40
+
41
+ ならば テキストエディタのプログラムは以下であること:
42
+ """
43
+ require "smalruby"
44
+
45
+ p(Input.key_push?(K_SPACE))
46
+
47
+ """
48
+
49
+ シナリオ: [▼押され続けている]ブロックのみ配置する
50
+ 前提 "ブロック" タブを表示する
51
+
52
+ もし 次のブロックを配置する:
53
+ """
54
+ %block{:type => "sensing_input_key_push_or_down", :x => "0", :y => "0"}
55
+ %field{:name => "KEY"}<
56
+ K_SPACE
57
+ %field{:name => "POD"}<
58
+ down
59
+ """
60
+ かつ ブロックからソースコードを生成する
61
+
62
+ ならば テキストエディタのプログラムは以下であること:
63
+ """
64
+ require "smalruby"
65
+
66
+ Input.key_down?(K_SPACE)
67
+
68
+ """
69
+
70
+ シナリオ: 文と[▼押され続けている]ブロックを配置する
71
+ 前提 "ブロック" タブを表示する
72
+
73
+ もし 次のブロックを配置する:
74
+ """
75
+ %block{:type => "ruby_p", :x => "0", :y => "0", :inline => "true" }
76
+ %value{:name => "ARG"}
77
+ %block{:type => "sensing_input_key_push_or_down", :x => "0", :y => "0"}
78
+ %field{:name => "KEY"}<
79
+ K_SPACE
80
+ %field{:name => "POD"}<
81
+ down
82
+ """
83
+ かつ ブロックからソースコードを生成する
84
+
85
+ ならば テキストエディタのプログラムは以下であること:
86
+ """
87
+ require "smalruby"
88
+
89
+ p(Input.key_down?(K_SPACE))
90
+
91
+ """
@@ -0,0 +1,39 @@
1
+ # encoding: utf-8
2
+ # language: ja
3
+ @javascript
4
+ 機能: sensing_input_mouse_pos_x - 「変数:マウスのx座標」ブロック
5
+ シナリオ: ブロックのみ配置する
6
+ 前提 "ブロック" タブを表示する
7
+
8
+ もし 次のブロックを配置する:
9
+ """
10
+ %block{:type => "sensing_input_mouse_pos_x", :x => "0", :y => "0"}
11
+ """
12
+ かつ ブロックからソースコードを生成する
13
+
14
+ ならば テキストエディタのプログラムは以下であること:
15
+ """
16
+ require "smalruby"
17
+
18
+ Input.mouse_pos_x
19
+
20
+ """
21
+
22
+ シナリオ: 文とブロックを配置する
23
+ 前提 "ブロック" タブを表示する
24
+
25
+ もし 次のブロックを配置する:
26
+ """
27
+ %block{:type => "ruby_p", :x => "0", :y => "0", :inline => "true" }
28
+ %value{:name => "ARG"}
29
+ %block{:type => "sensing_input_mouse_pos_x"}
30
+ """
31
+ かつ ブロックからソースコードを生成する
32
+
33
+ ならば テキストエディタのプログラムは以下であること:
34
+ """
35
+ require "smalruby"
36
+
37
+ p(Input.mouse_pos_x)
38
+
39
+ """
@@ -0,0 +1,39 @@
1
+ # encoding: utf-8
2
+ # language: ja
3
+ @javascript
4
+ 機能: sensing_input_mouse_pos_y - 「変数:マウスのy座標」ブロック
5
+ シナリオ: ブロックのみ配置する
6
+ 前提 "ブロック" タブを表示する
7
+
8
+ もし 次のブロックを配置する:
9
+ """
10
+ %block{:type => "sensing_input_mouse_pos_y", :x => "0", :y => "0"}
11
+ """
12
+ かつ ブロックからソースコードを生成する
13
+
14
+ ならば テキストエディタのプログラムは以下であること:
15
+ """
16
+ require "smalruby"
17
+
18
+ Input.mouse_pos_y
19
+
20
+ """
21
+
22
+ シナリオ: 文とブロックを配置する
23
+ 前提 "ブロック" タブを表示する
24
+
25
+ もし 次のブロックを配置する:
26
+ """
27
+ %block{:type => "ruby_p", :x => "0", :y => "0", :inline => "true" }
28
+ %value{:name => "ARG"}
29
+ %block{:type => "sensing_input_mouse_pos_y"}
30
+ """
31
+ かつ ブロックからソースコードを生成する
32
+
33
+ ならば テキストエディタのプログラムは以下であること:
34
+ """
35
+ require "smalruby"
36
+
37
+ p(Input.mouse_pos_y)
38
+
39
+ """