DEV Community
Glimmer DSL for SWT 4.20.13.11 just shipped with an implementation of Conway's Game of Life. A simpler version was blogged about many years ago, but it has been enhanced to be canvas-based instead of button-based.
The models Grid and Cell were written test first.
Otherwise, the GUI simply binds to the grid cells (the same way the Tic Tac Toe elaborate sample was implemented)
# From: https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/docs/reference/GLIMMER_SAMPLES.md#game-of-life
require 'glimmer-dsl-swt'
require_relative 'game_of_life/model/grid'
class GameOfLife
include Glimmer::UI::CustomShell
WIDTH = 20
HEIGHT = 20
CELL_WIDTH = 25
CELL_HEIGHT = 25
before_body do
@grid = GameOfLife::Model::Grid.new(WIDTH, HEIGHT)
end
body {
shell {
row_layout :vertical
text "Conway's Game of Life (Glimmer Edition)"
canvas {
layout_data {
width WIDTH*CELL_WIDTH
height HEIGHT*CELL_HEIGHT
}
(0...HEIGHT).each do |row_index|
(0...WIDTH).each do |column_index|
rectangle(column_index*CELL_WIDTH, row_index*CELL_HEIGHT, CELL_WIDTH, CELL_HEIGHT) {
background <= [@grid.cell_rows[row_index][column_index], "alive", on_read: ->(a) {a ? :black : :white}]
on_mouse_down {
@grid.cell_rows[row_index][column_index].toggle_aliveness!
}
}
end
end
}
composite {
row_layout(:horizontal) {
margin_width 0
}
button {
text 'Step'
enabled <= [@grid, :playing, on_read: :! ]
on_widget_selected {
@grid.step!
}
}
button {
text 'Clear'
enabled <= [@grid, :playing, on_read: :! ]
on_widget_selected {
@grid.clear!
}
}
button {
text <= [@grid, :playing, on_read: ->(p) { p ? 'Stop' : 'Play' }]
on_widget_selected {
@grid.toggle_playback!
}
}
label {
text 'Slower'
}
scale {
minimum 1
maximum 100
selection <=> [@grid, :speed]
}
label {
text 'Faster'
}
}
}
}
end
GameOfLife.launch
Animated Screenshot:
Glimmer DSL for SWT enables writing desktop applications in Ruby (JRuby) in a fraction of the time they normally take in other languages (think hours and days for an MVP instead of weeks and months)
Happy Glimmering!
For further actions, you may consider blocking this person and/or reporting abuse
Read next
Building Nested Forms in Rails with Stimulus
Rails Designer -
Ruby on Rails: Rethinking Service Objects
Alexander Shagov -
🚩Effortless Feature Management in Rails : A Guide to Using Flipper with Active Admin
Pimp My Ruby -
Managing Ruby versions on macOS Apple Silicon with rbenv
Sarah Siqueira -
Top comments (0)