Skip to content

Instantly share code, notes, and snippets.

@AndyObtiva
Created December 25, 2024 21:13
Show Gist options
  • Save AndyObtiva/f85e440a038341bacf7a855b9b2adcaa to your computer and use it in GitHub Desktop.
Save AndyObtiva/f85e440a038341bacf7a855b9b2adcaa to your computer and use it in GitHub Desktop.
# Source: https://github.com/AndyObtiva/glimmer_hangman/blob/master/app/glimmer_hangman/view/hangman.rb
require 'glimmer_hangman/model/game'
require 'glimmer_hangman/view/hangman_scene'
require 'glimmer_hangman/view/hangman_guess'
require 'glimmer_hangman/view/hangman_guessed_letters'
class GlimmerHangman
module View
class Hangman
include Glimmer::LibUI::Application
MODIFIER = OS.mac? ? :command : :control
option :size, default: 480
attr_reader :game
before_body do
@game = Model::Game.new
menu_bar
end
body {
window {
content_size size, size
title 'Hangman'
resizable false
area {
background = rectangle(0, 0, size, size) {
fill :white
}
hangman_scene(game:, size:)
hangman_guess(game:, size:)
hangman_guessed_letters(game:, size:)
on_key_down do |event|
case event
in {key: 'a'..'z', modifier: nil, modifiers: []}
game.guess_letter(event[:key])
handled = true
in {key: 'r', modifier: nil, modifiers: [MODIFIER]}
game.restart
handled = true
else
handled = false
end
handled
end
}
}
}
private
def menu_bar
menu('Game') {
menu_item('Restart') {
on_clicked do
game.restart
end
}
quit_menu_item if OS.mac?
}
menu('Help') {
if OS.mac?
about_menu_item {
on_clicked do
display_about_dialog
end
}
end
menu_item('About') {
on_clicked do
display_about_dialog
end
}
}
end
def display_about_dialog
message = "Hangman #{VERSION}\n\n#{LICENSE}"
msg_box('About', message)
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment