Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Gra] Tetris


Rekomendowane odpowiedzi

Opublikowano

Siemka.

Wrzucam tutaj kod z tetrisem na poprzedni (drugi) konkurs AutoIt3. Mam nadzieję, że trochę się z niego nauczycie ^^.

Zastrzegam sobie prawa do tego kodu. Proszę go nie kopiować/edytować bez mojej zgody i nie czerpać z niego korzyści dla własnej osoby.

 

Link do tematu z konkursem:

 http://www.mpcforum.pl/topic/482103-konkursnajlepszy-tetris-w-autoit/

Kod:

 

 


#include <gdiplus.au3>
#include <windowsconstants.au3>
#include <GUIConstantsEx.au3>
#include <crypt.au3>
OnAutoItExitRegister("__exit")
Global $sKod = "TerazJuzDobrz3KodujeTomoZnaToZmiEn1C"
_Crypt_Startup()
Global $sPatch = @AppDataDir & '\Tetris\'
$hKey = _Crypt_DeriveKey($sKod, $CALG_RC4)
Global $nick[20] ;nicki do listy wynikow
Global $bczy5 = True
Global $vScoreForLvl[20] = [100, 200, 400, 700, 1300, 2000, 3300, 5300, 8600, 13900, 22500, 36400, 58900, 95300, 154200, 249500, 403700, 653200, 1056900, 1710100]
Global $bDzwiek = False
Global $bCzyKoniec = False
Global $vscore_top[20] ;score do listy wynikow
Global $vIloscklockow[20] ;ilosc klockow do listy wynikow
Global $iPolozenieX_tmp2 ;ostatnie polozenie ostatniego klocka (do poprawnego wyswietlania +pkt)
Global $iScoreTmp = 0 ; do porownania ile score przybylo po ruchu
Global $iCzasBonus = 0 ;czas pozostaly bonusu
Global $hSlider
Global $iIloscOsiagniec = 13 ;ilosc mozliwych osiagniec
Global $vOsiagniecia[$iIloscOsiagniec] ;tekst tory zawieraja poszczegolne osiagniecia (juz wykonane)
Global $vCzyOsiagniecie[$iIloscOsiagniec] ;czy osiagniecie jest juz zrobione				 nizej: tekty achievementów
Global $sTekst[$iIloscOsiagniec] = ['Zuzyłes 500 klocków podczas jedej gry.', 'Zuzyłes 2000 klocków podczas jedej gry.', 'Zuzyłes 5000 klocków podczas jedej gry.', 'Zdobryłes bonus podczas trwania poprzedniego', 'Utworzyłes linie z samych czerwonych klocków', 'Utworzyłes linie z samych szarych klocków', 'Utworzyłes linie z samych błękitnych klocków', 'Utworzyłes linie z samych pomarańczowych klocków', 'Utworzyłes linie z samych rózowych klocków', 'Utworzyłes linie z samych niebieskich klocków', 'Utworzyłes linie z samych zielonych klocków', 'Utworzyłes linię na wysokosci większej od 19', 'Utworzyłes linie zawierającą wszytkie 7 kolorów']
Global $gui_osiagniecia ; deklaracja gui  z osiągnięciami
DirCreate($sPatch)
If Not FileExists($sPatch & "wyniki.txt") Then ;tworzy plik z wynikami jesli go nie ma
_FileCreate($sPatch & "wyniki.txt")
EndIf
If Not FileExists($sPatch & "osiagniecia.txt") Then;tworzy plik z osiagnieciami jesli go nie ma
_FileCreate($sPatch & "osiagniecia.txt")
For $i = 1 To $iIloscOsiagniec ;wpisauje wszystkie osiagniecia jako nie wykonane
_FileWriteToLine($sPatch & "osiagniecia.txt", $i, _Crypt_EncryptData("0", $hKey, $calg_userkey))
Next
EndIf
Func __exit();on exit
zapisz() ;zapisuje wynikii i osiagniecia
zapisz_os()
EndFunc   ;==>__exit
wczytaj()
Func wczytaj() ;wczytuje wyniki
For $i = 0 To 19
$nick[$i] = BinaryToString(_Crypt_DecryptData(FileReadLine($sPatch & "wyniki.txt", $i + 1), $hKey, $calg_userkey))
Next
For $i = 20 To 39
$vscore_top[$i - 20] = Int(BinaryToString(_Crypt_DecryptData(FileReadLine($sPatch & "wyniki.txt", $i + 1), $hKey, $calg_userkey))) / 934
Next
For $i = 40 To 59
$vIloscklockow[$i - 40] = Int(BinaryToString(_Crypt_DecryptData(FileReadLine($sPatch & "wyniki.txt", $i + 1), $hKey, $calg_userkey))) / 934
Next
EndFunc   ;==>wczytaj
wczytaj_os()
Func wczytaj_os();wczytuje osiagniecia
For $i = 0 To $iIloscOsiagniec - 1
$vOsiagniecia[$i] = BinaryToString(_Crypt_DecryptData(FileReadLine($sPatch & "osiagniecia.txt", $i + 1), $hKey, $calg_userkey))
If BinaryToString(_Crypt_DecryptData(FileReadLine($sPatch & "osiagniecia.txt", $i + 1), $hKey, $calg_userkey)) <> "0" Then
$vCzyOsiagniecie[$i] = 1
Else
$vCzyOsiagniecie[$i] = 0
EndIf
Next
EndFunc   ;==>wczytaj_os
Func zapisz_os() ;zapisuje osiagniecia
For $i = 0 To $iIloscOsiagniec - 1
_FileWriteToLine($sPatch & "osiagniecia.txt", $i + 1, _Crypt_EncryptData(String($vOsiagniecia[$i]), $hKey, $calg_userkey), 1)
Next
EndFunc   ;==>zapisz_os
Opt("MustDeclareVars", 1)
_GDIPlus_Startup()
Global $nMsgBox
Global $bTrening = False ;czy trub treningowy
Global $vTop20[20] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ;do wynikow ale chyba nie potrzebne
Global $hB1 ;handle do pozniejszych buttonow w pauzie i na koncu gry
Global $hB2
Global $hB3
Global $nMsg
Global $ilevel ;poziom
Global $timerosiagniecie ;timer odliczający czas pozostaly przy wyswietlaniu czy zdobyto osiagniecie
Global $timer, $timer2 ;inne timery
Global $iWymKlocka = 20 ; wymiary klocka w px
Global $iSpeedSpadania = 600 - 25 * $ilevel ;sybkosc spadania
Global $iWymX = 10 ;wymiary planszy
Global $iWymY = 25
Global $iAktualnyKlocek[2] ;aktulany klocek i tek, ktory bedzie pozniej
Global $iIloscKlockow = 0 ;ilosc klockow w talbicy powyzej
Global $vPlansza[11][26] ;rozmiar planszy +1
Global $vStats[7] = [0, 0, 0, 0, 0, 0, 0] ;statystyki wykorzystania klockow
Global $iCzasMiedzyClick = 65 ;czas ograniczajacy sprawdzanie ispressed
Global $iScore = 0 ;poczatkowe score
For $i = 0 To 9 ;wypelniamy tablice plansza wartosciami -1
For $ii = 0 To 24
$vPlansza[$i][$ii] = -1
Next
Next
Global $iObrot = 0 ;stopien obrotu chyba nie potrzebne
Global $iPolozenieX = 4 ;polozeneie startowe, a potem aktualne klocka
Global $iPolozenieY = 0
Global $iPolozenieX_tmp = 4 ;jedno polozenie wstecz
Global $iPolozenieY_tmp = 0
Dim $Color[7] = [0xFFFF0000, 0xFF888888, 0xFF00FFFF, 0xFFFF9900, 0xFFFF00FF, 0xFF0000FF, 0xFF00FF00] ;kolory klockow
For $i = 0 To 6 ;tworzenie bruch o tych kolorach
$Color[$i] = _GDIPlus_BrushCreateSolid($Color[$i])
Next
Global $hBrushTlo = _GDIPlus_BrushCreateSolid(0xFFFFFFFF) ;bialy
Global $hBrushTloBlack = _GDIPlus_BrushCreateSolid(0xFF000000);czrny
Global $hBrushRed = _GDIPlus_BrushCreateSolid(0xFFFF0000) ;czerw
Global $hPenGrey = _GDIPlus_PenCreate(0xFFEEEEEE) ;szary
Dim $vKlockiX_stand[7][4] = [[0, 0, 0, 0],[0, 1, 2, 1],[0, 1, 0, 1],[0, 0, 0, 1],[1, 1, 1, 0],[0, 1, 1, 2],[0, 1, 1, 2]] ;klocki wartosci stale bez obrotu
Dim $vKlockiY_stand[7][4] = [[0, 1, 2, 3],[0, 0, 0, 1],[0, 0, 1, 1],[0, 1, 2, 2],[0, 1, 2, 2],[1, 1, 0, 0],[0, 0, 1, 1]]
Dim $vKlockiX[7][4] = [[0, 0, 0, 0],[0, 1, 2, 1],[0, 1, 0, 1],[0, 0, 0, 1],[1, 1, 1, 0],[0, 1, 1, 2],[0, 1, 1, 2]];pozycje klockow, pozniej przetwarzane wraz z obrotem
Dim $vKlockiY[7][4] = [[0, 1, 2, 3],[0, 0, 0, 1],[0, 0, 1, 1],[0, 1, 2, 2],[0, 1, 2, 2],[1, 1, 0, 0],[0, 0, 1, 1]]
Dim $vMaxRozmiary[7] = [3, 2, 1, 2, 2, 2, 2] ;miejsce wokol ktorego ma sie wykonywac obrot klocka
Global $hGui = GUICreate("Tetris by Sopel", ($iWymKlocka + 1) * $iWymX + 210, ($iWymKlocka + 1) * $iWymY + 90) ;okno gry
Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
Global $bSiatka ;czy rysowac siatke
Global $nnMsg
Global $timerBonus ; timer do bonusow
Global $bczy4 = False ;jakies tam pomocnicze
Global $bBonus = False ; czy bonus
Global $odswierz ; timer do odwierzania napisów
Global $sPoziomyList ; lista exp na poziom
For $i = 0 To 19
$sPoziomyList &= 'Poziom ' & $i + 1 & ' - ' & $vScoreForLvl[$i] & @CRLF
Next
opcje()
Func opcje($lol = 0)
$gui_osiagniecia = GUICreate("Osiągnięcia gracza", 320, 330, @DesktopWidth / 2 - 100, @DesktopHeight / 2 - 220, $WS_CAPTION, BitOR($WS_EX_APPWINDOW, $WS_EX_TOOLWINDOW)) ;gui osgagniec
GUICtrlCreateLabel("Osiągnięcie", 50, 5, 60, 20)
For $i = 0 To $iIloscOsiagniec - 1
GUICtrlCreateLabel($i + 1, 1, 30 + 20 * $i, 230, 20)
If $vCzyOsiagniecie[$i] <> "0" Then GUICtrlCreateLabel($vOsiagniecia[$i], 50, 30 + 20 * $i, 300, 20)
Next
Global $hExit3 = GUICtrlCreateButton(" Powrót ", 40, 300, 100, 20)
Global $hReset2 = GUICtrlCreateButton(" Resetuj ", 180, 300, 100, 20)
Global $gui_top = GUICreate("Najlepsi z najlepszych", 250, 470, @DesktopWidth / 2 - 100, @DesktopHeight / 2 - 220, $WS_CAPTION, BitOR($WS_EX_APPWINDOW, $WS_EX_TOOLWINDOW)) ;gui wynikow
GUICtrlCreateLabel("Pozycja", 1, 5, 60, 20)
GUICtrlCreateLabel("Imie", 50, 5, 60, 20)
GUICtrlCreateLabel("Wynik", 120, 5, 60, 20)
GUICtrlCreateLabel("Klocków", 190, 5, 60, 20)
For $i = 0 To 19
GUICtrlCreateLabel($i + 1, 1, 30 + 20 * $i, 230, 20)
If $nick[$i] <> -1 Then GUICtrlCreateLabel($nick[$i], 50, 30 + 20 * $i, 230, 20)
If $vscore_top[$i] <> -1 Then GUICtrlCreateLabel($vscore_top[$i], 120, 30 + 20 * $i, 230, 20)
If $vIloscklockow[$i] <> -1 Then GUICtrlCreateLabel($vIloscklockow[$i], 190, 30 + 20 * $i, 230, 20)
Next
Global $hExit2 = GUICtrlCreateButton(" Powrót ", 20, 445, 100, 20)
Global $hReset = GUICtrlCreateButton(" Resetuj ", 130, 445, 100, 20)
Global $gui_opcje = GUICreate("Opcje - Tetris", 120, 400, @DesktopWidth / 2 - 60, @DesktopHeight / 2 - 150, $WS_CAPTION, BitOR($WS_EX_APPWINDOW, $WS_EX_TOOLWINDOW)) ;gui opcji
GUICtrlCreateGroup("Tryb gry", 5, 5, 110, 110)
Global $hRadio1 = GUICtrlCreateRadio(" Trening ", 10, 20, 100, 20)
Global $hRadio2 = GUICtrlCreateRadio(" Standardowy", 10, 40, 100, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
GUICtrlCreateGroup("Ustawienia", 5, 120, 110, 63)
Global $hSiatka = GUICtrlCreateCheckbox(" Linie siatki ", 10, 135, 100, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
Global $hDzwiek = GUICtrlCreateCheckbox(" Dźwięk ", 10, 157, 100, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
GUICtrlCreateLabel(" Poziom ", 40, 60, 50, 20)
Global $hSlider = GUICtrlCreateSlider(25, 85, 85, 20)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetLimit(-1, 20, 1)
Global $hLabel = GUICtrlCreateLabel(GUICtrlRead($hSlider), 10, 85, 15, 20)
Global $hOsiagniecia = GUICtrlCreateButton("Osiągnięcia", 10, 190, 100, 20)
Global $hPoziomy = GUICtrlCreateButton("Punkty na poziom", 10, 220, 100, 20)
Global $hPunktacja = GUICtrlCreateButton("Punktacja", 10, 250, 100, 20)
Global $hSterowanie = GUICtrlCreateButton("Sterowanie", 10, 280, 100, 20)
Global $hTop = GUICtrlCreateButton("Tablica wyników", 10, 310, 100, 20)
Global $hButton = GUICtrlCreateButton(" Graj ", 10, 340, 100, 20)
Global $hExit = GUICtrlCreateButton(" Wyjscie ", 10, 370, 100, 20)
GUISetState(@SW_SHOW, $gui_opcje)
While 1 ;petla komunikatow tych trzech gui
$nMsg = GUIGetMsg()
Switch $nMsg

Case $hExit
Exit
Case $hButton
ExitLoop
Case $hPoziomy
MsgBox(64, '', $sPoziomyList)
Case $hOsiagniecia
GUISetState(@SW_HIDE, $gui_opcje)
GUISetState(@SW_SHOW, $gui_osiagniecia)
While 1
$nnMsg = GUIGetMsg()
Switch $nnMsg
Case $hReset2
$nMsgBox = MsgBox(65, '', 'Czy jestes pewien, ze chcesz usunąć wszytkie osiągnięcia jakie dotychczas odkryłes?' & @CRLF & 'Zostaną one utracone na zawsze.')
Select
Case $nMsgBox = 1
_FileCreate($sPatch & "osiagniecia.txt")
For $i = 1 To $iIloscOsiagniec
_FileWriteToLine($sPatch & "osiagniecia.txt", $i, "0xF4", 1)
Next
wczytaj_os()
MsgBox(64, '', 'Osiągnięcia zostały zresetowane...')
GUISetState(@SW_HIDE, $gui_osiagniecia)
opcje()
EndSelect
Case $hExit3
ExitLoop
EndSwitch
Sleep(10)
WEnd
GUISetState(@SW_HIDE, $gui_osiagniecia)
GUISetState(@SW_SHOW, $gui_opcje)
Case $hPunktacja
MsgBox(64, '', 'Za kazdy upuszczony klocek otrzymujesz 3 punkty.' & @CRLF & 'Za 1 linie otrzymujesz 10 punktów' & @CRLF & 'Za 2 linie otrzymujesz 30 punktów' & @CRLF & 'Za 3 linie otrzymujesz 90 punktów' & @CRLF & 'Za 4 linie otrzymujesz 270 punktów + Bonus x3 na 20 sekund')
Case $hSterowanie
MsgBox(64, 'Sterowanie', 'Przesunięcie klocka w lewo - Strzłaka w lewo' & @CRLF & 'Przesunięcie klocka w prawo - Strzłaka w prawo' & @CRLF & 'Obrót klocka - Strzłaka w górę' & @CRLF & 'Opuszczenie klocka - Strzłaka w dół' & @CRLF & 'Włączenie/Wyłączenie pauzy - Klawisz P')
Case $hTop
GUISetState(@SW_HIDE, $gui_opcje)
GUISetState(@SW_SHOW, $gui_top)
While 1
$nnMsg = GUIGetMsg()
Switch $nnMsg
Case $hReset
$nMsgBox = MsgBox(65, '', 'Czy jestes pewien, ze chcesz usunąć wszytkie wyniki jakie dotychczas osiągnąłes?' & @CRLF & 'Zostaną one utracone na zawsze.')
Select
Case $nMsgBox = 1
_FileCreate($sPatch & "wyniki.txt")
For $i = 1 To 20
_FileWriteToLine($sPatch & "wyniki.txt", $i, "0x3BD82438", 1)
Next
For $i = 21 To 60
_FileWriteToLine($sPatch & "wyniki.txt", $i, "0xF4", 1)
Next
wczytaj()
MsgBox(64, '', 'Tablica wyników została zresetowana...')
GUISetState(@SW_HIDE, $gui_top)
opcje()
EndSelect
Case $hExit2
ExitLoop
EndSwitch
Sleep(10)
WEnd
GUISetState(@SW_HIDE, $gui_top)
GUISetState(@SW_SHOW, $gui_opcje)
EndSwitch
If BitAND(GUICtrlRead($hRadio1), $GUI_CHECKED) = $GUI_CHECKED And $bTrening = False Then
GUICtrlSetState($hSlider, $GUI_ENABLE)
$bTrening = True
ElseIf Not BitAND(GUICtrlRead($hRadio1), $GUI_CHECKED) = $GUI_CHECKED And $bTrening Then
GUICtrlSetState($hSlider, $GUI_DISABLE)
GUICtrlSetData($hSlider, 1)
$bTrening = False
EndIf
If BitAND(GUICtrlRead($hDzwiek), $GUI_CHECKED) = $GUI_CHECKED Then
$bDzwiek = True
Else
$bDzwiek = False
EndIf
If GUICtrlRead($hSlider) <> GUICtrlRead($hLabel) Then GUICtrlSetData($hLabel, GUICtrlRead($hSlider))
Sleep(20)
WEnd
$ilevel = GUICtrlRead($hSlider)
GUISetState(@SW_HIDE, $gui_opcje)
$bSiatka = GUICtrlRead($hSiatka)
If $lol = 1 Then Return
Sleep(20)
main()
EndFunc   ;==>opcje
main()
Func main()
$iPolozenieX_tmp2 = $iPolozenieX
$iSpeedSpadania = 600 - 25 * $ilevel
GUISetState(@SW_SHOW, $hGui)
_GDIPlus_GraphicsClear($hGraphic)
_GDIPlus_GraphicsFillRect($hGraphic, 10, 10, ($iWymKlocka + 1) * $iWymX - 1, ($iWymKlocka + 1) * $iWymY - 1, $hBrushTlo) ;rysowanie sekcji na gui
_GDIPlus_GraphicsFillRect($hGraphic, 20 + ($iWymKlocka + 1) * $iWymX, 10, 180, ($iWymKlocka + 1) * $iWymY + 70, $hBrushTlo)
_GDIPlus_GraphicsFillRect($hGraphic, 10, ($iWymKlocka + 1) * $iWymY + 20, ($iWymKlocka + 1) * $iWymX - 1, 60, $hBrushTlo)
If $bSiatka = $GUI_CHECKED Then
For $i = 1 To 9
_GDIPlus_GraphicsDrawLine($hGraphic, $i * ($iWymKlocka + 1) + 9, 10, $i * ($iWymKlocka + 1) + 9, ($iWymKlocka + 1) * $iWymY + 8, $hPenGrey)
Next
For $i = 1 To 24
_GDIPlus_GraphicsDrawLine($hGraphic, 10, $i * ($iWymKlocka + 1) + 9, $iWymX * ($iWymKlocka + 1) + 8, $i * ($iWymKlocka + 1) + 9, $hPenGrey)
Next
EndIf
If $bDzwiek Then
Beep(300, 800) ;beepy przed startem, nie wiem dlaczgo z glosnika a nie ze speakera
Beep(200, 800)
Beep(100, 800)
EndIf
rysujstaty()
If $bTrening Then _GDIPlus_GraphicsDrawString($hGraphic, "Trening!", 40 + ($iWymKlocka + 1) * $iWymX, ($iWymKlocka + 1) * $iWymY + 30, "Courier New", 20)
$timer = TimerInit() ;timerry...
$timer2 = TimerInit()
$timerBonus = TimerInit()
$odswierz = TimerInit()
$bczy5 = True
While 1
If GUIGetMsg() = -3 Then pause()
If $bczy4 Then ; czy tekst "zdobyto osiagniecie" ma byc jeszcze pokazywany
If TimerDiff($timerosiagniecie) > 5000 Then
_GDIPlus_GraphicsFillRect($hGraphic, 10, ($iWymKlocka + 1) * $iWymY + 20, ($iWymKlocka + 1) * $iWymX - 1, 60, $hBrushTlo)
$bczy4 = False
EndIf
EndIf
If $bBonus And TimerDiff($odswierz) > 500 Then ; czy ma byc pokazywany tekt bonusu
_GDIPlus_GraphicsFillRect($hGraphic, 20 + ($iWymKlocka + 1) * $iWymX, ($iWymKlocka + 1) * $iWymY + 20 - 60, 180, 70, $hBrushTlo)
If Round($iCzasBonus / 1000) - Round(TimerDiff($timerBonus) / 1000) > 0 Then _GDIPlus_GraphicsDrawString($hGraphic, "Bonus x3!!! " & @CRLF & Round($iCzasBonus / 1000) - Round(TimerDiff($timerBonus) / 1000), 15 + ($iWymKlocka + 1) * $iWymX, ($iWymKlocka + 1) * $iWymY + 20 - 60, "Courier New", 20)
$odswierz = TimerInit()
EndIf
If TimerDiff($timerBonus) > $iCzasBonus Then ; lpniec bonusu
$timerBonus = TimerInit()
$bBonus = False
$iCzasBonus = 0
EndIf
If Not WinActive("Tetris by Sopel") Then pause() ;pauza gdy gra nieaktywna
While $iIloscKlockow < 2
$iAktualnyKlocek[$iIloscKlockow] = Random(0, 6, 1) ;losowanie kolejnych klockow
$iIloscKlockow += 1
rysujstaty() ;przerysowanie statystyk
If $vStats[0] + $vStats[1] + $vStats[2] + $vStats[3] + $vStats[4] + $vStats[5] + $vStats[6] > 500 Then ;sprawdzanie osiagniec 0-2
$vCzyOsiagniecie[0] = 1
SprawdzOsiagniecia(0)
EndIf
If $vStats[0] + $vStats[1] + $vStats[2] + $vStats[3] + $vStats[4] + $vStats[5] + $vStats[6] > 2000 Then
$vCzyOsiagniecie[1] = 1
SprawdzOsiagniecia(1)
EndIf
If $vStats[0] + $vStats[1] + $vStats[2] + $vStats[3] + $vStats[4] + $vStats[5] + $vStats[6] > 5000 Then
$vCzyOsiagniecie[2] = 1
SprawdzOsiagniecia(2)
EndIf
WEnd
$iSpeedSpadania = 600 - 25 * $ilevel
If TimerDiff($timer2) > $iCzasMiedzyClick Then ;ograniczenie ispressed
If _IsPressed('50') Then pause() ;pauza
If _IsPressed('25') Then ;lewo
$iPolozenieX -= 1
kolizja_sciana($iAktualnyKlocek[0])
If kolizja($iAktualnyKlocek[0]) Then
$iPolozenieX += 1
Else
rysuj()
EndIf ;left
EndIf
If _IsPressed('27') Then ;prawo
$iPolozenieX += 1
kolizja_sciana($iAktualnyKlocek[0])
If kolizja($iAktualnyKlocek[0]) Then
$iPolozenieX -= 1
Else
rysuj()
EndIf
EndIf
;right
If _IsPressed('26') Then ;gora
Send("{UP up}") ; nie wiem czy to cos zmienia, ale ydaje mi sie ze jest lekko lepiej (nie obraca podwojnie przy dluzszym klicku)
obroc_prawo($iAktualnyKlocek[0])
EndIf;gora
If _IsPressed('28') Then ;dol
$iSpeedSpadania = 20 ;dol
rysuj()
EndIf
$timer2 = TimerInit()
EndIf

If TimerDiff($timer) > $iSpeedSpadania Then ; opuszczenie o 1 w dol
$iPolozenieY += 1
If kolizja($iAktualnyKlocek[0]) Then
$iPolozenieY -= 1
_next()
EndIf
rysuj()
$timer = TimerInit()
EndIf
Sleep(3)
WEnd
EndFunc   ;==>main
Func obroc_prawo($klocek) ;obracanie w prawo
Local $tmp[4]
rysuj_delete()
For $i = 0 To 3
$tmp[$i] = $vKlockiX[$klocek][$i]
$vKlockiX[$klocek][$i] = $vMaxRozmiary[$klocek] - $vKlockiY[$klocek][$i]
$vKlockiY[$klocek][$i] = $tmp[$i]
Next
If $iObrot = 4 Then $iObrot = 1
kolizja_sciana($klocek) ;sprawdzanie kolizji
If kolizja($klocek) Then obroc_lewo($klocek);drugie sprawdznie kolizji
rysuj(4)
EndFunc   ;==>obroc_prawo
Func obroc_lewo($klocek) ;obracanie w lewo
Local $tmp[4]
For $i = 0 To 3
$tmp[$i] = $vKlockiY[$klocek][$i]
$vKlockiY[$klocek][$i] = $vMaxRozmiary[$klocek] - $vKlockiX[$klocek][$i]
$vKlockiX[$klocek][$i] = $tmp[$i]
Next
If $iObrot = 0 Then $iObrot = 4
EndFunc   ;==>obroc_lewo
Func kolizja($klocek2) ;sprawdzanie kolizji
For $ii = 0 To 3
If $vPlansza[$iPolozenieX + $vKlockiX[$klocek2][$ii]][$iPolozenieY + $vKlockiY[$klocek2][$ii]] > -1 Then Return True
Next
Return False
EndFunc   ;==>kolizja
Func kolizja_sciana($klocek3) ;drugie spradzanie kolizji (w tym czy koniec gry)
For $ii = 0 To 3
If $iPolozenieX + $vKlockiX[$klocek3][$ii] > $iWymX - 1 Then $iPolozenieX = $iWymX - 1 - $vKlockiX[$klocek3][$ii]
If $iPolozenieY + $vKlockiY[$klocek3][$ii] < 0 Then $iPolozenieY = 0 - $vKlockiY[$klocek3][$ii]
If $iPolozenieX + $vKlockiX[$klocek3][$ii] < 0 Then $iPolozenieX = 0 - $vKlockiX[$klocek3][$ii]
If $iPolozenieY + $vKlockiY[$klocek3][$ii] > $iWymY - 1 Then
$iPolozenieY = $iWymY - 1 - $vKlockiY[$klocek3][$ii]
_next()
Return True
EndIf
Next
Return False
EndFunc   ;==>kolizja_sciana
Func _IsPressed($sHexKey, $vDLL = 'user32.dll') ;zeby nie includowac calego misc
Local $a_R = DllCall($vDLL, "short", "GetAsyncKeyState", "int", '0x' & $sHexKey)
Return BitAND($a_R[0], 0x8000) <> 0
EndFunc   ;==>_IsPressed
Func rysuj_delete();usowanie tylko klocka
For $ii = 0 To 3
_GDIPlus_GraphicsFillRect($hGraphic, 10 + ($iPolozenieX_tmp * ($iWymKlocka + 1)) + ($iWymKlocka + 1) * ($vKlockiX[$iAktualnyKlocek[0]][$ii]), 10 + ($iPolozenieY_tmp * ($iWymKlocka + 1)) + ($iWymKlocka + 1) * ($vKlockiY[$iAktualnyKlocek[0]][$ii]), $iWymKlocka, $iWymKlocka, $hBrushTlo)
Next
EndFunc   ;==>rysuj_delete
Func rysuj_create() ;rysowanie tylko klocka
For $ii = 0 To 3
_GDIPlus_GraphicsFillRect($hGraphic, 10 + ($iPolozenieX * ($iWymKlocka + 1)) + ($iWymKlocka + 1) * ($vKlockiX[$iAktualnyKlocek[0]][$ii]), 10 + ($iPolozenieY * ($iWymKlocka + 1)) + ($iWymKlocka + 1) * ($vKlockiY[$iAktualnyKlocek[0]][$ii]), $iWymKlocka, $iWymKlocka, $Color[$iAktualnyKlocek[0]])
Next
EndFunc   ;==>rysuj_create
Func rysuj($cale = 0) ;rysowanie calego gui, bez statow
If $cale <> 4 Then ;klocek xamalowanie
For $ii = 0 To 3
_GDIPlus_GraphicsFillRect($hGraphic, 10 + ($iPolozenieX_tmp * ($iWymKlocka + 1)) + ($iWymKlocka + 1) * ($vKlockiX[$iAktualnyKlocek[0]][$ii]), 10 + ($iPolozenieY_tmp * ($iWymKlocka + 1)) + ($iWymKlocka + 1) * ($vKlockiY[$iAktualnyKlocek[0]][$ii]), $iWymKlocka, $iWymKlocka, $hBrushTlo)
Next
EndIf
For $ii = 0 To 3 ;klocek rysowanie
_GDIPlus_GraphicsFillRect($hGraphic, 10 + ($iPolozenieX * ($iWymKlocka + 1)) + ($iWymKlocka + 1) * ($vKlockiX[$iAktualnyKlocek[0]][$ii]), 10 + ($iPolozenieY * ($iWymKlocka + 1)) + ($iWymKlocka + 1) * ($vKlockiY[$iAktualnyKlocek[0]][$ii]), $iWymKlocka, $iWymKlocka, $Color[$iAktualnyKlocek[0]])
Next
$iPolozenieX_tmp = $iPolozenieX
$iPolozenieY_tmp = $iPolozenieY
If $cale = 1 Or $cale = 2 Then ;przerysowanie calej planszy
For $i = 0 To 9
For $ii = 0 To 24
If $vPlansza[$i][$ii] > -1 Then
_GDIPlus_GraphicsFillRect($hGraphic, 10 + (($iWymKlocka + 1) * $i), 10 + (($iWymKlocka + 1) * $ii), $iWymKlocka, $iWymKlocka, $Color[$vPlansza[$i][$ii]])
Else
_GDIPlus_GraphicsFillRect($hGraphic, 10 + (($iWymKlocka + 1) * $i), 10 + (($iWymKlocka + 1) * $ii), $iWymKlocka, $iWymKlocka, $hBrushTlo)
EndIf
Next
Next
EndIf
Return
EndFunc   ;==>rysuj
Func _next()
If $bDzwiek = True Then Beep(149, 50)
For $ii = 0 To 3
$vPlansza[$iPolozenieX + $vKlockiX[$iAktualnyKlocek[0]][$ii]][$iPolozenieY + $vKlockiY[$iAktualnyKlocek[0]][$ii]] = $iAktualnyKlocek[0]
Next

$iIloscKlockow = 1
$vStats[$iAktualnyKlocek[0]] += 1
$iAktualnyKlocek[0] = $iAktualnyKlocek[1]
$iPolozenieX_tmp2 = $iPolozenieX
$iPolozenieX = 4
$iPolozenieY = 0
$iPolozenieX_tmp = 4
$iPolozenieY_tmp = 0
$iScore += 3
If $bBonus Then $iScore += 6
$iObrot = 0
For $i = 0 To 6
For $ii = 0 To 3
$vKlockiX[$i][$ii] = $vKlockiX_stand[$i][$ii]
$vKlockiY[$i][$ii] = $vKlockiY_stand[$i][$ii]
Next
Next
Local $lol2 = czylinia() ;sprawdzenie poelnosci linii
If $lol2 Then ;jesli tak to rysuje cala plansze
rysuj(1)
ElseIf Not $lol2 Then ;jesli nie to tylko ostatni klocek
rysuj_create()
EndIf
If $bTrening = False Then ;jesli nie ma treningu to spradzaa levele
For $i = 0 To 19
;~  If $iScore >= 100 * (2 ^ $i) Then $ilevel = $i + 1
If $iScore >= $vScoreForLvl[$i] Then $ilevel = $i + 1
Next
EndIf
$iSpeedSpadania = 600 - 25 * $ilevel
If kolizja($iAktualnyKlocek[0]) Then koniecgry() ; jesli kolizja to koniec gry
EndFunc   ;==>_next

Func czylinia() ;sprwdza pelnosc jakiejs linii
Local $licznik ;pomocnicze
Local $czy2 = False
Local $vKolory1[7]
Local $wykladnik = 1
Local $czy = False
For $i = 0 To 24
For $ii = 0 To 6
$vKolory1[$ii] = 0
Next
$czy2 = True
$licznik = 0
For $ii = 0 To 9 ;sprawdza pelnosc
If $vPlansza[$ii][$i] > -1 Then $licznik += 1
Next
If $licznik = 10 Then ;jesli tak
For $ii = 0 To 9
$vKolory1[$vPlansza[$ii][$i]] = 1
Next
If $vKolory1[0] + $vKolory1[1] + $vKolory1[2] + $vKolory1[3] + $vKolory1[4] + $vKolory1[5] + $vKolory1[6] = 7 Then ;sprawdzenie osiagniec
$vCzyOsiagniecie[12] = 1
SprawdzOsiagniecia(12)
EndIf
If $i < 6 Then
$vCzyOsiagniecie[11] = 1
SprawdzOsiagniecia(11)
EndIf
$czy = True
For $b = 1 To 9
If $vPlansza[$b - 1][$i] <> $vPlansza[$b][$i] Then $czy2 = False

Next
If $czy2 = True Then ;sprawdzenie osiagniecia
$vCzyOsiagniecie[4 + $vPlansza[1][$i]] = 1
SprawdzOsiagniecia(4 + $vPlansza[1][$i])
EndIf
For $a = $i To 1 Step -1
For $aa = 0 To 9
$vPlansza[$aa][$a] = $vPlansza[$aa][$a - 1]
Next

Next
For $aa = 0 To 9
$vPlansza[$aa][0] = -1
Next
$wykladnik += 1
EndIf
Next
If $wykladnik > 1 Then ;dodanie punktów za linie
If $bBonus Then
$iScore += (10 * (3 ^ ($wykladnik - 2))) * 3
Else
$iScore += (10 * (3 ^ ($wykladnik - 2)))
EndIf
EndIf
If $wykladnik = 5 Then
bonus() ;bonus jesli na raz poszly 4 linie
EndIf
Return $czy
EndFunc   ;==>czylinia
Func pause() ;pauza
_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, ($iWymKlocka + 1) * $iWymX + 210, ($iWymKlocka + 1) * $iWymY + 90, $hBrushTlo) ;narysowanie okna pauzy
_GDIPlus_GraphicsDrawString($hGraphic, "PAUZA", (($iWymKlocka + 1) * $iWymX + 210) / 2 - 90, 100, "Courier New", 40)
$hB1 = GUICtrlCreateButton("Jeszcze raz", (($iWymKlocka + 1) * $iWymX + 210) / 2 - 100, 150, 200, 40) ;3 buttony
$hB2 = GUICtrlCreateButton("Opcje", (($iWymKlocka + 1) * $iWymX + 210) / 2 - 100, 200, 200, 40)
$hB3 = GUICtrlCreateButton("Wyjscie", (($iWymKlocka + 1) * $iWymX + 210) / 2 - 100, 250, 200, 40)
Sleep(200)
While 1 ;petla kom.
If Not WinActive("Tetris by Sopel") Then $bCzyKoniec = True
If $bCzyKoniec = True And WinActive("Tetris by Sopel") Then
$bCzyKoniec = False
delete()
pause()
EndIf
$nMsg = GUIGetMsg()
Switch $nMsg
Case $hB1
delete()
czysc()
main()
Case $hB2
delete()
GUISetState(@SW_HIDE, $hGui)
czysc()
opcje(1)
main()
Case $hB3
Exit
EndSwitch
If _IsPressed('50') Then ExitLoop
Sleep(10)
WEnd
delete() ;usuwa buttony
redraw() ;rysuje plansze
Return
EndFunc   ;==>pause
Func redraw() ;przerysowanie planszy
$bczy5 = True
_GDIPlus_GraphicsClear($hGraphic)
_GDIPlus_GraphicsFillRect($hGraphic, 10, 10, ($iWymKlocka + 1) * $iWymX, ($iWymKlocka + 1) * $iWymY, $hBrushTlo)
_GDIPlus_GraphicsFillRect($hGraphic, 20 + ($iWymKlocka + 1) * $iWymX, 10, 180, ($iWymKlocka + 1) * $iWymY + 70, $hBrushTlo)
If $bTrening Then _GDIPlus_GraphicsDrawString($hGraphic, "Trening!", 40 + ($iWymKlocka + 1) * $iWymX, ($iWymKlocka + 1) * $iWymY + 30, "Courier New", 20)
If $bSiatka = $GUI_CHECKED Then
For $i = 1 To 9
_GDIPlus_GraphicsDrawLine($hGraphic, $i * ($iWymKlocka + 1) + 9, 10, $i * ($iWymKlocka + 1) + 9, ($iWymKlocka + 1) * $iWymY + 8, $hPenGrey)
Next
For $i = 1 To 24
_GDIPlus_GraphicsDrawLine($hGraphic, 10, $i * ($iWymKlocka + 1) + 9, $iWymX * ($iWymKlocka + 1) + 8, $i * ($iWymKlocka + 1) + 9, $hPenGrey)
Next
EndIf
rysuj(1)
rysujstaty()
EndFunc   ;==>redraw
Func rysujstaty() ;rysuje statystyki
_GDIPlus_GraphicsFillRect($hGraphic, 10, ($iWymKlocka + 1) * $iWymY + 20, ($iWymKlocka + 1) * $iWymX - 1, 60, $hBrushTlo)
If $bczy4 = True Then _GDIPlus_GraphicsDrawString($hGraphic, "Zdobyłes osiągnięcie!", 16, ($iWymKlocka + 1) * $iWymY + 50, "Arial", 14)
If $iScore - $iScoreTmp > 0 Then
If StringLen($iScore - $iScoreTmp) + 1 > 2 And 10 + $iPolozenieX_tmp2 * ($iWymKlocka + 1) + (StringLen($iScore - $iScoreTmp) + 1) * 10 > 10 + ($iWymKlocka + 1) * $iWymX Then ;pokazanie ile ppkt zostalo dodanych (pod klcokiem)
_GDIPlus_GraphicsDrawString($hGraphic, "+" & $iScore - $iScoreTmp, 10 + $iPolozenieX_tmp2 * ($iWymKlocka + 1) - (StringLen($iScore - $iScoreTmp) - 1) * 10, ($iWymKlocka + 1) * $iWymY + 20, "Courier New", 10)
Else
_GDIPlus_GraphicsDrawString($hGraphic, "+" & $iScore - $iScoreTmp, 10 + $iPolozenieX_tmp2 * ($iWymKlocka + 1), ($iWymKlocka + 1) * $iWymY + 20, "Courier New", 10)
EndIf ;end 
EndIf
$iScoreTmp = $iScore
_GDIPlus_GraphicsFillRect($hGraphic, 30 + ($iWymKlocka + 1) * $iWymX, 20, 170, 20, $hBrushTlo)
_GDIPlus_GraphicsDrawString($hGraphic, "Wynik: " & $iScore, 30 + ($iWymKlocka + 1) * $iWymX, 20, "Courier New", 14) ;inne staty
_GDIPlus_GraphicsFillRect($hGraphic, 30 + ($iWymKlocka + 1) * $iWymX, 50, 170, 20, $hBrushTlo)
_GDIPlus_GraphicsDrawString($hGraphic, "Poziom: " & $ilevel, 30 + ($iWymKlocka + 1) * $iWymX, 50, "Courier New", 14)
_GDIPlus_GraphicsFillRect($hGraphic, 30 + ($iWymKlocka + 1) * $iWymX, 100, 170, 20, $hBrushTlo)
_GDIPlus_GraphicsDrawString($hGraphic, "Statystyki:", 30 + ($iWymKlocka + 1) * $iWymX, 100, "Courier New", 14)
For $i = 0 To 6 ;statystyki zuzycia klockow
If $bczy5 = True Then
If $ii = 6 Then $bczy5 = False
For $ii = 0 To 3
_GDIPlus_GraphicsFillRect($hGraphic, 30 + ($iWymKlocka + 1) * $iWymX + (($iWymKlocka / 4 + 1) * ($vKlockiX_stand[$i][$ii])), 130 + ($i * 30) + ($iWymKlocka / 4 + 1) * ($vKlockiY_stand[$i][$ii]), $iWymKlocka / 4, $iWymKlocka / 4, $Color[$i])
Next
EndIf
_GDIPlus_GraphicsFillRect($hGraphic, 70 + ($iWymKlocka + 1) * $iWymX, 129 + ($i * 29), 120, 20, $hBrushTlo)
_GDIPlus_GraphicsDrawString($hGraphic, $vStats[$i], 70 + ($iWymKlocka + 1) * $iWymX, 129 + ($i * 29), "Courier New", 14)
Next
_GDIPlus_GraphicsFillRect($hGraphic, 34 + ($iWymKlocka + 1) * $iWymX, 362, 150, 30, $hBrushTlo)
_GDIPlus_GraphicsDrawString($hGraphic, "Następny: ", 34 + ($iWymKlocka + 1) * $iWymX, 362, "Courier New", 20) ;nastepny kloc
_GDIPlus_GraphicsFillRect($hGraphic, 80 + ($iWymKlocka + 1) * $iWymX, 402, (($iWymKlocka + 1) * 4), (($iWymKlocka + 1) * 4), $hBrushTlo)
For $ii = 0 To 3
_GDIPlus_GraphicsFillRect($hGraphic, 80 + ($iWymKlocka + 1) * $iWymX + (($iWymKlocka + 1) * ($vKlockiX[$iAktualnyKlocek[1]][$ii])), 402 + ($iWymKlocka + 1) * ($vKlockiY[$iAktualnyKlocek[1]][$ii]), $iWymKlocka, $iWymKlocka, $Color[$iAktualnyKlocek[1]])
Next
_GDIPlus_GraphicsFillRect($hGraphic, 20 + ($iWymKlocka + 1) * $iWymX, 100 + ($i * 30) + ($iWymKlocka / 4 + 1) * 4, 170, 20, $hBrushTlo)
_GDIPlus_GraphicsDrawString($hGraphic, "Razem: " & $vStats[0] + $vStats[1] + $vStats[2] + $vStats[3] + $vStats[4] + $vStats[5] + $vStats[6], 20 + ($iWymKlocka + 1) * $iWymX, 100 + ($i * 30) + ($iWymKlocka / 4 + 1) * 4, "Courier New", 14)
;@up, razem zuzytych klocow
;@down czy bonus
;@2down czy trening
If $bBonus Then _GDIPlus_GraphicsDrawString($hGraphic, "Bonus x3!!! " & @CRLF & Round($iCzasBonus / 1000) - Round(TimerDiff($timerBonus) / 1000), 15 + ($iWymKlocka + 1) * $iWymX, ($iWymKlocka + 1) * $iWymY + 20 - 60, "Courier New", 20)

EndFunc   ;==>rysujstaty
Func koniecgry($lol3 = 0) ;nkoenic gry
If $lol3 = 0 Then
For $ii = 0 To 100
For $i = 0 To 300 ;fajne zamalowanie ekranu

_GDIPlus_GraphicsFillRect($hGraphic, Random(0, ($iWymKlocka + 1) * $iWymX + 210, 1), Random(0, ($iWymKlocka + 1) * $iWymY + 90, 1), 7, 7, $hBrushTlo)
Next
If _IsPressed("0D") Then ExitLoop
Next
EndIf
_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 420, 900, $hBrushTlo)
_GDIPlus_GraphicsDrawString($hGraphic, "Koniec gry", (($iWymKlocka + 1) * $iWymX + 210) / 2 - 105, 10, "Courier New", 26) ; wyniki
_GDIPlus_GraphicsDrawString($hGraphic, "Wynik: " & $iScore, 10, 50, "Courier New", 26)
_GDIPlus_GraphicsDrawString($hGraphic, "Statystyki: ", 10, 90, "Courier New", 26)
For $i = 0 To 6 ;staty klockow
For $ii = 0 To 3
_GDIPlus_GraphicsFillRect($hGraphic, 30 + (($iWymKlocka / 2 + 1) * ($vKlockiX[$i][$ii])), 135 + ($i * 55) + ($iWymKlocka / 2 + 1) * ($vKlockiY[$i][$ii]), $iWymKlocka / 2, $iWymKlocka / 2, $Color[$i])
_GDIPlus_GraphicsDrawString($hGraphic, $vStats[$i], 30 + $iWymKlocka / 2 * 5, 138 + ($i * 55), "Courier New", 14)
Next
Next
_GDIPlus_GraphicsDrawString($hGraphic, "Razem: " & $vStats[0] + $vStats[1] + $vStats[2] + $vStats[3] + $vStats[4] + $vStats[5] + $vStats[6], 10, 138 + (6.5 * 55), "Courier New", 14)
If Not $bTrening And $lol3 = 0 Then dopiszwynik() ;zapisanie wyniku
$hB1 = GUICtrlCreateButton("Jeszcze raz", 167, 150, 200, 40) ;tworzenie kontrolek
$hB2 = GUICtrlCreateButton("Opcje", 167, 200, 200, 40)
$hB3 = GUICtrlCreateButton("Wyjscie", 167, 250, 200, 40)
While 1 ;petla kom.
If Not WinActive("Tetris by Sopel") Then $bCzyKoniec = True
If $bCzyKoniec = True And WinActive("Tetris by Sopel") Then
$bCzyKoniec = False
delete()
koniecgry(1)
EndIf
$nMsg = GUIGetMsg()
Switch $nMsg
Case $hB1
$bCzyKoniec = False
delete()
czysc()
main()
Case $hB2
$bCzyKoniec = False
delete()
GUISetState(@SW_HIDE, $hGui)
czysc()
opcje(1)
main()
Case $hB3
Exit
EndSwitch
Sleep(20)
WEnd
EndFunc   ;==>koniecgry
Func delete() ;usuwanie kontrolek
GUICtrlDelete($hB1)
GUICtrlDelete($hB2)
GUICtrlDelete($hB3)
EndFunc   ;==>delete
Func czysc() ;czyszczenie danych po rozpoczeciu nowe jgry
$iObrot = 0
$iPolozenieX = 4
$iPolozenieY = 0
$iPolozenieX_tmp = 4
$iPolozenieY_tmp = 0
Dim $vStats[7] = [0, 0, 0, 0, 0, 0, 0]
$iScore = 0
$ilevel = GUICtrlRead($hSlider)
For $i = 0 To 9
For $ii = 0 To 24
$vPlansza[$i][$ii] = -1
Next
Next
$iAktualnyKlocek[0] = 0
$iAktualnyKlocek[1] = 0
EndFunc   ;==>czysc
Func dopiszwynik() ;zapisanie wyniku do pamieci wynikow najlepsyzch
Local $iPoz = 0
Local $lol3
For $i = 0 To 19
If $iScore > $vscore_top[$i] Then
$iPoz = $i
Do
$lol3 = InputBox("Zająłes " & $iPoz + 1 & ' miejsce', 'Gratulacje! Zająłes ' & $iPoz + 1 & ' miejsce' & @CR & @CR & @CR & 'Podaj swoje imie: ')
If @error = 1 Then Return
If StringLen($lol3) < 2 Or StringLen($lol3) > 10 Then MsgBox(64, '', 'Imie nie moze być krótsze niz 2 znaki i dłuzsze niz 10.')
Until StringLen($lol3) >= 2 And StringLen($lol3) <= 10
For $ii = 18 To $iPoz Step -1
$vscore_top[$ii + 1] = $vscore_top[$ii]
$nick[$ii + 1] = $nick[$ii]
$vIloscklockow[$ii + 1] = $vIloscklockow[$ii]
Next
$nick[$iPoz] = $lol3
$vscore_top[$iPoz] = String($iScore)
$vIloscklockow[$iPoz] = String($vStats[0] + $vStats[1] + $vStats[2] + $vStats[3] + $vStats[4] + $vStats[5] + $vStats[6])
ExitLoop
EndIf
Next
EndFunc   ;==>dopiszwynik
Func _FileCreate($sFilePath) ;z file.au3 aby nie includowac calego
Local $hOpenFile = FileOpen($sFilePath, $FO_OVERWRITE)
Local $hWriteFile = FileWrite($hOpenFile, "")
FileClose($hOpenFile)
EndFunc   ;==>_FileCreate

Func _FileWriteToLine($sFile, $iLine, $sText, $fOverWrite = 0) ;to samo
If $iLine <= 0 Then Return SetError(4, 0, 0)
If Not IsString($sText) Then
$sText = String($sText)
If $sText = "" Then Return SetError(6, 0, 0)
EndIf
If $fOverWrite <> 0 And $fOverWrite <> 1 Then Return SetError(5, 0, 0)
If Not FileExists($sFile) Then Return SetError(2, 0, 0)
Local $sRead_File = FileRead($sFile)
Local $aSplit_File = StringSplit(StringStripCR($sRead_File), @LF)
If UBound($aSplit_File) < $iLine Then Return SetError(1, 0, 0)
Local $hFile = FileOpen($sFile, $FO_OVERWRITE)
If $hFile = -1 Then Return SetError(3, 0, 0)
$sRead_File = ""
For $i = 1 To $aSplit_File[0]
If $i = $iLine Then
If $fOverWrite = 1 Then
If $sText <> '' Then $sRead_File &= $sText & @CRLF
Else
$sRead_File &= $sText & @CRLF & $aSplit_File[$i] & @CRLF
EndIf
ElseIf $i < $aSplit_File[0] Then
$sRead_File &= $aSplit_File[$i] & @CRLF
ElseIf $i = $aSplit_File[0] Then
$sRead_File &= $aSplit_File[$i]
EndIf
Next
FileWrite($hFile, $sRead_File)
FileClose($hFile)
Return 1
EndFunc   ;==>_FileWriteToLine
Func zapisz() ;zapisanie wynikow do pliku
For $i = 0 To 19
_FileWriteToLine($sPatch & "wyniki.txt", $i + 1, _Crypt_EncryptData($nick[$i], $hKey, $calg_userkey), 1)
Next
For $i = 20 To 39
_FileWriteToLine($sPatch & "wyniki.txt", $i + 1, _Crypt_EncryptData(String($vscore_top[$i - 20] * 934), $hKey, $calg_userkey), 1)
Next
For $i = 40 To 59
_FileWriteToLine($sPatch & "wyniki.txt", $i + 1, _Crypt_EncryptData(String($vIloscklockow[$i - 40] * 934), $hKey, $calg_userkey), 1)
Next
EndFunc   ;==>zapisz
Func bonus() ;wlaczenie bonusu
If $bBonus = True Then
$vCzyOsiagniecie[3] = 1
SprawdzOsiagniecia(3)
EndIf
$bBonus = True
$iCzasBonus += 20000 ;na 20 sek
EndFunc   ;==>bonus
Func SprawdzOsiagniecia($iNumber) ;spradzenie i dodanie osiągnięć do wykonanych
;0. opusć 500 klocków w jednej rundzie	 OK
;1. opusć 2000 klocków w jednej rundzie	 OK
;2. opusć 5000 klocków w jednej rundzie	 OK
;3. zdobycie kolejnego bonusu podczas jego trwania	 OK
;4-10. utworzenie linii z samych zielonych klocków (?) (to samo dla wszytkich innych) 2-8 OK
;11. ułozenie linii na wysokosci 20 lub wyzszej OK
;12. ulozyc linie która zawiera wszystkie siedem kolorow ( i jest zapełniona) OK
If $vCzyOsiagniecie[$iNumber] = True And $vOsiagniecia[$iNumber] = "0" Then
_GDIPlus_GraphicsDrawString($hGraphic, "Zdobyłes osiągnięcie!", 16, ($iWymKlocka + 1) * $iWymY + 50, "Arial", 14)
$timerosiagniecie = TimerInit()
$bczy4 = True
$vOsiagniecia[$iNumber] = $sTekst[$iNumber]
EndIf
EndFunc   ;==>SprawdzOsiagniecia

 

 

 

Piszcie opinie, pomysły, krytykujcie. Jestem otwarty na wszystkie sensowne posty.

Opublikowano

całkiem niezły tylko że po naciśnięciu strzałki w dól klocek spada do końca a chyba powinno być że spada szybciej do póki się trzyma strzałkę

chcesz może grafikę z mojego ?

 

;Script by ziuto
;Source-code Autoit v3
$User = InputBox("Twoj nick", "Podaj swoj nick", "tu go wpisz")
If $User = "ziuto" Then
$gui = GUICreate("User " & $User, 175, 100, -1, -1, 0x00080000)
$button_lubie_cie = GUICtrlCreateButton("Sam sie lubie", 50, 10)
$button_dam_ci_5_gwiazdek = GUICtrlCreateButton("Dam sobie 5 gwiazdek", 30, 40)
ElseIf $User <> "ziuto" Then
MsgBox(0, "Powitanie", "Siema " & $User)
$gui = GUICreate("User " & $User, 175, 100, -1, -1, 0x00080000)
$button_lubie_cie = GUICtrlCreateButton("Lubie cie ziuto", 47, 10)
$button_dam_ci_5_gwiazdek = GUICtrlCreateButton("Dam ci 5 gwiazdek ziuto", 25, 40)
EndIf
GUISetState(@SW_SHOW, $gui)
While $User = "ziuto"
$msg = GUIGetMsg()
Select
Case $msg = -3
ExitLoop
Case $msg = $button_lubie_cie
MsgBox(0, "Lubie sie", "Sam sie lubie :o")
Case $msg = $button_dam_ci_5_gwiazdek
MsgBox(0, "Dam sobie 5 gwiadek", "Ze bym to ja mogl sam sobie dac")
EndSelect
WEnd
While $User <> "ziuto"
$msg = GUIGetMsg()
Select
Case $msg = -3
ExitLoop
Case $msg = $button_lubie_cie
MsgBox(0, "Lubie cie", "A za co ?")
InputBox("A za co ?", "Za co mnie lubisz ?", "???")
MsgBox(0, "Za to", "Aha" & @CRLF & "Dobrze to wiedziec xD" & @CRLF & "Nq")
ShellExecute("http://www.mpcforum.pl/")
ExitLoop
Case $msg = $button_dam_ci_5_gwiazdek
ShellExecute("http://www.mpcforum.pl/user/259390-ziuto/")
EndSelect
WEnd


Opublikowano
całkiem niezły tylko że po naciśnięciu strzałki w dól klocek spada do końca a chyba powinno być że spada szybciej do póki się trzyma strzałkę

było dużo odmian tetrisa. W oryginalnej chyba jest tak jak zaimplementowalem.

 

chcesz może grafikę z mojego ?

Mógłbyś podesłać. kiedyś bym go może przerobił.

  • 2 tygodnie później...
Opublikowano

Kawał dobrego kodu :D Jedyne co mi nie pasi to właśnie ten klocek, który spada od razu. W każdym tetrisie przyspieszał jak się przycisk trzymało. Ale ogólnie miodzio. :P

Opublikowano

specjalnie nie robilem zamykania Xsem, od tego jest pauza [p]. Może jednak przyda się taka możliwość

 

Jedyne co mi nie pasi to właśnie ten klocek, który spada od razu.

Zrobię taką opcje w menu. Jest dużo różnych wersji tetrisa, może jeszcze pare z nich zaimplementuje w wolnym czasie.

 

@edit.

Te małe zmianki naniesione. powinno się grać wygodniej.

 

 

@down. Ciekawy pomysł. Może wykonam coś takiego ;)

  • 2 tygodnie później...
Opublikowano
Długo to pisałeś?

jakieś 6 dni, wyjdzie jakieś 20-25h

 

mi się najlepiej uczyć z innych kodów.

jak posiada jeszcze dużo wartościowych komentarzy to tym bardziej, bo poprzez analizę uczysz się więcej niż poprzez czytanie teorii i własne próby

  • 1 miesiąc temu...

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...