shoes 4.0.0.pre2 → 4.0.0.pre3

Sign up to get free protection for your applications and to get access to all the features.
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