Sha256: 8dca08df41611f27122b7e0dff1f672bf9109457618dbce4e8e36d8574f5c81b

Contents?: true

Size: 1.22 KB

Versions: 10

Compression:

Stored size: 1.22 KB

Contents

require_relative "tic_tac_toe/board"

class TicTacToe
  include Glimmer

  def initialize
    @tic_tac_toe_board = Board.new
    @shell = shell {
      text "Tic-Tac-Toe"
      composite {
        grid_layout 3, true
        (1..3).each { |row|
          (1..3).each { |column|
            button {
              layout_data :fill, :fill, true, true
              text        bind(@tic_tac_toe_board[row, column], :sign)
              enabled     bind(@tic_tac_toe_board[row, column], :empty)
              on_widget_selected {
                @tic_tac_toe_board.mark(row, column)
              }
            }
          }
        }
      }
    }
    observe(@tic_tac_toe_board, :game_status) { |game_status|
      display_win_message if game_status == Board::WIN
      display_draw_message if game_status == Board::DRAW
    }
  end

  def display_win_message
    display_game_over_message("Player #{@tic_tac_toe_board.winning_sign} has won!")
  end

  def display_draw_message
    display_game_over_message("Draw!")
  end

  def display_game_over_message(message_text)
    message_box(@shell) {
      text 'Game Over'
      message message_text
    }.open
    @tic_tac_toe_board.reset
  end

  def open
    @shell.open
  end
end

TicTacToe.new.open

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
glimmer-dsl-opal-0.6.0 lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe.rb
glimmer-dsl-opal-0.5.1 lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe.rb
glimmer-dsl-opal-0.5.0 lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe.rb
glimmer-dsl-opal-0.4.0 lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe.rb
glimmer-dsl-opal-0.3.0 lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe.rb
glimmer-dsl-opal-0.2.0 lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe.rb
glimmer-dsl-opal-0.1.0 lib/samples/elaborate/tic_tac_toe.rb
glimmer-dsl-opal-0.0.9 lib/samples/elaborate/tic_tac_toe.rb
glimmer-dsl-opal-0.0.8 lib/samples/elaborate/tic_tac_toe.rb
glimmer-dsl-opal-0.0.7 lib/samples/elaborate/tic_tac_toe.rb