Pull to refresh

Пятнашки на TCL в 10 строк

Abnormal programming *
Реверси в 64 строки уже есть. Теперь напишем пятнашки.
image



Исходный код (upuzzle.tcl)
package require 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} {
	button .$p -relief solid -bd 1 -width 8 -height 4 -text $p -command "move $p"
	grid   .$p -row [expr {$i/4}] -column [expr {$i%4}] -padx 1 -pady 1}
proc move {b} {
	lassign [list [dict get [grid info .$b] -column] [dict get [grid info .$b] -row]] x y
	foreach {ix iy} {0 -1 0 1 -1 0 1 0} {
		lassign [list [expr {$x+$ix}] [expr {$y+$iy}]] i j
		if {$i>=0 && $i<=3 && $j>=0 && $j<=3 && ![llength [grid slaves . -col $i -row $j]]} {
			grid configure .$b -column $i -row $j}}}


В качестве костяшек используются обычные кнопки. Они упаковываются в окне с помощью менеджера grid, где положение виджета задается номером строки и столбца виртуальной таблицы.

Процедура move для заданной костяшки проверяет все возможные перемещения (вверх, вниз, влево, вправо), и при необходимости меняет положение кнопки в таблице.

image

Ссылки:
Пятнашки на Википедии
ActiveTcl (дистрибутив Tcl для Windows/OSX/Linux)
eTcl (Windows Mobile)



Альтернативы от хабраюзеров:
Игра «пятнашки» от michurin
Пятнашки на Midp1.0-2.0 от SKYnv
Tags:
Hubs:
Total votes 18: ↑16 and ↓2 +14
Views 5.6K
Comments Comments 18