def initialize(streets, avenues, size = $windowBottom, callback = nil)
super()
@root = TkRoot.new{
title ' Karel\'s World '
width size + 60
height size
background 'white'
}
$windowBottom = size
@height = size
geometryString = ($windowBottom + 80).to_s + 'x' + ($windowBottom + 65).to_s + "+55+25"
@root.geometry(newGeometry = geometryString)
bar = TkMenu.new
def end_program(menu)
exit()
end
fil = TkMenu.new
fil.add_command(:label => 'Quit ^Q', :command => lambda {|x='Quit'| end_program(x)})
bar.add_cascade(:label => :File, :menu => fil)
@root.configure(:menu => bar)
bind_all('Command-q'){end_program('Command-q')}
bind_all('Control-q'){end_program('Control-q')}
bind_all('Destroy'){end_program('Window Closed')}
@_streets = streets
@_avenues = streets
@_gBeepers = {}
@_contents = []
@_robots = []
@_walls = []
top = winfo_toplevel()
TkGrid.rowconfigure(top, 2, :weight => 1)
TkGrid.columnconfigure(top, 0, :weight => 1)
TkGrid.rowconfigure(self, 2, :weight => 1)
TkGrid.columnconfigure(self, 0, :weight => 1)
TkGrid.rowconfigure(@root, 2, :weight => 1)
TkGrid.columnconfigure(@root, 0, :weight => 1)
@speedLevel = TkLabel.new(:text => "Speed " + (100-@@delay).to_s)
@speedLevel.grid(:row => 0, :column => 0, :sticky=>"news")
slower = TkButton.new(:text => "Slower", :command => lambda{
@@delay = [@@delay + 10, 100].min
RobotWorld.set_speed 100 - @@delay
})
slower.grid(:row => 0, :column => 1)
faster = TkButton.new(:text => "Faster", :command => lambda{
@@delay = [@@delay - 10, 0].max
RobotWorld.set_speed 100 - @@delay
})
faster.grid(:row => 1, :column => 1)
@height = @oldHeight = $windowBottom
@_bottom = $windowBottom - $inset
@_left = $inset
@_top = $inset
@_right = @height
@inset = $inset
@canvas = Canvas.new(root, :height => $windowBottom, :width => $windowBottom, :bg => 'white')
@canvas.grid(:row => 2, :column => 0, :sticky=>"news")
image1 = TkPhotoImage.new(:file => $images_base+'kareln.gif')
image2 = TkPhotoImage.new(:file => $images_base+'karelw.gif')
image3 = TkPhotoImage.new(:file => $images_base+'karels.gif')
image4 = TkPhotoImage.new(:file => $images_base+'karele.gif')
image5 = TkPhotoImage.new(:file => $images_base+'karelnOff.gif')
image6 = TkPhotoImage.new(:file => $images_base+'karelwOff.gif')
image7 = TkPhotoImage.new(:file => $images_base+'karelsOff.gif')
image8 = TkPhotoImage.new(:file => $images_base+'kareleOff.gif')
$imageMapOn[NORTH] = image1
$imageMapOn[WEST] = image2
$imageMapOn[SOUTH] = image3
$imageMapOn[EAST] = image4
$imageMapOff[NORTH] = image5
$imageMapOff[WEST] = image6
$imageMapOff[SOUTH] = image7
$imageMapOff[EAST] = image8
geometry(@height)
set_size(streets)
end