shoes 4.0.0.pre2 → 4.0.0.pre3

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.
Files changed (311) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +32 -21
  3. metadata +18 -337
  4. data/CHANGELOG +0 -84
  5. data/Gemfile +0 -24
  6. data/Guardfile +0 -11
  7. data/Rakefile +0 -14
  8. data/app.yaml +0 -60
  9. data/benchmark/app_clear.rb +0 -21
  10. data/benchmark/clear.rb +0 -69
  11. data/benchmark/memory/text_dispose.rb +0 -9
  12. data/benchmark/para_creator.rb +0 -9
  13. data/benchmark/paras.rb +0 -52
  14. data/benchmark/urls.rb +0 -40
  15. data/bin/ruby-shoes +0 -6
  16. data/bin/shoes-guard +0 -8
  17. data/bin/shoes-stub +0 -59
  18. data/ext/install/Rakefile +0 -29
  19. data/ext/install/shoes.bat +0 -9
  20. data/lib/shoes.rb +0 -5
  21. data/lib/shoes/ui/cli.rb +0 -102
  22. data/lib/shoes/ui/help.rb +0 -535
  23. data/lib/shoes/ui/manual.rb +0 -6
  24. data/lib/shoes/version.rb +0 -3
  25. data/manifests/common.rb +0 -34
  26. data/manifests/shoes.rb +0 -44
  27. data/samples/Gemfile +0 -3
  28. data/samples/Gemfile.lock +0 -35
  29. data/samples/README +0 -97
  30. data/samples/boom.rb +0 -239
  31. data/samples/class-book-adjusted.rb +0 -45
  32. data/samples/class-book.rb +0 -43
  33. data/samples/class-book.yaml +0 -387
  34. data/samples/clicky.rb +0 -24
  35. data/samples/cy.png +0 -0
  36. data/samples/expert-definr.rb +0 -23
  37. data/samples/expert-funnies.rb +0 -60
  38. data/samples/expert-game-of-life-adjusted.rb +0 -249
  39. data/samples/expert-game-of-life.rb +0 -243
  40. data/samples/expert-irb-adjusted.rb +0 -110
  41. data/samples/expert-irb.rb +0 -112
  42. data/samples/expert-minesweeper-adjusted.rb +0 -272
  43. data/samples/expert-minesweeper.rb +0 -267
  44. data/samples/expert-othello-adjusted.rb +0 -325
  45. data/samples/expert-othello.rb +0 -318
  46. data/samples/expert-pong.rb +0 -62
  47. data/samples/expert-snake.rb +0 -78
  48. data/samples/expert-tankspank.rb +0 -385
  49. data/samples/flow.rb +0 -63
  50. data/samples/good-arc.rb +0 -45
  51. data/samples/good-clock.rb +0 -51
  52. data/samples/good-displace.rb +0 -98
  53. data/samples/good-follow.rb +0 -26
  54. data/samples/good-potato-chopping.rb +0 -22
  55. data/samples/good-reminder.rb +0 -174
  56. data/samples/good-vjot.rb +0 -58
  57. data/samples/gray.rb +0 -11
  58. data/samples/loogink.png +0 -0
  59. data/samples/nks_booklist.rb +0 -24
  60. data/samples/nks_breadsticks.rb +0 -7
  61. data/samples/nks_dancing_circle.rb +0 -13
  62. data/samples/nks_dictionary.rb +0 -23
  63. data/samples/nks_edit_box.rb +0 -4
  64. data/samples/nks_edit_line.rb +0 -6
  65. data/samples/nks_notes.rb +0 -16
  66. data/samples/nks_poem.rb +0 -22
  67. data/samples/nks_self.rb +0 -6
  68. data/samples/nks_text_sizes.rb +0 -10
  69. data/samples/nks_trurl.rb +0 -5
  70. data/samples/original-manual-adjusted.rb +0 -475
  71. data/samples/original-manual.rb +0 -472
  72. data/samples/packaging/package_me.rb +0 -6
  73. data/samples/potato_chopping/1258_s001.gif +0 -0
  74. data/samples/potato_chopping/1258_s002.gif +0 -0
  75. data/samples/potato_chopping/1258_s003.gif +0 -0
  76. data/samples/potato_chopping/1258_s004.gif +0 -0
  77. data/samples/potato_chopping/1258_s005.gif +0 -0
  78. data/samples/potato_chopping/1258_s006.gif +0 -0
  79. data/samples/potato_chopping/1258_s007.gif +0 -0
  80. data/samples/potato_chopping/1258_s008.gif +0 -0
  81. data/samples/potato_chopping/1258_s009.gif +0 -0
  82. data/samples/potato_chopping/1258_s010.gif +0 -0
  83. data/samples/potato_chopping/1258_s011.gif +0 -0
  84. data/samples/potato_chopping/1258_s012.gif +0 -0
  85. data/samples/potato_chopping/1258_s013.gif +0 -0
  86. data/samples/potato_chopping/1258_s014.gif +0 -0
  87. data/samples/potato_chopping/1258_s015.gif +0 -0
  88. data/samples/potato_chopping/1258_s016.gif +0 -0
  89. data/samples/potato_chopping/1258_s017.gif +0 -0
  90. data/samples/potato_chopping/1258_s018.gif +0 -0
  91. data/samples/potato_chopping/1258_s019.gif +0 -0
  92. data/samples/potato_chopping/1258_s020.gif +0 -0
  93. data/samples/potato_chopping/1258_s021.gif +0 -0
  94. data/samples/potato_chopping/1258_s022.gif +0 -0
  95. data/samples/potato_chopping/1258_s023.gif +0 -0
  96. data/samples/potato_chopping/1258_s024.gif +0 -0
  97. data/samples/potato_chopping/1258_s025.gif +0 -0
  98. data/samples/potato_chopping/1258_s026.gif +0 -0
  99. data/samples/potato_chopping/1258_s027.gif +0 -0
  100. data/samples/potato_chopping/1258_s028.gif +0 -0
  101. data/samples/potato_chopping/1258_s029.gif +0 -0
  102. data/samples/potato_chopping/1258_s030.gif +0 -0
  103. data/samples/potato_chopping/1258_s031.gif +0 -0
  104. data/samples/potato_chopping/1258_s032.gif +0 -0
  105. data/samples/potato_chopping/1258_s033.gif +0 -0
  106. data/samples/potato_chopping/1258_s034.gif +0 -0
  107. data/samples/potato_chopping/1258_s035.gif +0 -0
  108. data/samples/potato_chopping/1258_s036.gif +0 -0
  109. data/samples/potato_chopping/1258_s037.gif +0 -0
  110. data/samples/potato_chopping/1258_s038.gif +0 -0
  111. data/samples/potato_chopping/1258_s039.gif +0 -0
  112. data/samples/potato_chopping/1258_s040.gif +0 -0
  113. data/samples/potato_chopping/1258_s041.gif +0 -0
  114. data/samples/potato_chopping/1258_s042.gif +0 -0
  115. data/samples/potato_chopping/1258_s043.gif +0 -0
  116. data/samples/potato_chopping/1258_s044.gif +0 -0
  117. data/samples/potato_chopping/1258_s045.gif +0 -0
  118. data/samples/potato_chopping/1258_s046.gif +0 -0
  119. data/samples/potato_chopping/1258_s047.gif +0 -0
  120. data/samples/potato_chopping/1258_s048.gif +0 -0
  121. data/samples/potato_chopping/1258_s049.gif +0 -0
  122. data/samples/potato_chopping/1258_s050.gif +0 -0
  123. data/samples/potato_chopping/1258_s051.gif +0 -0
  124. data/samples/potato_chopping/1258_s052.gif +0 -0
  125. data/samples/potato_chopping/1258_s053.gif +0 -0
  126. data/samples/potato_chopping/1258_s054.gif +0 -0
  127. data/samples/potato_chopping/1258_s055.gif +0 -0
  128. data/samples/potato_chopping/1258_s056.gif +0 -0
  129. data/samples/potato_chopping/1258_s057.gif +0 -0
  130. data/samples/potato_chopping/1258_s058.gif +0 -0
  131. data/samples/potato_chopping/1258_s059.gif +0 -0
  132. data/samples/present.rb +0 -27
  133. data/samples/progress.rb +0 -10
  134. data/samples/sample1.rb +0 -30
  135. data/samples/sample12.rb +0 -21
  136. data/samples/sample13.rb +0 -13
  137. data/samples/sample14.rb +0 -64
  138. data/samples/sample15.rb +0 -18
  139. data/samples/sample16.rb +0 -10
  140. data/samples/sample17.rb +0 -10
  141. data/samples/sample2.rb +0 -14
  142. data/samples/sample21.rb +0 -5
  143. data/samples/sample23.rb +0 -8
  144. data/samples/sample24.rb +0 -21
  145. data/samples/sample27.rb +0 -18
  146. data/samples/sample3.rb +0 -14
  147. data/samples/sample31.rb +0 -22
  148. data/samples/sample34.rb +0 -27
  149. data/samples/sample35.rb +0 -32
  150. data/samples/sample37.rb +0 -8
  151. data/samples/sample4.rb +0 -7
  152. data/samples/sample42.rb +0 -14
  153. data/samples/sample45.rb +0 -11
  154. data/samples/sample56.rb +0 -10
  155. data/samples/sample6.rb +0 -9
  156. data/samples/sample7.rb +0 -3
  157. data/samples/sample8.rb +0 -7
  158. data/samples/sample9.rb +0 -10
  159. data/samples/simple-accordion.rb +0 -75
  160. data/samples/simple-anim-shapes.rb +0 -17
  161. data/samples/simple-anim-text.rb +0 -13
  162. data/samples/simple-animate.rb +0 -12
  163. data/samples/simple-arc.rb +0 -23
  164. data/samples/simple-bounce.rb +0 -24
  165. data/samples/simple-brightness-transitions.rb +0 -8
  166. data/samples/simple-button-animate.rb +0 -16
  167. data/samples/simple-calc-2.rb +0 -34
  168. data/samples/simple-calc.rb +0 -70
  169. data/samples/simple-color-selector.rb +0 -10
  170. data/samples/simple-color-transitions.rb +0 -11
  171. data/samples/simple-control-sizes.rb +0 -24
  172. data/samples/simple-curve.rb +0 -26
  173. data/samples/simple-dialogs-outside.rb +0 -12
  174. data/samples/simple-dialogs.rb +0 -32
  175. data/samples/simple-displace.rb +0 -15
  176. data/samples/simple-downloader.rb +0 -27
  177. data/samples/simple-draw.rb +0 -13
  178. data/samples/simple-editor.rb +0 -28
  179. data/samples/simple-face.rb +0 -14
  180. data/samples/simple-flow-wrap.rb +0 -11
  181. data/samples/simple-font.rb +0 -17
  182. data/samples/simple-form.rb +0 -29
  183. data/samples/simple-form.shy +0 -0
  184. data/samples/simple-fullscreen.rb +0 -4
  185. data/samples/simple-guess-game.rb +0 -28
  186. data/samples/simple-keypress.rb +0 -14
  187. data/samples/simple-manual.rb +0 -2
  188. data/samples/simple-mask.rb +0 -21
  189. data/samples/simple-menu.rb +0 -47
  190. data/samples/simple-mouse-follow.rb +0 -8
  191. data/samples/simple-move.rb +0 -13
  192. data/samples/simple-oval.rb +0 -3
  193. data/samples/simple-sample-executor.rb +0 -6
  194. data/samples/simple-shoes-intro.rb +0 -22
  195. data/samples/simple-slide.rb +0 -56
  196. data/samples/simple-sound.rb +0 -30
  197. data/samples/simple-sphere.rb +0 -28
  198. data/samples/simple-stripes.rb +0 -8
  199. data/samples/simple-tictactoe.rb +0 -238
  200. data/samples/simple-timer.rb +0 -15
  201. data/samples/simple-video.rb +0 -13
  202. data/samples/simple-visibility.rb +0 -11
  203. data/samples/simple-widget.rb +0 -9
  204. data/samples/sounds/102719__sarge4267__explosion.mp3 +0 -0
  205. data/samples/sounds/145622__andybrannan__train-fog-horn-long-wyomming.aiff +0 -0
  206. data/samples/sounds/46492__phreaksaccount__shields1.ogg +0 -0
  207. data/samples/sounds/61847__simon-rue__boink-v3.wav +0 -0
  208. data/samples/swt-raw.rb +0 -20
  209. data/samples/troll.rb +0 -22
  210. data/shoes.gemspec +0 -29
  211. data/snapshots/sample1.png +0 -0
  212. data/snapshots/sample10.png +0 -0
  213. data/snapshots/sample11.png +0 -0
  214. data/snapshots/sample12.png +0 -0
  215. data/snapshots/sample13.png +0 -0
  216. data/snapshots/sample14.png +0 -0
  217. data/snapshots/sample15.png +0 -0
  218. data/snapshots/sample16.png +0 -0
  219. data/snapshots/sample17.png +0 -0
  220. data/snapshots/sample18.png +0 -0
  221. data/snapshots/sample19.png +0 -0
  222. data/snapshots/sample2.png +0 -0
  223. data/snapshots/sample20.png +0 -0
  224. data/snapshots/sample21.png +0 -0
  225. data/snapshots/sample22.png +0 -0
  226. data/snapshots/sample23.png +0 -0
  227. data/snapshots/sample24.png +0 -0
  228. data/snapshots/sample27.png +0 -0
  229. data/snapshots/sample28.png +0 -0
  230. data/snapshots/sample29.png +0 -0
  231. data/snapshots/sample3.png +0 -0
  232. data/snapshots/sample30.png +0 -0
  233. data/snapshots/sample31.png +0 -0
  234. data/snapshots/sample34.png +0 -0
  235. data/snapshots/sample35.png +0 -0
  236. data/snapshots/sample36.png +0 -0
  237. data/snapshots/sample37.png +0 -0
  238. data/snapshots/sample4.png +0 -0
  239. data/snapshots/sample42.png +0 -0
  240. data/snapshots/sample44.png +0 -0
  241. data/snapshots/sample45.png +0 -0
  242. data/snapshots/sample46.png +0 -0
  243. data/snapshots/sample5.png +0 -0
  244. data/snapshots/sample56.png +0 -0
  245. data/snapshots/sample6.png +0 -0
  246. data/snapshots/sample7.png +0 -0
  247. data/snapshots/sample8.png +0 -0
  248. data/snapshots/sample9.png +0 -0
  249. data/snapshots/sample99.png +0 -0
  250. data/static/PKGBUILD +0 -47
  251. data/static/Shoes.icns +0 -0
  252. data/static/avatar.png +0 -0
  253. data/static/code_highlighter.js +0 -188
  254. data/static/code_highlighter_ruby.js +0 -26
  255. data/static/downloading.png +0 -0
  256. data/static/icon-debug.png +0 -0
  257. data/static/icon-error.png +0 -0
  258. data/static/icon-info.png +0 -0
  259. data/static/icon-warn.png +0 -0
  260. data/static/listbox_button1.png +0 -0
  261. data/static/listbox_button2.png +0 -0
  262. data/static/man-app.png +0 -0
  263. data/static/man-builds.png +0 -0
  264. data/static/man-builds1.png +0 -0
  265. data/static/man-editor-notepad.png +0 -0
  266. data/static/man-editor-osx.png +0 -0
  267. data/static/man-ele-background.png +0 -0
  268. data/static/man-ele-border.png +0 -0
  269. data/static/man-ele-button.png +0 -0
  270. data/static/man-ele-check.png +0 -0
  271. data/static/man-ele-editbox.png +0 -0
  272. data/static/man-ele-editline.png +0 -0
  273. data/static/man-ele-image.png +0 -0
  274. data/static/man-ele-listbox.png +0 -0
  275. data/static/man-ele-progress.png +0 -0
  276. data/static/man-ele-radio.png +0 -0
  277. data/static/man-ele-shape.png +0 -0
  278. data/static/man-ele-textblock.png +0 -0
  279. data/static/man-ele-video.png +0 -0
  280. data/static/man-intro-dmg.png +0 -0
  281. data/static/man-intro-exe.png +0 -0
  282. data/static/man-look-tiger.png +0 -0
  283. data/static/man-look-ubuntu.png +0 -0
  284. data/static/man-look-vista.png +0 -0
  285. data/static/man-run-osx.png +0 -0
  286. data/static/man-run-vista.png +0 -0
  287. data/static/man-run-xp.png +0 -0
  288. data/static/man-shot1.png +0 -0
  289. data/static/manual-en.txt +0 -3531
  290. data/static/manual-ja.txt +0 -2829
  291. data/static/manual.css +0 -184
  292. data/static/menu-corner1.png +0 -0
  293. data/static/menu-corner2.png +0 -0
  294. data/static/menu-gray.png +0 -0
  295. data/static/menu-left.png +0 -0
  296. data/static/menu-right.png +0 -0
  297. data/static/menu-top.png +0 -0
  298. data/static/shoes-dmg.jpg +0 -0
  299. data/static/shoes-icon-blue.png +0 -0
  300. data/static/shoes-icon-brown.png +0 -0
  301. data/static/shoes-icon.png +0 -0
  302. data/static/shoes-manual-apps.gif +0 -0
  303. data/static/shoes-manual-apps.png +0 -0
  304. data/static/shoes_main_window.png +0 -0
  305. data/static/stripe.png +0 -0
  306. data/static/tutor-back.png +0 -0
  307. data/tasks/changelog.rb +0 -92
  308. data/tasks/gem.rb +0 -38
  309. data/tasks/rspec.rb +0 -106
  310. data/tasks/sample.rb +0 -66
  311. data/tasks/yard.rb +0 -13
@@ -1,3 +0,0 @@
1
- Shoes.app do
2
- oval 100, 100, 100
3
- end
@@ -1,6 +0,0 @@
1
- Shoes.app width: 450, height: 32 do
2
- 4.times do |i|
3
- i+=1
4
- button("sample#{i}"){ load "samples/sample#{i}.rb" }
5
- end
6
- end
@@ -1,22 +0,0 @@
1
- Shoes.app width: 700, height: 600 do
2
- title "Shoes is a ", link("tiny"){alert "Cool!"}, " graphics toolkit. "
3
-
4
- flow width: 0.4 do
5
- image File.join(Shoes::DIR, 'static/shoes-icon.png') do
6
- alert "You're soooo quick!"
7
- end
8
- end
9
-
10
- flow width: 0.6 do
11
- tagline "It's simple and straightforward. ",
12
- link("Shoes "){alert "Yay!"},
13
- "was born to be easy! ",
14
- link("Shoes "){alert "Yay!"},
15
- "was born to be easy! ",
16
- link("Shoes "){alert "Yay!"},
17
- "was born to be easy! ",
18
- "Really, it was made for absolute beginners. "
19
- end
20
-
21
- subtitle link(strong em("There's ", fg(bg("really ", "really ", yellow), "#f00"), "nothing to it. ")){alert "Have fun!"}
22
- end
@@ -1,56 +0,0 @@
1
- #
2
- # mimicking the mootools demo for Fx.Slide
3
- # http://demos.mootools.net/Fx.Slide
4
- #
5
- Shoes.app do
6
- def stop_anim
7
- @anim.stop
8
- @anim = nil
9
- end
10
-
11
- def slide_anim &blk
12
- stop_anim if @anim
13
- @anim = animate 30, &blk
14
- end
15
-
16
- def slide_out slot
17
- slide_anim do |i|
18
- slot.height = 150 - (i * 3)
19
- slot.contents[0].top = -i * 3
20
- if slot.height == 0
21
- stop_anim
22
- slot.hide
23
- end
24
- end
25
- end
26
-
27
- def slide_in slot
28
- slot.show
29
- slide_anim do |i|
30
- slot.height = i * 6
31
- slot.contents[0].top = slot.height - 150
32
- stop_anim if slot.height == 150
33
- end
34
- end
35
-
36
- background white
37
- stack margin: 10 do
38
- para link("slide out") { slide_out @lipsum }, " | ",
39
- link("slide in") { slide_in @lipsum }
40
- @lipsum = stack width: 1.0, height: 150 do
41
- stack do
42
- background "#ddd"
43
- border "#eee", strokewidth: 5
44
- para "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed " +
45
- "do eiusmod tempor incididunt ut labore et dolore magna " +
46
- "aliqua. Ut enim ad minim veniam, quis nostrud exercitation " +
47
- "ullamco laboris nisi ut aliquip ex ea commodo consequat. " +
48
- "Duis aute irure dolor in reprehenderit in voluptate velit " +
49
- "esse cillum dolore eu fugiat nulla pariatur. Excepteur sint " +
50
- "occaecat cupidatat non proident, sunt in culpa qui officia " +
51
- "deserunt mollit anim id est laborum.",
52
- margin: 10
53
- end
54
- end
55
- end
56
- end
@@ -1,30 +0,0 @@
1
- Shoes.app do
2
-
3
- boing = sound("./samples/sounds/61847__simon-rue__boink-v3.wav")
4
- fog_horn = sound("./samples/sounds/145622__andybrannan__train-fog-horn-long-wyomming.aiff")
5
- explosion = sound("./samples/sounds/102719__sarge4267__explosion.mp3")
6
- shields = sound("./samples/sounds/46492__phreaksaccount__shields1.ogg")
7
-
8
- # Set up three buttons
9
- button "Boing WAV (740ms)" do
10
- puts "Boing clicked"
11
- boing.play
12
- end
13
-
14
- @two = button "Fog Horn AIFF (18.667s)" do
15
- puts "Fog Horn clicked"
16
- fog_horn.play
17
- end
18
-
19
- button "Explosion MP3 (4.800s)" do
20
- puts "Explosion clicked"
21
- explosion.play
22
- end
23
-
24
- button "Shields UP! OGG (2.473s)" do
25
- puts "Shields clicked"
26
- shields.play
27
- end
28
-
29
-
30
- end
@@ -1,28 +0,0 @@
1
- Shoes.app width: 500, height: 500, resizable: false do
2
- image 400, 470, top: 30, left: 50 do
3
- nostroke
4
- fill "#127"
5
- image top: 230, left: 0 do
6
- oval 70, 130, 260, 40
7
- blur 30
8
- end
9
- oval 10, 10, 380, 380
10
- image top: 0, left: 0 do
11
- fill "#46D"
12
- oval 30, 30, 338, 338
13
- blur 10
14
- end
15
- fill gradient(rgb(1.0, 1.0, 1.0, 0.7), rgb(1.0, 1.0, 1.0, 0.0))
16
- oval 80, 14, 240, 176
17
- image top: 0, left: 0 do
18
- fill "#79F"
19
- oval 134, 134, 130, 130
20
- blur 40
21
- end
22
- image top: 150, left: 40, width: 320, height: 260 do
23
- fill gradient(rgb(0.7, 0.9, 1.0, 0.0), rgb(0.7, 0.9, 1.0, 0.6))
24
- oval 60, 60, 200, 136
25
- blur 20
26
- end
27
- end
28
- end
@@ -1,8 +0,0 @@
1
- Shoes.app do
2
- spacing = 20
3
-
4
- 50.times do |i|
5
- line(0, spacing * i, 1000, 1000 + (spacing * i))
6
- line(spacing * (i + 1), 0, 1000 + (spacing * (i + 1)), 1000)
7
- end
8
- end
@@ -1,238 +0,0 @@
1
- # Size module
2
- # Change these constants to change the size of the board.
3
- module SIZE
4
- PADDING = 10
5
- TIC_SIZE = 60
6
- B_RADIUS = 5
7
- WIDTH = HEIGHT = (PADDING * 4) + (TIC_SIZE * 5)
8
- end
9
-
10
- class Tic
11
- attr_reader :x, :y, :checked, :rect, :player
12
-
13
- def initialize(tic)
14
- @rect = tic[0]
15
- @x = tic[1]
16
- @y = tic[2]
17
- @player = false
18
- @checked = false
19
- end
20
-
21
- def check
22
- @checked = true
23
- end
24
-
25
- def reset
26
- @player = false
27
- @checked = false
28
- @rect.style fill: '#000000'
29
- end
30
-
31
- def player=(symbol)
32
- @player = symbol
33
- if symbol == 'X'
34
- @rect.style fill: '#00FFFF'
35
- else
36
- @rect.style fill: '#FFFF44'
37
- end
38
- end
39
-
40
- end
41
-
42
-
43
- # Mostly keeps track of the Player.
44
- # 'class Player' would imply two.
45
- class Game
46
-
47
- def initialize(player_label)
48
- @player = false
49
- @label = player_label
50
- end
51
-
52
- def restart
53
- @player = true and toggle_player # English syntax!
54
- end
55
-
56
- def toggle_player
57
- @player = !@player
58
- @label.text = player_turn
59
- end
60
-
61
- def player_symbol
62
- @player ? 'X' : 'O'
63
- end
64
-
65
- def player_color
66
- @player ? "Yellow" : "Blue"
67
- end
68
-
69
- def player_turn
70
- "#{player_color}'s Turn"
71
- end
72
-
73
- def player_win
74
- @player =! @player
75
- "#{player_color} won!"
76
- end
77
-
78
- end
79
-
80
-
81
- # Organizes the Tics and
82
- # checks for winning configurations
83
- class Board
84
- attr_reader :game
85
-
86
- def initialize(tics, player_label)
87
- @tics = []
88
- @over = false
89
- @game = Game.new player_label
90
-
91
- tics.each do |tic| # Each tic in this array is of the format: [rect, x, y]
92
- @tics << Tic.new(tic)
93
- end
94
-
95
- end
96
-
97
- # Actions for each of the tic's rectangle
98
- def set_tic_actions
99
- @tics.each do |tic|
100
- tic.rect.click do
101
- unless tic.checked or @over
102
- @game.toggle_player
103
- tic.player = @game.player_symbol
104
- tic.check
105
- if self.check_if_over
106
- show_screen(game.player_win)
107
- elsif self.full?
108
- show_screen("Cat's Game!")
109
- end
110
- end
111
- end
112
- end
113
- end
114
-
115
- def check_if_over
116
- (1..3).any? { |i| all_checked?(row(i)) || all_checked?(column(i)) } ||
117
- all_checked?(diagonal1) ||
118
- all_checked?(diagonal2)
119
- end
120
-
121
- # Takes an array and tells if each Tic has been checked by the same player
122
- def all_checked?(array)
123
- if array[0].checked
124
- return array[0].player == array[1].player && array[1].player == array[2].player
125
- else
126
- return false
127
- end
128
- end
129
-
130
-
131
- # In this case, the screen is the
132
- # end screen, including the transparent
133
- # black panel and its buttons.
134
- def set_screen(screen)
135
- @screen = screen
136
- end
137
-
138
- def clear_screen
139
- @screen.each do |item|
140
- item.hide
141
- end
142
- end
143
-
144
- def show_screen(title)
145
- @over = true
146
- @screen.each do |item|
147
- item.show
148
- end
149
- @screen[0].text = title
150
- end
151
-
152
- def restart
153
- clear_screen
154
- @over = false
155
- @tics.each do |tic|
156
- tic.reset
157
- end
158
- game.restart
159
- end
160
-
161
- def row(x)
162
- @tics.select { |tic| tic.x == x }
163
- end
164
-
165
- def column(y)
166
- @tics.select { |tic| tic.y == y }
167
- end
168
-
169
- def diagonal1
170
- tics = []
171
- (1..3).each do |i|
172
- tics.concat(@tics.select { |tic| tic.x == i && tic.y == i })
173
- end
174
- tics
175
- end
176
-
177
- def diagonal2
178
- tics = []
179
- (1..3).each do |i|
180
- tics.concat(@tics.select { |tic| tic.x == i && tic.y == (4 - i) })
181
- end
182
- tics
183
- end
184
-
185
- def full?
186
- @tics.select { |tic| tic.checked }.length == 9
187
- end
188
- end
189
-
190
-
191
- # Main GUI App
192
- Shoes.app width: SIZE::WIDTH, height: SIZE::HEIGHT, title: 'Tic Tac Toe' do
193
- background gradient(slategray, slateblue)
194
-
195
- stroke white
196
-
197
- title 'Tic Tac Toe', align: 'center', family: 'Lacuna', top: 10
198
-
199
- flow bottom: 10 do
200
- @player_label = para "Blue's Turn", size: 20, align: 'center'
201
- end
202
-
203
- stroke black
204
-
205
- # The making of the Tic rectangles, along with a record of their coordinates.
206
- tics = []
207
- (1..3).each do |i|
208
- (1..3).each do |j|
209
- rectangle = rect((SIZE::PADDING + SIZE::TIC_SIZE) * i, (SIZE::PADDING + SIZE::TIC_SIZE) * j, SIZE::TIC_SIZE, SIZE::TIC_SIZE, SIZE::B_RADIUS)
210
- tics << [rectangle, i, j]
211
- end
212
- end
213
-
214
-
215
- stroke black
216
-
217
- board = Board.new(tics, @player_label) # player_label is passed on to the game.
218
-
219
- board.set_tic_actions
220
-
221
- # End Screen
222
- black_screen = rect 0,0,SIZE::WIDTH,SIZE::WIDTH, fill: app.rgb(0,0,0,0.5)
223
- flow align: 'center' do
224
- # Positioned oddly because 'align: "center"' appears not to work on buttons
225
- @quit_button = button 'Quit', top: 174, left: (SIZE::WIDTH/2 - 34) do
226
- exit
227
- end
228
- # Positioned oddly because 'align: "center"' appears not to work on buttons
229
- @restart_button = button 'Restart', top: 140, align: 'center', left: (SIZE::WIDTH/2 - 43) do
230
- board.restart
231
- end
232
- end
233
- alert_title = title "Cat's Game!", stroke: white, top: 90, align: 'center', size: 34
234
- exit_screen = [alert_title, black_screen, @quit_button, @restart_button]
235
-
236
- board.set_screen(exit_screen) # Passes pre-made gui on for later use
237
- board.clear_screen # Clears it to begin with
238
- end
@@ -1,15 +0,0 @@
1
- Shoes.app height: 150, width: 250 do
2
- background rgb(240, 250, 208)
3
- stack margin: 10 do
4
- button "Start" do
5
- @time = Time.now
6
- @label.replace "Stop watch started at #@time"
7
- end
8
-
9
- button "Stop" do
10
- @label.replace "Stopped, ", strong("#{Time.now - @time}"), " seconds elapsed."
11
- end
12
-
13
- @label = para "Press ", strong("start"), " to begin timing."
14
- end
15
- end
@@ -1,13 +0,0 @@
1
- Shoes.app width: 408, height: 346, resizable: false do
2
- background "#eee"
3
- stack margin: 4 do
4
- @vid = video "http://www.rin-shun.com/shoes/AdventureTimewithFinnandJakeFinnTime.mp4"
5
- end
6
- para "controls: ",
7
- link("play") { @vid.play }, ", ",
8
- link("pause") { @vid.pause }, ", ",
9
- link("stop") { @vid.stop }, ", ",
10
- link("hide") { @vid.hide }, ", ",
11
- link("show") { @vid.show }, ", ",
12
- link("+5 sec") { @vid.time += 5000 }
13
- end
@@ -1,11 +0,0 @@
1
- Shoes.app do
2
- slot = stack do
3
- background lightsteelblue
4
- para 'Some content'
5
- button 'Hello' do alert 'hi there' end
6
- end
7
-
8
- button 'Show' do slot.show end
9
- button 'Hide' do slot.hide end
10
- button 'Toggle' do slot.toggle end
11
- end