1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
#
# widet demo 'puzzle' (called by 'widget')
#
# toplevel widget ¸ߤк
if defined?($puzzle_demo) && $puzzle_demo
$puzzle_demo.destroy
$puzzle_demo = nil
end
# demo Ѥ toplevel widget
$puzzle_demo = TkToplevel.new {|w|
title("15-Puzzle Demonstration")
iconname("15-Puzzle")
positionWindow(w)
}
# label
msg = TkLabel.new($puzzle_demo) {
font $font
wraplength '4i'
justify 'left'
text "15-ѥϥܥƤǤƤޤƤ٤ΥԡåȡΥԡζƤ˥饤ɤޤ³ԡον˾夫鲼鱦¤֤褦ˤƤ"
}
msg.pack('side'=>'top')
# frame
TkFrame.new($puzzle_demo) {|frame|
TkButton.new(frame) {
#text 'λ'
text 'Ĥ'
command proc{
tmppath = $puzzle_demo
$puzzle_demo = nil
tmppath.destroy
}
}.pack('side'=>'left', 'expand'=>'yes')
TkButton.new(frame) {
text 'ɻ'
command proc{showCode 'puzzle'}
}.pack('side'=>'left', 'expand'=>'yes')
}.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m')
# frame
#
# Special trick: scrollbar widget Ƥ trough color Ѥ뤳Ȥ
# ʬΤΰſꤹ
#
begin
if Tk.windowingsystem() == 'aqua'
frameSize = 160
else
frameSize = 120
end
rescue
frameSize = 120
end
s = TkScrollbar.new($puzzle_demo)
base = TkFrame.new($puzzle_demo) {
width frameSize
height frameSize
borderwidth 2
relief 'sunken'
bg s['troughcolor']
}
s.destroy
base.pack('side'=>'top', 'padx'=>'1c', 'pady'=>'1c')
# proc ΥפĤ뤿ᡤproc åɤѰ
# ƤͤС롼ͤѲ num αƶ
# puzzleSwitch 2 ѲƤޤ̤ˤϤʤʤ
def def_puzzleswitch_proc(w, num)
proc{puzzleSwitch w, num}
end
$xpos = {}
$ypos = {}
order = [3,1,6,2,5,7,15,13,4,11,8,9,14,10,12]
(0..14).each{|i|
num = order[i]
$xpos[num] = (i % 4) * 0.25
$ypos[num] = (i / 4) * 0.25
TkButton.new(base) {|w|
relief 'raised'
text num
highlightthickness 0
command def_puzzleswitch_proc(w, num)
}.place('relx'=>$xpos[num], 'rely'=>$ypos[num],
'relwidth'=>0.25, 'relheight'=>0.25)
}
$xpos['space'] = 0.75
$ypos['space'] = 0.75
############
def puzzleSwitch(w, num)
if ( ($ypos[num] >= ($ypos['space'] - 0.01)) \
&& ($ypos[num] <= ($ypos['space'] + 0.01)) \
&& ($xpos[num] >= ($xpos['space'] - 0.26)) \
&& ($xpos[num] <= ($xpos['space'] + 0.26))) \
|| (($xpos[num] >= ($xpos['space'] - 0.01)) \
&& ($xpos[num] <= ($xpos['space'] + 0.01)) \
&& ($ypos[num] >= ($ypos['space'] - 0.26)) \
&& ($ypos[num] <= ($ypos['space'] + 0.26)))
tmp = $xpos['space']
$xpos['space'] = $xpos[num]
$xpos[num] = tmp
tmp = $ypos['space']
$ypos['space'] = $ypos[num]
$ypos[num] = tmp
w.place('relx'=>$xpos[num], 'rely'=>$ypos[num])
end
end
|