AutoIt: 3.3.2.0+
Версия: 0.5
Категория: Игры (головоломка)
Описание: Оболочка для игры Пятнашки.
Код:
История версий:
Автор(ы): dwerf
Версия: 0.5
Категория: Игры (головоломка)
Описание: Оболочка для игры Пятнашки.
Код:
Код:
#include <Misc.au3>
Func CreateForm()
Global $Ini = @ScriptDir & '\15Save.ini'
Local $iWidth = 400
Local $iHeight = 400
Local $iFontSize = 20
Local $sFont = 'Lucida Console'
Local $iLblWidthMod = 1.5
Local $iLblHeightMod = 1.1
Local $iVerWidth = 2
Local $iHorWidth = 2
Local $bColorText = 0x00FF00
Global $bColorTextBg = 0x003F00
Global $bColorTextErrorBg = 0xFF3F00
Global $bColorMainBg = 0x000000
Local $bColorSeparator = 0x004400
Global $bColorVoidHighlighting = 0x00FF00
Local $iSquWidth = $iWidth/4
While StringInStr($iSquWidth, '.')
$iWidth += 1
$iSquWidth = $iWidth/4
WEnd
Local $iSquHeight = $iHeight/4
While StringInStr($iSquHeight, '.')
$iHeight += 1
$iSquHeight = $iHeight/4
WEnd
Local $iWidthT = $iWidth+$iVerWidth*5
Local $iHeightT = $iHeight+$iHorWidth*5
Local $iSumSquWidthVerWidth = $iSquWidth+$iVerWidth
Local $iSumSquHeightHorWidth = $iSquHeight+$iHorWidth
Local $iHorOffSet = $iVerWidth+($iSquWidth-$iFontSize*$iLblWidthMod)/2
Local $iVerOffSet = $iHorWidth+($iSquHeight-$iFontSize*$iLblHeightMod)/2
Local $iLblWidth = $iFontSize*$iLblWidthMod
Local $iLblHeight = $iFontSize*$iLblHeightMod
Global $Form1 = GUICreate('Пятнашки', $iWidthT, $iHeightT)
GUISetBkColor($bColorMainBg)
GUISetFont($iFontSize, Default, Default, $sFont)
Global $aLabel[16], $aHorSeparator[5], $aVerSeparator[5]
Local $iSumYna4i1, $iSumYnaSumSquHeightHorWidthiVerOffSet
Global $iVoid = IniRead($Ini, '15', 'Void', -1)
For $iY = 0 To 3 Step +1
$aHorSeparator[$iY] = $iY*$iSumSquHeightHorWidth
GUICtrlCreateLabel('', 0, $aHorSeparator[$iY], $iWidthT, $iHorWidth)
GUICtrlSetBkColor(-1, $bColorSeparator)
$iYna4 = $iY*4
$iSumYna4i1 = $iYna4+1
$iSumYnaSumSquHeightHorWidthiVerOffSet = $iY*$iSumSquHeightHorWidth+$iVerOffSet
For $iX = 0 To 3 Step +1
If $iVoid = -1 Then
$iLblText = $iX+$iSumYna4i1
Else
$iLblText = IniRead($Ini, '15', $iX+$iYna4, -1)
If $iLblText = -1 Then
MsgBox(16, 'Error', 'Ini is corrupted:' & @CRLF & $Ini)
Exit
EndIf
EndIf
$aLabel[$iX+$iYna4] = GUICtrlCreateLabel($iLblText, $iX*$iSumSquWidthVerWidth+$iHorOffSet, $iSumYnaSumSquHeightHorWidthiVerOffSet, $iLblWidth, $iLblHeight, 1)
GUICtrlSetColor(-1, $bColorText)
GUICtrlSetBkColor(-1, $bColorTextBg)
Next
Next
$aHorSeparator[4] = 4*$iSumSquHeightHorWidth
GUICtrlCreateLabel('', 0, $aHorSeparator[4], $iWidthT, $iHorWidth)
GUICtrlSetBkColor(-1, $bColorSeparator)
For $iX = 0 To 4 Step +1
$aVerSeparator[$iX] = $iX*$iSumSquWidthVerWidth
GUICtrlCreateLabel('', $aVerSeparator[$iX], 0, $iVerWidth, $iHeightT)
GUICtrlSetBkColor(-1, $bColorSeparator)
Next
If $iVoid = -1 Then $iVoid = 15
GUICtrlSetData($aLabel[$iVoid], '')
GUICtrlSetBkColor($aLabel[$iVoid], $bColorMainBg)
EndFunc
CreateForm()
Global $hDll = DllOpen('user32.dll')
OnAutoItExitRegister('CloseUser32dll')
Func CloseUser32dll()
ConsoleWrite('CloseUser32dll' & @LF)
DllClose($hDll)
EndFunc
Global $aCursor[5], $iKeyboard
If _IsPressed(01, $hDll) Or _IsPressed(01, $hDll) Then
Global $MousePressed = 1
Else
Global $MousePressed = 0
EndIf
If _IsPressed(25) Or _IsPressed(26) Or _IsPressed(27) Or _IsPressed(28) Then
Global $KeyboardPressed = 1
Else
Global $KeyboardPressed = 0
EndIf
Global $KeyboardHighlighting = IniRead($Ini, '15', 'KeyboardHighlighting', 0)
If $KeyboardHighlighting = 1 Then GUICtrlSetBkColor($aLabel[$iVoid], $bColorVoidHighlighting)
OnAutoItExitRegister('Save')
Func Save()
ConsoleWrite('Save' & @LF)
For $i = 0 To 15 Step +1
IniWrite($Ini, '15', $i, GUICtrlRead($aLabel[$i]))
Next
IniWrite($Ini, '15', 'Void', $iVoid)
IniWrite($Ini, '15', 'KeyboardHighlighting', $KeyboardHighlighting)
EndFunc
Global $iError = -1
GUISetState()
Do
$aCursor = GUIGetCursorInfo($Form1)
$iKeyboard = 0
For $i = 1 To 4 Step +1
If _IsPressed(24+$i) Then
If $iKeyboard = 0 Then
$iKeyboard = $i
Else
$iKeyboard = -1
ExitLoop
EndIf
EndIf
Next
If $iKeyboard > 0 And $KeyboardPressed = 0 Then
Switch $iKeyboard
Case 1
$i = -1
Case 2
$i = -4
Case 3
$i = +1
Case 4
$i = +4
EndSwitch
If $iVoid+$i >= 0 And $iVoid+$i <= 15 And Not ($i = -1 And ($iVoid = 4 Or $iVoid = 8 Or $iVoid = 12)) And Not ($i = +1 And ($iVoid = 3 Or $iVoid = 7 Or $iVoid = 11)) Then
GUICtrlSetBkColor($aLabel[$iVoid], $bColorTextBg)
GUICtrlSetData($aLabel[$iVoid], GUICtrlRead($aLabel[$iVoid+$i]))
$iVoid += $i
GUICtrlSetData($aLabel[$iVoid], '')
If $KeyboardHighlighting = 0 Then
GUICtrlSetBkColor($aLabel[$iVoid], $bColorMainBg)
Else
GUICtrlSetBkColor($aLabel[$iVoid], $bColorVoidHighlighting)
EndIf
EndIf
EndIf
If $iKeyboard = 0 Then
If $KeyboardPressed = 1 Then $KeyboardPressed = 0
Else
If $KeyboardPressed = 0 Then
$KeyboardPressed = 1
If $KeyboardHighlighting = 0 Then
GUICtrlSetBkColor($aLabel[$iVoid], $bColorVoidHighlighting)
$KeyboardHighlighting = 1
EndIf
If $iError <> -1 Then
GUICtrlSetBKColor($aLabel[$iError], $bColorTextBg)
$iError = -1
EndIf
EndIf
EndIf
If $aCursor[2] = 1 Or $aCursor[3] = 1 Then
If $MousePressed = 0 Then
Switch $aCursor[0]
Case $aVerSeparator[0] To $aVerSeparator[1]-1
$iX = 0
Case $aVerSeparator[1] To $aVerSeparator[2]-1
$iX = 1
Case $aVerSeparator[2] To $aVerSeparator[3]-1
$iX = 2
Case $aVerSeparator[3] To $aVerSeparator[4]-1
$iX = 3
Case Else
$iX = -1
EndSwitch
Switch $aCursor[1]
Case $aHorSeparator[0] To $aHorSeparator[1]-1
$iY = 0
Case $aHorSeparator[1] To $aHorSeparator[2]-1
$iY = 1
Case $aHorSeparator[2] To $aHorSeparator[3]-1
$iY = 2
Case $aHorSeparator[3] To $aHorSeparator[4]-1
$iY = 3
Case Else
$iY = -1
EndSwitch
If $iX <> -1 And $iY <> -1 Then
$i = $iY*4+$iX
If $i <> $iError Then
If $KeyboardHighlighting = 1 Then
$KeyboardHighlighting = 0
GUICtrlSetBkColor($aLabel[$iVoid], $bColorMainBg)
EndIf
If $iError <> -1 Then
GUICtrlSetBKColor($aLabel[$iError], $bColorTextBg)
$iError = -1
EndIf
If ($i = $iVoid+1 And $iVoid <> 3 And $iVoid <> 7 And $iVoid <> 11) Or ($i = $iVoid-1 And $iVoid <> 4 And $iVoid <> 8 And $iVoid <> 12) Or $i = $iVoid+4 Or $i = $iVoid-4 Then
GUICtrlSetBkColor($aLabel[$iVoid], $bColorTextBg)
GUICtrlSetData($aLabel[$iVoid], GUICtrlRead($aLabel[$i]))
$iVoid = $i
GUICtrlSetData($aLabel[$iVoid], '')
GUICtrlSetBkColor($aLabel[$iVoid], $bColorMainBg)
If $KeyboardHighlighting = 0 Then
GUICtrlSetBkColor($aLabel[$iVoid], $bColorMainBg)
Else
GUICtrlSetBkColor($aLabel[$iVoid], $bColorVoidHighlighting)
EndIf
ElseIf $i <> $iVoid Then
GUICtrlSetBkColor($aLabel[$i], $bColorTextErrorBg)
$iError = $i
EndIf
EndIf
$MousePressed = 1
EndIf
EndIf
Else
If $MousePressed = 1 Then $MousePressed = 0
EndIf
Until GUIGetMsg() = -3
История версий:
v0.5
Реализовано управление мышкой и клавиатурой (стрелки), обнаруженные баги исправлены, код грязноват, нет дополнительных функций (подсчёт времени, кол-во ходов, смешать головоломку итп)
Реализовано управление мышкой и клавиатурой (стрелки), обнаруженные баги исправлены, код грязноват, нет дополнительных функций (подсчёт времени, кол-во ходов, смешать головоломку итп)
Автор(ы): dwerf