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.
- checksums.yaml +4 -4
- data/README.md +32 -21
- metadata +18 -337
- data/CHANGELOG +0 -84
- data/Gemfile +0 -24
- data/Guardfile +0 -11
- data/Rakefile +0 -14
- data/app.yaml +0 -60
- data/benchmark/app_clear.rb +0 -21
- data/benchmark/clear.rb +0 -69
- data/benchmark/memory/text_dispose.rb +0 -9
- data/benchmark/para_creator.rb +0 -9
- data/benchmark/paras.rb +0 -52
- data/benchmark/urls.rb +0 -40
- data/bin/ruby-shoes +0 -6
- data/bin/shoes-guard +0 -8
- data/bin/shoes-stub +0 -59
- data/ext/install/Rakefile +0 -29
- data/ext/install/shoes.bat +0 -9
- data/lib/shoes.rb +0 -5
- data/lib/shoes/ui/cli.rb +0 -102
- data/lib/shoes/ui/help.rb +0 -535
- data/lib/shoes/ui/manual.rb +0 -6
- data/lib/shoes/version.rb +0 -3
- data/manifests/common.rb +0 -34
- data/manifests/shoes.rb +0 -44
- data/samples/Gemfile +0 -3
- data/samples/Gemfile.lock +0 -35
- data/samples/README +0 -97
- data/samples/boom.rb +0 -239
- data/samples/class-book-adjusted.rb +0 -45
- data/samples/class-book.rb +0 -43
- data/samples/class-book.yaml +0 -387
- data/samples/clicky.rb +0 -24
- data/samples/cy.png +0 -0
- data/samples/expert-definr.rb +0 -23
- data/samples/expert-funnies.rb +0 -60
- data/samples/expert-game-of-life-adjusted.rb +0 -249
- data/samples/expert-game-of-life.rb +0 -243
- data/samples/expert-irb-adjusted.rb +0 -110
- data/samples/expert-irb.rb +0 -112
- data/samples/expert-minesweeper-adjusted.rb +0 -272
- data/samples/expert-minesweeper.rb +0 -267
- data/samples/expert-othello-adjusted.rb +0 -325
- data/samples/expert-othello.rb +0 -318
- data/samples/expert-pong.rb +0 -62
- data/samples/expert-snake.rb +0 -78
- data/samples/expert-tankspank.rb +0 -385
- data/samples/flow.rb +0 -63
- data/samples/good-arc.rb +0 -45
- data/samples/good-clock.rb +0 -51
- data/samples/good-displace.rb +0 -98
- data/samples/good-follow.rb +0 -26
- data/samples/good-potato-chopping.rb +0 -22
- data/samples/good-reminder.rb +0 -174
- data/samples/good-vjot.rb +0 -58
- data/samples/gray.rb +0 -11
- data/samples/loogink.png +0 -0
- data/samples/nks_booklist.rb +0 -24
- data/samples/nks_breadsticks.rb +0 -7
- data/samples/nks_dancing_circle.rb +0 -13
- data/samples/nks_dictionary.rb +0 -23
- data/samples/nks_edit_box.rb +0 -4
- data/samples/nks_edit_line.rb +0 -6
- data/samples/nks_notes.rb +0 -16
- data/samples/nks_poem.rb +0 -22
- data/samples/nks_self.rb +0 -6
- data/samples/nks_text_sizes.rb +0 -10
- data/samples/nks_trurl.rb +0 -5
- data/samples/original-manual-adjusted.rb +0 -475
- data/samples/original-manual.rb +0 -472
- data/samples/packaging/package_me.rb +0 -6
- data/samples/potato_chopping/1258_s001.gif +0 -0
- data/samples/potato_chopping/1258_s002.gif +0 -0
- data/samples/potato_chopping/1258_s003.gif +0 -0
- data/samples/potato_chopping/1258_s004.gif +0 -0
- data/samples/potato_chopping/1258_s005.gif +0 -0
- data/samples/potato_chopping/1258_s006.gif +0 -0
- data/samples/potato_chopping/1258_s007.gif +0 -0
- data/samples/potato_chopping/1258_s008.gif +0 -0
- data/samples/potato_chopping/1258_s009.gif +0 -0
- data/samples/potato_chopping/1258_s010.gif +0 -0
- data/samples/potato_chopping/1258_s011.gif +0 -0
- data/samples/potato_chopping/1258_s012.gif +0 -0
- data/samples/potato_chopping/1258_s013.gif +0 -0
- data/samples/potato_chopping/1258_s014.gif +0 -0
- data/samples/potato_chopping/1258_s015.gif +0 -0
- data/samples/potato_chopping/1258_s016.gif +0 -0
- data/samples/potato_chopping/1258_s017.gif +0 -0
- data/samples/potato_chopping/1258_s018.gif +0 -0
- data/samples/potato_chopping/1258_s019.gif +0 -0
- data/samples/potato_chopping/1258_s020.gif +0 -0
- data/samples/potato_chopping/1258_s021.gif +0 -0
- data/samples/potato_chopping/1258_s022.gif +0 -0
- data/samples/potato_chopping/1258_s023.gif +0 -0
- data/samples/potato_chopping/1258_s024.gif +0 -0
- data/samples/potato_chopping/1258_s025.gif +0 -0
- data/samples/potato_chopping/1258_s026.gif +0 -0
- data/samples/potato_chopping/1258_s027.gif +0 -0
- data/samples/potato_chopping/1258_s028.gif +0 -0
- data/samples/potato_chopping/1258_s029.gif +0 -0
- data/samples/potato_chopping/1258_s030.gif +0 -0
- data/samples/potato_chopping/1258_s031.gif +0 -0
- data/samples/potato_chopping/1258_s032.gif +0 -0
- data/samples/potato_chopping/1258_s033.gif +0 -0
- data/samples/potato_chopping/1258_s034.gif +0 -0
- data/samples/potato_chopping/1258_s035.gif +0 -0
- data/samples/potato_chopping/1258_s036.gif +0 -0
- data/samples/potato_chopping/1258_s037.gif +0 -0
- data/samples/potato_chopping/1258_s038.gif +0 -0
- data/samples/potato_chopping/1258_s039.gif +0 -0
- data/samples/potato_chopping/1258_s040.gif +0 -0
- data/samples/potato_chopping/1258_s041.gif +0 -0
- data/samples/potato_chopping/1258_s042.gif +0 -0
- data/samples/potato_chopping/1258_s043.gif +0 -0
- data/samples/potato_chopping/1258_s044.gif +0 -0
- data/samples/potato_chopping/1258_s045.gif +0 -0
- data/samples/potato_chopping/1258_s046.gif +0 -0
- data/samples/potato_chopping/1258_s047.gif +0 -0
- data/samples/potato_chopping/1258_s048.gif +0 -0
- data/samples/potato_chopping/1258_s049.gif +0 -0
- data/samples/potato_chopping/1258_s050.gif +0 -0
- data/samples/potato_chopping/1258_s051.gif +0 -0
- data/samples/potato_chopping/1258_s052.gif +0 -0
- data/samples/potato_chopping/1258_s053.gif +0 -0
- data/samples/potato_chopping/1258_s054.gif +0 -0
- data/samples/potato_chopping/1258_s055.gif +0 -0
- data/samples/potato_chopping/1258_s056.gif +0 -0
- data/samples/potato_chopping/1258_s057.gif +0 -0
- data/samples/potato_chopping/1258_s058.gif +0 -0
- data/samples/potato_chopping/1258_s059.gif +0 -0
- data/samples/present.rb +0 -27
- data/samples/progress.rb +0 -10
- data/samples/sample1.rb +0 -30
- data/samples/sample12.rb +0 -21
- data/samples/sample13.rb +0 -13
- data/samples/sample14.rb +0 -64
- data/samples/sample15.rb +0 -18
- data/samples/sample16.rb +0 -10
- data/samples/sample17.rb +0 -10
- data/samples/sample2.rb +0 -14
- data/samples/sample21.rb +0 -5
- data/samples/sample23.rb +0 -8
- data/samples/sample24.rb +0 -21
- data/samples/sample27.rb +0 -18
- data/samples/sample3.rb +0 -14
- data/samples/sample31.rb +0 -22
- data/samples/sample34.rb +0 -27
- data/samples/sample35.rb +0 -32
- data/samples/sample37.rb +0 -8
- data/samples/sample4.rb +0 -7
- data/samples/sample42.rb +0 -14
- data/samples/sample45.rb +0 -11
- data/samples/sample56.rb +0 -10
- data/samples/sample6.rb +0 -9
- data/samples/sample7.rb +0 -3
- data/samples/sample8.rb +0 -7
- data/samples/sample9.rb +0 -10
- data/samples/simple-accordion.rb +0 -75
- data/samples/simple-anim-shapes.rb +0 -17
- data/samples/simple-anim-text.rb +0 -13
- data/samples/simple-animate.rb +0 -12
- data/samples/simple-arc.rb +0 -23
- data/samples/simple-bounce.rb +0 -24
- data/samples/simple-brightness-transitions.rb +0 -8
- data/samples/simple-button-animate.rb +0 -16
- data/samples/simple-calc-2.rb +0 -34
- data/samples/simple-calc.rb +0 -70
- data/samples/simple-color-selector.rb +0 -10
- data/samples/simple-color-transitions.rb +0 -11
- data/samples/simple-control-sizes.rb +0 -24
- data/samples/simple-curve.rb +0 -26
- data/samples/simple-dialogs-outside.rb +0 -12
- data/samples/simple-dialogs.rb +0 -32
- data/samples/simple-displace.rb +0 -15
- data/samples/simple-downloader.rb +0 -27
- data/samples/simple-draw.rb +0 -13
- data/samples/simple-editor.rb +0 -28
- data/samples/simple-face.rb +0 -14
- data/samples/simple-flow-wrap.rb +0 -11
- data/samples/simple-font.rb +0 -17
- data/samples/simple-form.rb +0 -29
- data/samples/simple-form.shy +0 -0
- data/samples/simple-fullscreen.rb +0 -4
- data/samples/simple-guess-game.rb +0 -28
- data/samples/simple-keypress.rb +0 -14
- data/samples/simple-manual.rb +0 -2
- data/samples/simple-mask.rb +0 -21
- data/samples/simple-menu.rb +0 -47
- data/samples/simple-mouse-follow.rb +0 -8
- data/samples/simple-move.rb +0 -13
- data/samples/simple-oval.rb +0 -3
- data/samples/simple-sample-executor.rb +0 -6
- data/samples/simple-shoes-intro.rb +0 -22
- data/samples/simple-slide.rb +0 -56
- data/samples/simple-sound.rb +0 -30
- data/samples/simple-sphere.rb +0 -28
- data/samples/simple-stripes.rb +0 -8
- data/samples/simple-tictactoe.rb +0 -238
- data/samples/simple-timer.rb +0 -15
- data/samples/simple-video.rb +0 -13
- data/samples/simple-visibility.rb +0 -11
- data/samples/simple-widget.rb +0 -9
- data/samples/sounds/102719__sarge4267__explosion.mp3 +0 -0
- data/samples/sounds/145622__andybrannan__train-fog-horn-long-wyomming.aiff +0 -0
- data/samples/sounds/46492__phreaksaccount__shields1.ogg +0 -0
- data/samples/sounds/61847__simon-rue__boink-v3.wav +0 -0
- data/samples/swt-raw.rb +0 -20
- data/samples/troll.rb +0 -22
- data/shoes.gemspec +0 -29
- data/snapshots/sample1.png +0 -0
- data/snapshots/sample10.png +0 -0
- data/snapshots/sample11.png +0 -0
- data/snapshots/sample12.png +0 -0
- data/snapshots/sample13.png +0 -0
- data/snapshots/sample14.png +0 -0
- data/snapshots/sample15.png +0 -0
- data/snapshots/sample16.png +0 -0
- data/snapshots/sample17.png +0 -0
- data/snapshots/sample18.png +0 -0
- data/snapshots/sample19.png +0 -0
- data/snapshots/sample2.png +0 -0
- data/snapshots/sample20.png +0 -0
- data/snapshots/sample21.png +0 -0
- data/snapshots/sample22.png +0 -0
- data/snapshots/sample23.png +0 -0
- data/snapshots/sample24.png +0 -0
- data/snapshots/sample27.png +0 -0
- data/snapshots/sample28.png +0 -0
- data/snapshots/sample29.png +0 -0
- data/snapshots/sample3.png +0 -0
- data/snapshots/sample30.png +0 -0
- data/snapshots/sample31.png +0 -0
- data/snapshots/sample34.png +0 -0
- data/snapshots/sample35.png +0 -0
- data/snapshots/sample36.png +0 -0
- data/snapshots/sample37.png +0 -0
- data/snapshots/sample4.png +0 -0
- data/snapshots/sample42.png +0 -0
- data/snapshots/sample44.png +0 -0
- data/snapshots/sample45.png +0 -0
- data/snapshots/sample46.png +0 -0
- data/snapshots/sample5.png +0 -0
- data/snapshots/sample56.png +0 -0
- data/snapshots/sample6.png +0 -0
- data/snapshots/sample7.png +0 -0
- data/snapshots/sample8.png +0 -0
- data/snapshots/sample9.png +0 -0
- data/snapshots/sample99.png +0 -0
- data/static/PKGBUILD +0 -47
- data/static/Shoes.icns +0 -0
- data/static/avatar.png +0 -0
- data/static/code_highlighter.js +0 -188
- data/static/code_highlighter_ruby.js +0 -26
- data/static/downloading.png +0 -0
- data/static/icon-debug.png +0 -0
- data/static/icon-error.png +0 -0
- data/static/icon-info.png +0 -0
- data/static/icon-warn.png +0 -0
- data/static/listbox_button1.png +0 -0
- data/static/listbox_button2.png +0 -0
- data/static/man-app.png +0 -0
- data/static/man-builds.png +0 -0
- data/static/man-builds1.png +0 -0
- data/static/man-editor-notepad.png +0 -0
- data/static/man-editor-osx.png +0 -0
- data/static/man-ele-background.png +0 -0
- data/static/man-ele-border.png +0 -0
- data/static/man-ele-button.png +0 -0
- data/static/man-ele-check.png +0 -0
- data/static/man-ele-editbox.png +0 -0
- data/static/man-ele-editline.png +0 -0
- data/static/man-ele-image.png +0 -0
- data/static/man-ele-listbox.png +0 -0
- data/static/man-ele-progress.png +0 -0
- data/static/man-ele-radio.png +0 -0
- data/static/man-ele-shape.png +0 -0
- data/static/man-ele-textblock.png +0 -0
- data/static/man-ele-video.png +0 -0
- data/static/man-intro-dmg.png +0 -0
- data/static/man-intro-exe.png +0 -0
- data/static/man-look-tiger.png +0 -0
- data/static/man-look-ubuntu.png +0 -0
- data/static/man-look-vista.png +0 -0
- data/static/man-run-osx.png +0 -0
- data/static/man-run-vista.png +0 -0
- data/static/man-run-xp.png +0 -0
- data/static/man-shot1.png +0 -0
- data/static/manual-en.txt +0 -3531
- data/static/manual-ja.txt +0 -2829
- data/static/manual.css +0 -184
- data/static/menu-corner1.png +0 -0
- data/static/menu-corner2.png +0 -0
- data/static/menu-gray.png +0 -0
- data/static/menu-left.png +0 -0
- data/static/menu-right.png +0 -0
- data/static/menu-top.png +0 -0
- data/static/shoes-dmg.jpg +0 -0
- data/static/shoes-icon-blue.png +0 -0
- data/static/shoes-icon-brown.png +0 -0
- data/static/shoes-icon.png +0 -0
- data/static/shoes-manual-apps.gif +0 -0
- data/static/shoes-manual-apps.png +0 -0
- data/static/shoes_main_window.png +0 -0
- data/static/stripe.png +0 -0
- data/static/tutor-back.png +0 -0
- data/tasks/changelog.rb +0 -92
- data/tasks/gem.rb +0 -38
- data/tasks/rspec.rb +0 -106
- data/tasks/sample.rb +0 -66
- data/tasks/yard.rb +0 -13
data/samples/simple-oval.rb
DELETED
|
@@ -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
|
data/samples/simple-slide.rb
DELETED
|
@@ -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
|
data/samples/simple-sound.rb
DELETED
|
@@ -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
|
data/samples/simple-sphere.rb
DELETED
|
@@ -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
|
data/samples/simple-stripes.rb
DELETED
data/samples/simple-tictactoe.rb
DELETED
|
@@ -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
|
data/samples/simple-timer.rb
DELETED
|
@@ -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
|
data/samples/simple-video.rb
DELETED
|
@@ -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
|