bashrw_ttt 0.1.0

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 (130) hide show
  1. data/bin/play.rb +10 -0
  2. data/lib/ttt/ai.rb +33 -0
  3. data/lib/ttt/ai_easy.rb +17 -0
  4. data/lib/ttt/ai_hard.rb +21 -0
  5. data/lib/ttt/ai_medium.rb +21 -0
  6. data/lib/ttt/ai_medium_back.rb +58 -0
  7. data/lib/ttt/board.rb +37 -0
  8. data/lib/ttt/config_helper.rb +53 -0
  9. data/lib/ttt/config_options.rb +27 -0
  10. data/lib/ttt/context.rb +214 -0
  11. data/lib/ttt/four_by_four.rb +62 -0
  12. data/lib/ttt/game.rb +94 -0
  13. data/lib/ttt/game_history.rb +37 -0
  14. data/lib/ttt/game_interactor.rb +126 -0
  15. data/lib/ttt/human.rb +12 -0
  16. data/lib/ttt/interfaces/cli/lib/cli/board_selection.rb +34 -0
  17. data/lib/ttt/interfaces/cli/lib/cli/cli_game.rb +186 -0
  18. data/lib/ttt/interfaces/cli/lib/cli/cli_presenter.rb +216 -0
  19. data/lib/ttt/interfaces/cli/lib/cli/clio.rb +17 -0
  20. data/lib/ttt/interfaces/cli/lib/cli/play_again.rb +38 -0
  21. data/lib/ttt/interfaces/cli/lib/cli/player_selection.rb +43 -0
  22. data/lib/ttt/interfaces/cli/lib/cli/selection.rb +8 -0
  23. data/lib/ttt/interfaces/cli/lib/cli/walk_history.rb +48 -0
  24. data/lib/ttt/interfaces/cli/spec/cli/board_selection_spec.rb +29 -0
  25. data/lib/ttt/interfaces/cli/spec/cli/cli_game_spec.rb +376 -0
  26. data/lib/ttt/interfaces/cli/spec/cli/cli_presenter_spec.rb +147 -0
  27. data/lib/ttt/interfaces/cli/spec/cli/play_again_spec.rb +39 -0
  28. data/lib/ttt/interfaces/cli/spec/cli/player_selection_spec.rb +62 -0
  29. data/lib/ttt/interfaces/cli/spec/cli/walk_history_spec.rb +115 -0
  30. data/lib/ttt/interfaces/cli/spec/spec_helper.rb +14 -0
  31. data/lib/ttt/interfaces/limelight/four_by_four/props.rb +1 -0
  32. data/lib/ttt/interfaces/limelight/four_by_four/styles.rb +74 -0
  33. data/lib/ttt/interfaces/limelight/four_by_four_finished/props.rb +1 -0
  34. data/lib/ttt/interfaces/limelight/four_by_four_finished/styles.rb +74 -0
  35. data/lib/ttt/interfaces/limelight/game_list/players/load_button.rb +10 -0
  36. data/lib/ttt/interfaces/limelight/game_list/props.rb +17 -0
  37. data/lib/ttt/interfaces/limelight/game_list/styles.rb +8 -0
  38. data/lib/ttt/interfaces/limelight/main_menu/players/exit_ttt.rb +3 -0
  39. data/lib/ttt/interfaces/limelight/main_menu/players/load_game.rb +3 -0
  40. data/lib/ttt/interfaces/limelight/main_menu/players/new_game.rb +3 -0
  41. data/lib/ttt/interfaces/limelight/main_menu/props.rb +17 -0
  42. data/lib/ttt/interfaces/limelight/new_game/players/board_type.rb +1 -0
  43. data/lib/ttt/interfaces/limelight/new_game/players/new_game.rb +5 -0
  44. data/lib/ttt/interfaces/limelight/new_game/players/player_type.rb +1 -0
  45. data/lib/ttt/interfaces/limelight/new_game/players/setup_button.rb +21 -0
  46. data/lib/ttt/interfaces/limelight/new_game/props.rb +21 -0
  47. data/lib/ttt/interfaces/limelight/new_game/styles.rb +23 -0
  48. data/lib/ttt/interfaces/limelight/partials/board_partial.rb +14 -0
  49. data/lib/ttt/interfaces/limelight/partials/menu_button_partial.rb +5 -0
  50. data/lib/ttt/interfaces/limelight/partials/move_history_partial.rb +6 -0
  51. data/lib/ttt/interfaces/limelight/partials/title_history_partial.rb +10 -0
  52. data/lib/ttt/interfaces/limelight/players/board.rb +3 -0
  53. data/lib/ttt/interfaces/limelight/players/game.rb +4 -0
  54. data/lib/ttt/interfaces/limelight/players/generic_move_history.rb +5 -0
  55. data/lib/ttt/interfaces/limelight/players/generic_player.rb +8 -0
  56. data/lib/ttt/interfaces/limelight/players/left_button.rb +3 -0
  57. data/lib/ttt/interfaces/limelight/players/main_menu.rb +3 -0
  58. data/lib/ttt/interfaces/limelight/players/right_button.rb +3 -0
  59. data/lib/ttt/interfaces/limelight/playscripts/game_playscript.rb +169 -0
  60. data/lib/ttt/interfaces/limelight/production.rb +14 -0
  61. data/lib/ttt/interfaces/limelight/spec/game_playscript_spec.rb +218 -0
  62. data/lib/ttt/interfaces/limelight/spec/main_menu/main_menu_spec.rb +38 -0
  63. data/lib/ttt/interfaces/limelight/spec/new_game/new_game_spec.rb +45 -0
  64. data/lib/ttt/interfaces/limelight/spec/spec_helper.rb +8 -0
  65. data/lib/ttt/interfaces/limelight/stages.rb +6 -0
  66. data/lib/ttt/interfaces/limelight/styles.rb +119 -0
  67. data/lib/ttt/interfaces/limelight/three_by_three/props.rb +1 -0
  68. data/lib/ttt/interfaces/limelight/three_by_three/styles.rb +39 -0
  69. data/lib/ttt/interfaces/limelight/three_by_three_by_three/props.rb +1 -0
  70. data/lib/ttt/interfaces/limelight/three_by_three_by_three/styles.rb +119 -0
  71. data/lib/ttt/interfaces/limelight/three_by_three_by_three_finished/props.rb +1 -0
  72. data/lib/ttt/interfaces/limelight/three_by_three_by_three_finished/styles.rb +119 -0
  73. data/lib/ttt/interfaces/limelight/three_by_three_finished/props.rb +1 -0
  74. data/lib/ttt/interfaces/limelight/three_by_three_finished/styles.rb +39 -0
  75. data/lib/ttt/interfaces/rails/app/controllers/application_controller.rb +3 -0
  76. data/lib/ttt/interfaces/rails/app/controllers/ttt_games_controller.rb +86 -0
  77. data/lib/ttt/interfaces/rails/app/helpers/application_helper.rb +2 -0
  78. data/lib/ttt/interfaces/rails/app/models/ttt_game.rb +34 -0
  79. data/lib/ttt/interfaces/rails/app/presenters/web_game_presenter.rb +159 -0
  80. data/lib/ttt/interfaces/rails/autotest/discover.rb +1 -0
  81. data/lib/ttt/interfaces/rails/config/application.rb +67 -0
  82. data/lib/ttt/interfaces/rails/config/boot.rb +6 -0
  83. data/lib/ttt/interfaces/rails/config/environment.rb +5 -0
  84. data/lib/ttt/interfaces/rails/config/environments/development.rb +37 -0
  85. data/lib/ttt/interfaces/rails/config/environments/production.rb +67 -0
  86. data/lib/ttt/interfaces/rails/config/environments/test.rb +37 -0
  87. data/lib/ttt/interfaces/rails/config/initializers/backtrace_silencers.rb +7 -0
  88. data/lib/ttt/interfaces/rails/config/initializers/inflections.rb +15 -0
  89. data/lib/ttt/interfaces/rails/config/initializers/mime_types.rb +5 -0
  90. data/lib/ttt/interfaces/rails/config/initializers/secret_token.rb +7 -0
  91. data/lib/ttt/interfaces/rails/config/initializers/session_store.rb +8 -0
  92. data/lib/ttt/interfaces/rails/config/initializers/wrap_parameters.rb +14 -0
  93. data/lib/ttt/interfaces/rails/config/routes.rb +49 -0
  94. data/lib/ttt/interfaces/rails/db/schema.rb +28 -0
  95. data/lib/ttt/interfaces/rails/db/seeds.rb +7 -0
  96. data/lib/ttt/interfaces/rails/spec/controllers/ttt_games_controller_spec.rb +211 -0
  97. data/lib/ttt/interfaces/rails/spec/models/ttt_game_spec.rb +76 -0
  98. data/lib/ttt/interfaces/rails/spec/presenters/web_game_presenter_spec.rb +52 -0
  99. data/lib/ttt/interfaces/rails/spec/spec_helper.rb +13 -0
  100. data/lib/ttt/interfaces/web_interface/html_generator.rb +76 -0
  101. data/lib/ttt/interfaces/web_interface/web_game_presenter.rb +0 -0
  102. data/lib/ttt/minimax.rb +46 -0
  103. data/lib/ttt/move_history.rb +10 -0
  104. data/lib/ttt/move_traverser.rb +49 -0
  105. data/lib/ttt/player.rb +15 -0
  106. data/lib/ttt/riak_db.rb +53 -0
  107. data/lib/ttt/setup.rb +59 -0
  108. data/lib/ttt/three_by_three.rb +35 -0
  109. data/lib/ttt/three_by_three_by_three.rb +37 -0
  110. data/spec/spec_helper.rb +22 -0
  111. data/spec/ttt/ai_easy_spec.rb +15 -0
  112. data/spec/ttt/ai_hard_spec.rb +76 -0
  113. data/spec/ttt/ai_medium_spec.rb +65 -0
  114. data/spec/ttt/ai_spec.rb +50 -0
  115. data/spec/ttt/board_spec.rb +96 -0
  116. data/spec/ttt/config_helper_spec.rb +54 -0
  117. data/spec/ttt/context_spec.rb +398 -0
  118. data/spec/ttt/four_by_four_spec.rb +112 -0
  119. data/spec/ttt/game_history_spec.rb +41 -0
  120. data/spec/ttt/game_interactor_spec.rb +197 -0
  121. data/spec/ttt/game_spec.rb +246 -0
  122. data/spec/ttt/human_spec.rb +18 -0
  123. data/spec/ttt/move_history_spec.rb +13 -0
  124. data/spec/ttt/move_traverser_spec.rb +75 -0
  125. data/spec/ttt/player_spec.rb +13 -0
  126. data/spec/ttt/riak_db_spec.rb +64 -0
  127. data/spec/ttt/setup_spec.rb +63 -0
  128. data/spec/ttt/three_by_three_by_three_spec.rb +130 -0
  129. data/spec/ttt/three_by_three_spec.rb +110 -0
  130. metadata +238 -0
