# # "Пятнашки" . # Версия 1.0 # Реализация: Maple9.03 # Автор: Жеглов Александр (Кеман) # Март 2004. # # restart: with(Maplets): with(Maplets[Elements]): # # БЛОК ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ # empt_y:=" ": # клетка-пустышка cnt :=0: # количество сделанных шагов one :=0: # начальное положение "пустышки" при перемешке who :=0: # с какой цифрой нажата кнопка tabl:=array(1..16): # храним соответствия типа 1~T1B vr:=0: # время начала игры vo:=0: Help:=proc() Display( Maplet( Window( title="Help", layout= BoxLayout( [TextBox( width=35,height=10,background=COLOR(RGB,250/256,254/256,222/256), wrapped=true,editable=false,value=HelpInfo), Button("OK",onclick=Shutdown()) ] ) ) ) ) end: m:=Maplet( # Создаем новый маплет для вывода Window['W3'] ( # Таблицы результатов 'title' = "Таблица результатов", 'height'= 170, 'width' = 220, [BoxLayout( BoxColumn( inset=0,spacing=0, BoxRow (inset=0,spacing=0,border=true, DropDownBox['DDB1']("Победители",sort([ "Победители"], lexorder)), Button("Показать ",onclick=Evaluate('function'="file_out")) ), BoxRow (border=true, TextField['TxN']('width'=9,value="Ваше имя"), Button['Ano']("В список",onclick=Evaluate('function'="file_in")) ), MenuSeparator(), BoxRow (HorizontalGlue(),HorizontalGlue(),HorizontalGlue(), Button("Выход",CloseWindow('W3'))))) ] )#/Таблица результатов ): # # БЛОК ПРЕДВАРИТЕЛЬНЫХ ДЕЙСТВИЙ # tabl[1] :='TB1' : tabl[2] :='TB2' : tabl[3] :='TB3' : tabl[4] :='TB4' : tabl[5] :='TB5' : tabl[6] :='TB6' : tabl[7] :='TB7' : tabl[8] :='TB8' : tabl[9] :='TB9' : tabl[10]:='TB10': tabl[11]:='TB11': tabl[12]:='TB12': tabl[13]:='TB13': tabl[14]:='TB14': tabl[15]:='TB15': tabl[16]:='TB16': # # БЛОК ПРОЦЕДУР И ФУНКЦИЙ # q1:=proc() global one: one:=one+1 end proc: q2:=proc() global one: one:=one-1 end proc: q3:=proc() global one: one:=one-4 end proc: q4:=proc() global one: one:=one+4 end proc: #========== # ПРОЦЕДУРA inaway:=proc() # перемешиваем кнопки local roll,i,k: # элемент "пустышка" global tabl,one,vr,vo: vr:=0: # обнуляем счетчики начала vo:=0: # и конца игры for k from 1 to 16 do # делаем кнопки активными Maplets:-Tools:-Set(tabl[k]('enabled')=true) end do: for k from 1 to 16 do # определяем положение "пустышки" if (Maplets:-Tools:-Get(tabl[k]('caption'))=empt_y) then one:=k end if: end do: for i from 1 to 150 do # количество перестановок при перемешке roll:=RandomTools[Generate](integer(range=1..8)); # случайное направление сдвига if (((roll=1)or(roll=5)) and (one+1<17) and (one+1<>5) and (one+1<>9) and (one+1<>13)) then (Maplets:-Tools:-Set(tabl[one+1]('value')=true), Maplets:-Tools:-Set(tabl[one]('caption')=Maplets:-Tools:-Get(tabl[one+1]('caption'))), Maplets:-Tools:-Set(tabl[one+1]('caption')=empt_y), Maplets:-Tools:-Set(tabl[one]('value')=false),q1()) end if: if (((roll=4)or(roll=7)) and (one-1 >0) and (one-1<>4) and (one-1<>8) and (one-1<>12)) then (Maplets:-Tools:-Set(tabl[one-1]('value')=true), Maplets:-Tools:-Set(tabl[one]('caption')=Maplets:-Tools:-Get(tabl[one-1]('caption'))), Maplets:-Tools:-Set(tabl[one-1]('caption')=empt_y), Maplets:-Tools:-Set(tabl[one]('value')=false), q2()) end if: if (((roll=3)or(roll=8)) and (one-4 >0)) then (Maplets:-Tools:-Set(tabl[one-4]('value')=true), Maplets:-Tools:-Set(tabl[one]('caption')=Maplets:-Tools:-Get(tabl[one-4]('caption'))), Maplets:-Tools:-Set(tabl[one-4]('caption')=empt_y), Maplets:-Tools:-Set(tabl[one]('value')=false),q3()) end if: if (((roll=2)or(roll=6)) and (one+4<17)) then (Maplets:-Tools:-Set(tabl[one+4]('value')=true), Maplets:-Tools:-Set(tabl[one]('caption')=Maplets:-Tools:-Get(tabl[one+4]('caption'))), Maplets:-Tools:-Set(tabl[one+4]('caption')=empt_y), Maplets:-Tools:-Set(tabl[one]('value')=false),q4()) end if: end do: end proc: #========== # ПРОЦЕДУРA ff := proc() do end do end proc: Time:=proc(t) # процедура отвечает за задержку do try # при смене светов кнопки timelimit(t,ff()) # timelimit(t) catch: break: end try: end do: end proc: #========== # ПРОЦЕДУРA chgcol:=proc() # подсвечиваем цвет возможных перестановок local k,clb: global tabl: clb:=Maplets:-Tools:-Get('TB1'('background')): # запоминаем первоначальный цвет кнопок for k from 1 to 16 do # определяем положение пустышки if (Maplets:-Tools:-Get(tabl[k]('caption'))=empt_y) then if ((k+1<17) and (k+1<>5) and (k+1<>9) and (k+1<>13)) then (Maplets:-Tools:-Set(tabl[k+1]('background')="#C0C0C0"),Time(0.08), Maplets:-Tools:-Set(tabl[k+1]('background')=clb)) end if: if (k+4<17) then (Maplets:-Tools:-Set(tabl[k+4]('background')="#C0C0C0"),Time(0.08), Maplets:-Tools:-Set(tabl[k+4]('background')=clb)) end if: if ((k-1 >0) and (k-1<>4) and (k-1<>8) and (k-1<>12)) then (Maplets:-Tools:-Set(tabl[k-1]('background')="#C0C0C0"),Time(0.08), Maplets:-Tools:-Set(tabl[k-1]('background')=clb)) end if: if (k-4 >0) then (Maplets:-Tools:-Set(tabl[k-4]('background')="#C0C0C0"),Time(0.08), Maplets:-Tools:-Set(tabl[k-4]('background')=clb)) end if: end if end do: end proc: #========== # ПРОЦЕДУРA coun_t:=proc() # считаем время - промежуток выводится при нажатии кнопок global cnt,vr,vo: cnt := cnt+1: vo:=round(time()-vr): Maplets:-Tools:-Set('count'('caption')=vo): end proc: #========== # ПРОЦЕДУРА file_out:=proc() # Выбираем данные из файла результатов local fd,r1,r2,r3: global vr: fd:="C:/Documents and Settings/keman-/Рабочий стол/Pgame/Records.txt": FileTools[Text][Open](fd, create=true,append=true); # открываем(создаем) файл FileTools[Text][Close](fd): r1:=FileTools[Text][CountLines](fd): for r2 from 1 to r1 do # выбираем все записи Maplets:-Tools:-Set('DDB1'(appenditem)=FileTools[Text][ReadLine](fd)) end do: FileTools[Text][Close](fd): end proc: #========== file_cl:=proc() # очищаем файл результатов local fd,r1,r2: fd:="C:/Documents and Settings/keman-/Рабочий стол/Pgame/Records.txt": FileTools[Text][Open](fd, create=true,append=true): FileTools[Text][WriteLine](fd,"сек"): #FileTools[Text][Close](fd): FileTools[Remove](fd): end proc: # ПРОЦЕДУРА file_in:=proc() # Вносим новый результат в файл результатов global vr: local fd,r1,r2: if (Maplets:-Tools:-Get('TxN'('value'))="") # Если имя не присвоено, then(Maplets:-Tools:-Set('TxN'('value')="Pupkin")) # то оно - Pupkin end if: fd:="C:/Documents and Settings/keman-/Рабочий стол/Pgame/Records.txt": FileTools[Text][Open](fd, create=true,append=true); # открываем(создаем) файл r1:=Maplets:-Tools:-Get('TxN'('value')): FileTools[Text][WriteString](fd,r1); # заносим новое имя FileTools[Text][WriteString](fd," - "); r2:=round(time()-vr): FileTools[Text][WriteInteger](fd,r2); # заносим время FileTools[Text][WriteLine](fd,"cek"); FileTools[Text][Close](fd): Maplets:-Tools:-Set('Ano'('enabled')=false): end proc: #========== lock:=proc() global tabl: local k: for k from 1 to 16 do # делаем кнопки активными Maplets:-Tools:-Set(tabl[k]('enabled')=false) end do: end proc: # ПРОЦЕДУРA succes:=proc() # Отмечаем правильную расстановку всех элементов if ((Maplets:-Tools:-Get('TB1'('caption'))=" 1 ")and (Maplets:-Tools:-Get('TB2'('caption'))=" 2 ")and (Maplets:-Tools:-Get('TB3'('caption'))=" 3 ")and (Maplets:-Tools:-Get('TB4'('caption'))=" 4 ")and (Maplets:-Tools:-Get('TB5'('caption'))=" 5 ")and (Maplets:-Tools:-Get('TB6'('caption'))=" 6 ")and (Maplets:-Tools:-Get('TB7'('caption'))=" 7 ")and (Maplets:-Tools:-Get('TB8'('caption'))=" 8 ")and (Maplets:-Tools:-Get('TB9'('caption'))=" 9 ")and (Maplets:-Tools:-Get('TB10'('caption'))="10")and (Maplets:-Tools:-Get('TB11'('caption'))="11")and (Maplets:-Tools:-Get('TB12'('caption'))="12")and (Maplets:-Tools:-Get('TB13'('caption'))="13")and (Maplets:-Tools:-Get('TB14'('caption'))="14")and (Maplets:-Tools:-Get('TB15'('caption'))="15")and (Maplets:-Tools:-Get('TB16'('caption'))=empt_y) ) then (lock(), Display(m) ) # Показываем таблицу результатов end if end proc: #========== # ПРОЦЕДУРA move_b:=proc() # move_button. Двигаем кнопку взависимости от того, какая она. global who,tabl,vr: if vr=0 then vr:=time(): end if: # при первом нажатии запускаем счетчик времени if (Maplets:-Tools:-Get(tabl[who]('caption'))=empt_y) then (Maplets:-Tools:-Set(tabl[who]('value')=true)) elif((who+1<17) and (who+1<>5) and (who+1<>9) and (who+1<>13)and (Maplets:-Tools:-Get(tabl[who+1]('caption'))=empt_y)) then (Maplets:-Tools:-Set(tabl[who+1]('caption')=Maplets:-Tools:-Get(tabl[who]('caption'))), Maplets:-Tools:-Set(tabl[who]('caption')=empt_y), Maplets:-Tools:-Set(tabl[who+1]('value')=false), coun_t()) elif((who-1 >0) and (who-1<>4) and (who-1<>8) and (who-1<>12)and (Maplets:-Tools:-Get(tabl[who-1]('caption'))=empt_y)) then (Maplets:-Tools:-Set(tabl[who-1]('caption')=Maplets:-Tools:-Get(tabl[who]('caption'))), Maplets:-Tools:-Set(tabl[who]('caption')=empt_y), Maplets:-Tools:-Set(tabl[who-1]('value')=false), coun_t()) elif((who-4 >0)and (Maplets:-Tools:-Get(tabl[who-4]('caption'))=empt_y)) then (Maplets:-Tools:-Set(tabl[who-4]('caption')=Maplets:-Tools:-Get(tabl[who]('caption'))), Maplets:-Tools:-Set(tabl[who]('caption')=empt_y), Maplets:-Tools:-Set(tabl[who-4]('value')=false), coun_t()) elif((who+4<17)and (Maplets:-Tools:-Get(tabl[who+4]('caption'))=empt_y)) then (Maplets:-Tools:-Set(tabl[who+4]('caption')=Maplets:-Tools:-Get(tabl[who]('caption'))), Maplets:-Tools:-Set(tabl[who]('caption')=empt_y), Maplets:-Tools:-Set(tabl[who+4]('value')=false), coun_t()) else (Maplets:-Tools:-Set(tabl[who]('value')=false)) end if: succes(): # проверяем на правильно собраную комбинацию if (Maplets:-Tools:-Get('CBMI1'('value'))=true) # если опция включена, то then chgcol(): # меняем цвет возможных кнопок end if: end proc: #========== # ПРОЦЕДУРA T1:=proc() global who: who:=1: move_b(): end proc: # При нажатии кнопки T2:=proc() global who: who:=2: move_b(): end proc: # отмечаем ее номер и T3:=proc() global who: who:=3: move_b(): end proc: # вызываем функию T4:=proc() global who: who:=4: move_b(): end proc: # обрабоки союытия T5:=proc() global who: who:=5: move_b(): end proc: T6:=proc() global who: who:=6: move_b(): end proc: T7:=proc() global who: who:=7: move_b(): end proc: T8:=proc() global who: who:=8: move_b(): end proc: T9 :=proc() global who: who:=9 :move_b(): end proc: T10:=proc() global who: who:=10:move_b(): end proc: T11:=proc() global who: who:=11:move_b(): end proc: T12:=proc() global who: who:=12:move_b(): end proc: T13:=proc() global who: who:=13:move_b(): end proc: T14:=proc() global who: who:=14:move_b(): end proc: T15:=proc() global who: who:=15:move_b(): end proc: T16:=proc() global who: who:=16:move_b(): end proc: # # # МАПЛЕТ # # maplet :=Maplet( # Маплет 'onstartup' = 'A1', Window['W1']( # Главное окно 'title' = "Пятнашки", 'menubar'= 'MB1', [[BoxLayout( BoxColumn('border'=true,inset=0,spacing=0, BoxRow(inset=0,spacing=0, BoxCell("Время игры:"), Label[count]('caption'="0"), Label("сек.") ), BoxRow(), MenuSeparator(), BoxRow(inset=0,spacing=0, ToggleButton['TB1']('caption'=" 1 ",enabled='false', 'value'=false,'onchange'=Evaluate('function'="T1")), ToggleButton['TB2']('caption'=" 2 ",enabled='false', 'value'=false,'onchange'=Evaluate('function'="T2")), ToggleButton['TB3']('caption'=" 3 ",enabled='false', 'value'=false,'onchange'=Evaluate('function'="T3")), ToggleButton['TB4']('caption'=" 4 ",enabled='false', 'value'=false,'onchange'=Evaluate('function'="T4")) ), BoxRow(inset=0,spacing=0, ToggleButton['TB5']('caption'=" 5 ",enabled='false', 'value'=false,'onchange'=Evaluate('function'="T5")), ToggleButton['TB6']('caption'=" 6 ",enabled='false', 'value'=false,'onchange'=Evaluate('function'="T6")), ToggleButton['TB7']('caption'=" 7 ",enabled='false', 'value'=false,'onchange'=Evaluate('function'="T7")), ToggleButton['TB8']('caption'=" 8 ",enabled='false', 'value'=false,'onchange'=Evaluate('function'="T8")) ), BoxRow(inset=0,spacing=0, ToggleButton['TB9']('caption'=" 9 ",enabled='false', 'value'=false,'onchange'=Evaluate('function'="T9")), ToggleButton['TB10']('caption'="10",enabled='false', 'value'=false,'onchange'=Evaluate('function'="T10")), ToggleButton['TB11']('caption'="11",enabled='false', 'value'=false,'onchange'=Evaluate('function'="T11")), ToggleButton['TB12']('caption'="12",enabled='false', 'value'=false,'onchange'=Evaluate('function'="T12")) ), BoxRow(inset=0,spacing=0, ToggleButton['TB13']('caption'="13",enabled='false', 'value'=false,'onchange'=Evaluate('function'="T13")), ToggleButton['TB14']('caption'="14",enabled='false', 'value'=false,'onchange'=Evaluate('function'="T14")), ToggleButton['TB15']('caption'="15",enabled='false', 'value'=false,'onchange'=Evaluate('function'="T15")), ToggleButton['TB16']('caption'=" ",enabled='false','value'=true,'onchange'=Evaluate('function'="T16")) ) ) ) ]] ),# /Главное окно Window['W2'] ( # Версия программы 'title' = "О программе", 'height'= 200, 'width' = 200, ["Игра ' Пятнашки '.", "Версия 1.0. март 2004.г", "Freeware. All rights reserved.", Label['LI'](image=IE_day), "Keman (Zheglov ALexander)."] ),#/Версия программы MenuBar['MB1']( # Главное меню Menu("Игра", MenuItem("Новая игра",'onclick'=Evaluate('function'="inaway")), MenuSeparator(), MenuItem("Выход", Shutdown("Closed from menu", ['CBMI1']))), Menu("Опции",RadioButtonMenuItem['CBMI1']("Подсвечивать кнопки",'value'=true,'group'='BG1'), RadioButtonMenuItem['CBMI2']("Обычные кнопки" ,'group'='BG1')), Menu("?", MenuItem("О программе",RunWindow('W2'))) ), # /Главное меню ButtonGroup['BG1'](), Image[IE_day]("C:/Documents and Settings/keman-/Рабочий стол/Pgame/keman.jpg"), Action['A1'](RunWindow('W1')) ):# /Маплет Maplets[Display](maplet);