Sha256: 1d42dbead12d198b5cfb0075a022fe62025a1a7f2a426d7c873dc28635bbf9e3

Contents?: true

Size: 1.76 KB

Versions: 3

Compression:

Stored size: 1.76 KB

Contents

require_relative "../../lib/glimmer"
require_relative "tic_tac_toe_board"


class TicTacToe
  
  include_package 'org.eclipse.swt'
  include_package 'org.eclipse.swt.widgets'
  include_package 'org.eclipse.swt.layout'
  
  include Glimmer

  def initialize
    @tic_tac_toe_board = TicTacToeBoard.new
    @main = 
    @shell = shell {
      text "Tic-Tac-Toe"
      composite {
        layout GridLayout.new(3,true) 
        (1..3).each { |row_number|
          (1..3).each { |column_number|
            button {
              layout_data GridData.new(:fill.swt_constant, :fill.swt_constant, true, true)
              text        bind(@tic_tac_toe_board.box(row_number, column_number), :sign)
              enabled     bind(@tic_tac_toe_board.box(row_number, column_number), :empty)
              on_widget_selected {
                @tic_tac_toe_board.mark_box(row_number, column_number)
              }
            }
          }
        }
      }
    }
    @tic_tac_toe_board.extend(ObservableModel) #make board an observable model
    @tic_tac_toe_board.add_observer("game_status", self)
  end
  
  def update(game_status) 
    display_win_message if game_status == TicTacToeBoard::WIN
    display_draw_message if game_status == TicTacToeBoard::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)
    message_box = MessageBox.new(@shell.widget)
    message_box.setText("Game Over")
    message_box.setMessage(message)
    message_box.open
    @tic_tac_toe_board.reset
  end
  
  def open 
      @main.open
  end
end

TicTacToe.new.open

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
glimmer-0.1.5.470 samples/tictactoe/tic_tac_toe.rb
glimmer-0.1.4.470 samples/tictactoe/tic_tac_toe.rb
glimmer-0.1.4.swt.pre.4.7.0 samples/tictactoe/tic_tac_toe.rb