@@ -0,0 +1,14 @@
1
+ $:.unshift File.expand_path("../../../../", __FILE__)
2
+ $:.unshift File.dirname(__FILE__)
3
+
4
+ require 'rubygems'
5
+ require "playscripts/game_playscript"
6
+ require 'ttt/setup'
7
+ require 'ttt/context'
8
+
9
+ on_production_loaded do
10
+ backstage_pass :context
11
+ backstage_pass :game_id
12
+ backstage_pass :limelight_game
13
+ backstage_pass :move_index
14
+ end
@@ -0,0 +1,218 @@
1
+ require 'spec_helper'
2
+ require 'playscripts/game_playscript'
3
+ require 'rubygems'
4
+ require 'ttt/context'
5
+ require 'ttt/setup'
6
+
7
+ describe "GamePlayscript" do
8
+ let(:context) { TTT::Context.instance }
9
+
10
+ before(:each) do
11
+ context.setup = TTT::Setup
12
+ players = context.players
13
+ boards = context.boards
14
+ ai_game_id = context.create_game(players[1], players[1], boards[0])
15
+ game_id = context.create_game(players[0], players[0], boards[0])
16
+ production = stub(:context => context)
17
+ @ai_game_ps = GamePlayscript.new(:context => context, :game_id => ai_game_id, :production => production)
18
+ @game_ps = GamePlayscript.new(:context => context, :game_id => game_id, :production => production)
19
+ @game = @game_ps.context.get_game(@game_ps.game_id)
20
+ @ai_game = @ai_game_ps.context.get_game(@ai_game_ps.game_id)
21
+ @game_id = @game_ps.game_id
22
+ @ai_id = @ai_game_ps.game_id
23
+ end
24
+
25
+ def save_game(id, game)
26
+ context.save_game(id, game)
27
+ end
28
+
29
+ describe "#set_move" do
30
+ before(:each) do
31
+ @mock_move = double('move')
32
+ end
33
+
34
+ it "sets the player's move from a board square for squares 0 - 8" do
35
+ @mock_move.should_receive(:id).and_return("square1")
36
+ @game_ps.set_move(@mock_move)
37
+ @game_ps.move.should == 1
38
+ end
39
+
40
+ it "sets the player's move from a board square for squares 9 - 26" do
41
+ @mock_move.should_receive(:id).and_return("square22")
42
+ @game_ps.set_move(@mock_move)
43
+ @game_ps.move.should == 22
44
+ end
45
+ end
46
+
47
+ describe "#which_current_player?" do
48
+ it "returns 'Player 1' when it's player1's turn" do
49
+ @game_ps.which_current_player?.should == "Player 1"
50
+ end
51
+
52
+ it "returns 'Player 2' when it's player2's turn" do
53
+ @game.current_player = @game.player2
54
+ save_game(@game_id, @game)
55
+ @game_ps.which_current_player?.should == "Player 2"
56
+ end
57
+ end
58
+
59
+ describe "#finished?" do
60
+ it "returns true when the game board is full" do
61
+ @game.board.board = %w(a b c d e f g h i)
62
+ save_game(@game_id, @game)
63
+ @game_ps.finished?.should == true
64
+ end
65
+
66
+ it "returns false when the game board contains a blank space (means free square)" do
67
+ @game.board.board = Array.new(9, " ")
68
+ save_game(@game_id, @game)
69
+ @game_ps.finished?.should == false
70
+ end
71
+ end
72
+
73
+ describe "#not_finished?" do
74
+ it "returns true when the game is not finished" do
75
+ @game_ps.not_finished?.should == true
76
+ end
77
+
78
+ it "returns false when the game is finished" do
79
+ @game.board.board = [0,1,2,3,4,5,6,7,8]
80
+ save_game(@game_id, @game)
81
+ @game_ps.not_finished?.should == false
82
+ end
83
+ end
84
+
85
+ describe "#finished" do
86
+ it "returns true when the game is over" do
87
+ @game.board.board = ['x', 'o', 'x', 'o', 'x', 'o', 'x', 'o', 'x', 'o']
88
+ save_game(@game_id, @game)
89
+ @game_ps.finished?.should == true
90
+ end
91
+
92
+ it "returns false when the game isn't over yet" do
93
+ @game_ps.finished?.should == false
94
+ end
95
+ end
96
+
97
+ describe "#winner" do
98
+ before(:each) do
99
+ @game.board.board = ['x', 'x', 'x', '', '', '', '', '', '']
100
+ save_game(@game_id, @game)
101
+ end
102
+
103
+ it "displays `Player 1 is the winner` when player 1 wins" do
104
+ @game.current_player = @game.player2
105
+ save_game(@game_id, @game)
106
+ @game_ps.winner.should == "Player 1"
107
+ end
108
+
109
+ it "displays `Player 2 is the winner` when player 2 wins" do
110
+ @game_ps.winner.should == "Player 2"
111
+ end
112
+ end
113
+
114
+
115
+ describe "#winner?" do
116
+ it "returns true when the game has a winner" do
117
+ @game.board.board = ['x', 'x', 'x', '', '', '', '', '', '']
118
+ save_game(@game_id, @game)
119
+ @game_ps.winner?.should == true
120
+ end
121
+
122
+ it "returns false when the game does not have a winner" do
123
+ @game.board.board = ['y', 't', 'z', 'c', 'h', 'g', 'c', 'p', 'q']
124
+ save_game(@game_id, @game)
125
+ @game_ps.winner?.should == false
126
+ end
127
+ end
128
+
129
+ describe "#valid_move?" do
130
+ before(:each) do
131
+ @mock_move = double('move')
132
+ @mock_move.should_receive(:id).and_return("square1")
133
+ end
134
+
135
+ it "returns true when the move is valid" do
136
+ @game_ps.set_move(@mock_move)
137
+ @game_ps.valid_move?.should == true
138
+ end
139
+
140
+ it "returns flase when the move is invalid" do
141
+ @game.board.board = %w(a b c d e f g h i)
142
+ save_game(@game_id, @game)
143
+ @game_ps.set_move(@mock_move)
144
+ @game_ps.valid_move?.should == false
145
+ end
146
+ end
147
+
148
+ describe "#next_move_is_ai?" do
149
+ it "returns true when current player is an ai player" do
150
+ @ai_game_ps.next_move_is_ai?.should == true
151
+ end
152
+
153
+ it "returns false when the curent player is a human player" do
154
+ @game_ps.next_move_is_ai?.should == false
155
+ end
156
+ end
157
+
158
+ describe "#board" do
159
+ it "requests the board array from the game" do
160
+ @game_ps.board.should == @game.board.board
161
+ end
162
+ end
163
+
164
+ describe "#mark_move" do
165
+ it "sends a mark_move message to the game" do
166
+ @game_ps.should_receive(:move).and_return(1)
167
+ @game_ps.context.should_receive(:update_game).with(@game_id, 1, 'x')
168
+ @game_ps.mark_move
169
+ end
170
+ end
171
+
172
+ describe "#ai_move" do
173
+ it "sends a next_move message to the game indicating it's the computer player's turn" do
174
+ @game_ps.context.should_receive(:ai_move).with(@game_id)
175
+ @game_ps.ai_move
176
+ end
177
+ end
178
+
179
+ describe "#which_board" do
180
+ it "returns 'three_by_three' when it's a 3x3 board" do
181
+ @game_ps.which_board?.should == "three_by_three"
182
+ end
183
+
184
+ it "returns 'four_by_four' when it's a 4x4 board" do
185
+ @game.board = TTT::FourByFour.new
186
+ save_game(@game_id, @game)
187
+ @game_ps.which_board?.should == "four_by_four"
188
+ end
189
+
190
+ it "returns 'three_by_three_by_three' when it's a 3x3x3 board" do
191
+ @game.board = TTT::ThreeByThreeByThree.new
192
+ save_game(@game_id, @game)
193
+ @game_ps.which_board?.should == "three_by_three_by_three"
194
+ end
195
+ end
196
+
197
+ context "user wants to move through a previously played game's move history" do
198
+ before(:each) do
199
+ @game.record_move(0, 'x')
200
+ @game.mark_move(0, 'x')
201
+ @game.record_move(1, 'o')
202
+ @game.mark_move(1, 'o')
203
+ @game.record_move(4, 'x')
204
+ @game.mark_move(4, 'x')
205
+ @game.record_move(2, 'o')
206
+ @game.mark_move(2, 'o')
207
+ @game.record_move(8, 'x')
208
+ @game.mark_move(8, 'x')
209
+ save_game(@game_id, @game)
210
+ end
211
+
212
+ describe "#game_move_index" do
213
+ it "gets the number of moves made for a completed game" do
214
+ @game_ps.game_move_index.should == 5
215
+ end
216
+ end
217
+ end
218
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+ require 'ttt/setup'
3
+ require 'ttt/context'
4
+
5
+ describe "main menu scene" do
6
+
7
+ uses_limelight :scene => "main_menu", :hidden => true
8
+
9
+ it "has a 'new game' button" do
10
+ button = scene.find("new_game")
11
+ button.text.should == "New Game"
12
+ end
13
+
14
+ it "has a 'load game' button" do
15
+ button = scene.find("load_game")
16
+ button.text.should == "Load Game"
17
+ end
18
+
19
+ it "has a 'exit' button" do
20
+ button = scene.find("exit")
21
+ button.text.should == "Exit"
22
+ end
23
+
24
+ context "user clicks `Play Game`" do
25
+ xit "loads the 'new_game' scene" do
26
+ new_game_button = scene.find("new_game")
27
+ mouse.push new_game_button
28
+ current_scene.name.should == "new_game"
29
+ end
30
+ end
31
+
32
+ context "user clicks `Load Game`" do
33
+ xit "loads the 'load_game' scene" do
34
+ mouse.push scene.find("load_game")
35
+ current_scene.name.should == "LoadGame"
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+ require 'ttt/setup'
3
+ require 'ttt/context'
4
+
5
+ describe "new game scene" do
6
+
7
+ uses_limelight :scene => "new_game", :hidden => true
8
+
9
+ %w(player1 player2).each do |player_num|
10
+ it "has a #{player_num}" do
11
+ player = scene.find("#{player_num}")
12
+ player.should_not be_nil
13
+ player.drop_down.value.should == TTT::Setup.new.players.first
14
+ end
15
+ end
16
+
17
+ it "has a setup_button" do
18
+ scene.find("setup_button").should_not be_nil
19
+ scene.find("setup_button").text.should == "Start Game"
20
+ end
21
+
22
+ it "has a board list" do
23
+ scene.find("board").drop_down.value.should == TTT::Setup.new.boards.first
24
+ end
25
+
26
+ [1,2].each do |num|
27
+ it "finds the dropdown values for player#{num}" do
28
+ scene.find("player#{num}").text.should == "Human"
29
+ end
30
+ end
31
+
32
+ it "adds a context singleton to production" do
33
+ production.context.class.should == TTT::Context
34
+ end
35
+
36
+ context "when start game button is pressed" do
37
+ it "creates a new game" do
38
+ scene.find("player1").drop_down.value = "AI Medium"
39
+ scene.find("player2").drop_down.value = "AI Medium"
40
+ scene.find("board").drop_down.value = "3x3"
41
+ mouse.push scene.find("setup_button")
42
+ production.game_id.should_not == nil
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,8 @@
1
+ require 'rubygems'
2
+ require 'rspec'
3
+ require 'limelight/specs/spec_helper'
4
+
5
+ $PRODUCTION_PATH = File.expand_path(File.dirname(__FILE__) + "/../")
6
+
7
+ $:.unshift File.expand_path("../../../../../", __FILE__)
8
+ $:.unshift File.expand_path("../", __FILE__)
@@ -0,0 +1,6 @@
1
+ stage "default" do
2
+ default_scene "main_menu"
3
+ framed true
4
+ title "Tic Tac Toe"
5
+ size [1200, 800]
6
+ end
@@ -0,0 +1,119 @@
1
+ setup_list {
2
+ text_color :white
3
+ font_size 20
4
+ width "50%"
5
+ horizontal_alignment :right
6
+ vertical_alignment :top
7
+ right_margin 20
8
+ bottom_margin 20
9
+ }
10
+
11
+ type_list {
12
+ text_color :black
13
+ font_size 20
14
+ width "50%"
15
+ horizontal_alignment :left
16
+ left_margin 20
17
+ }
18
+
19
+ setup_button_row {
20
+ width "100%"
21
+ horizontal_alignment :center
22
+ }
23
+
24
+ row {
25
+ height "10%"
26
+ width "100%"
27
+ }
28
+
29
+ third {
30
+ width "33%"
31
+ }
32
+
33
+ half {
34
+ width "50%"
35
+ }
36
+
37
+ ttt {
38
+ background_color :gray
39
+ height 800
40
+ width 1200
41
+ }
42
+
43
+ title {
44
+ horizontal_alignment :center
45
+ top_margin 100
46
+ font_size 40
47
+ text_color :white
48
+ width "100%"
49
+ }
50
+
51
+ move_history {
52
+ float :on
53
+ text_color :white
54
+ font_size 15
55
+ x 1000
56
+ y 200
57
+ }
58
+
59
+ player_turn {
60
+ horizontal_alignment :center
61
+ text_color :white
62
+ font_size 30
63
+ top_margin 30
64
+ width "100%"
65
+ }
66
+
67
+ game_board_row {
68
+ width "100%"
69
+ top_margin 40
70
+ horizontal_alignment :center
71
+ }
72
+
73
+ menu_button_row {
74
+ width "100%"
75
+ horizontal_alignment :center
76
+ top_margin 40
77
+ }
78
+
79
+ squares {
80
+ width 310
81
+ }
82
+
83
+ square {
84
+ height 100
85
+ width 100
86
+ }
87
+
88
+ square_text {
89
+ width "100%"
90
+ height "100%"
91
+ text_color :white
92
+ font_size 40
93
+ horizontal_alignment :center
94
+ vertical_alignment :center
95
+ }
96
+
97
+ above_square {
98
+ bottom_border_width 5
99
+ }
100
+
101
+ left_of_square {
102
+ right_border_width 5
103
+ }
104
+
105
+ move_button_row {
106
+ float :on
107
+ x 472
108
+ y 720
109
+ background_color :gray
110
+ width "100%"
111
+ }
112
+
113
+ left_button {
114
+ horizontal_alignment :center
115
+ }
116
+
117
+ right_button {
118
+ horizontal_alignment :center
119
+ }