ソースコード(upuzzle.tcl)
パッケージにはTkが必要です foreach {p} {7 2 10 11 5 4 9 12 13 8 3 14 15 1 6} {i} {0 1 2 3 4 5 6 7 8 9 10 11 12 13 14} { ボタン$ p -relief solid -bd 1 -width 8 -height 4 -text $ p -command "move $ p" グリッド$ p -row [expr {$ i / 4}] -column [expr {$ i%4}] -padx 1 -pady 1} proc move {b} { lassign [list [dict get [グリッド情報$ b] -column] [dict get [グリッド情報$ b] -row]] xy foreach {ix iy} {0 -1 0 1 -1 0 1 0} { lassign [list [expr {$ x + $ ix}] [expr {$ y + $ iy}]] ij if {$ i> = 0 && $ i <= 3 && $ j> = 0 && $ j <= 3 &&![llength [グリッドスレーブ。 -col $ i -row $ j]]} { グリッド構成$ b -column $ i -row $ j}}}
ナックルとして通常のボタンが使用されます。 これらはグリッドマネージャを使用してウィンドウにまとめられ、ウィジェットの位置は仮想テーブルの行番号と列番号によって決定されます。
特定のナックルの移動手順では、考えられるすべての移動(上下、左右)をチェックし、必要に応じて、テーブル内のボタンの位置を変更します。
参照:
ウィキペディアの15
ActiveTcl(Windows / OSX / LinuxのTclディストリビューション)
eTcl(Windows Mobile)
Habrausersからの代替:
ミチューリンのゲーム「フィフティーン」
SKYnvからMidp1.0-2.0の15