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

    Реверси в 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
    Поделиться публикацией

    Комментарии 18

      +2
      Только мне кажется, что каждый раз начинать с одной и той же комбинации не очень интересно?
        +2
        michurin.com.ru/game-fifteen.shtml — с перемешиванием :-) (там же есть шестиугольный «тетрис», «змейка», шестиугольный «сапёр» (есть on-line-версия) и «спички» (тоже с on-line вариантам)) // конец рекламного сообщения :-)
        +1
        Я угадаю эту мелодию с пяти нот!
          +1
          И ничего не crazy. :)
            +1
            а мона скомпиленный экзешник под винду (вспомню детство)?
            +1
            еще бы счетчик кол-ва ходов и времени и полноценная игрушка.
              +1
              Ну раз реверси было в 64 строки, то пятнашка должна быть в 15, а не 10.
                0
                <занудство причина="размер поля">точнее, в 16, а не в 15</занудство>

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое