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

[KONKURS]Najlepszy tetris w AutoIt!


Rekomendowane odpowiedzi

  • Odpowiedzi 62
  • Dodano
  • Ostatniej odpowiedzi
Opublikowano

Ale jakos Gdi+ mnie nie satysfakcjonuje ;p

Powiem gdzie mam błąd: tablica planszy. No cholera nie ogarniam...

 

Chce stworzyć planszę podzieloną na dajmy na to 10x10 kwadratów więc tablica $plansza[10][10] ??

Opublikowano

ja zrobiłem margines wielkości 3 czyli zamiast np 10, 10 (no i pamiętaj, że taka tablica ma zakres 0-9 a nie 0-10 ;d) dalem 13, 13 (bo klocek "I" może być całkiem z lewej, a po obrocie będzie wystawał o 3 i tablica musi to chwilowo zmieścić, aby to sprawdzić. Przynajmniej u mnie tak musiałem zrobić), bo też gdzieś tak miałem błędy jeszcze przed sprawdzeniem czy klocek wychodzi poza, ale najlepiej zrobić większą talbice i sprawdzić czy dobrze działa i jeśli tak to próbować zmniejszać lub poprawiać kod gdzie indziej.

 

@down bardziej chodzi mi o to że jak spradzam kolizje to tylko istniejących klockówm i po obróceniu on się wydłuża wszerokość i wystaje dopóki nie zostanie sprawdzony i poprawiony, a do tego nie wiem dlaczego ale potrzebuje większej tablicy pol

Opublikowano

Jak obracasz klocka, to on powinien być na tej samej pozycji tylko obrócony ;] Z resztą piszcie po swojemu :P Wojtek, jak Ci coś nie działa, to zakładasz temat, albo piszesz na PW/GG ;) Nikt Ci nie da gotowego rozwiązania, ale pomóc jak najbardziej nawet jury może :) W końcu, macie się czegoś nauczyć :P

Opublikowano

Nie no PW do Ciebie niestety w tym wypadku odpada i już nie poratujesz jak zawsze bo jesteś w jury i jeszcze by ktoś pomysłał ,że mi kod podsyłasz :D

Opublikowano

Myślę, że hfaua chętnie pomoże, a przecież po to zorganizowaliśmy ten konkurs żebyście troszkę podszkolili się w AutoIt. ;)

(Mówię o pomocy, nie o dawaniu gotowego kodu)

Opublikowano

ja moze bym wzial udzial ale w gdi+ prawie nic nie umiem jedynie to co bylo w poradniku hfaua(dopiero w tedy 1 raz sie bawilem w to xD)

zrobilem mniej wiecej tyle (wszystko o parte na snake hfauy wiecej nie wiem czy tak moge..) :

- sterowanie jak w tetrisie

- klocek spadajacy tylko 1 narazie xD

- jakas beznadziejna plansza..

- plansza bez ograniczen..

no i nie wiem jak zrobic 4 glowne rzeczy brakujace

1. granice planszy i granice nowe gdy klocek spadnie

2. zeby klocek zostawal po spadnieciu

3. zeby z 1 funcki robiacej klocka moglo robic sie dowolna ilosc klockow

4. zeby wykrylo ze klocki wlini poziomej sa zapelnione i je usunelo a klocki wyzej opadly nizej

raczej bez tych rzeczy gra nie bedzie miala prawa dzialac wiec nie wie czy bede wstanie napisac taka gierke

a propo limines blocka przeszedlem calego oprucz trudnego poziomy nie moglem bossa pokonac bardzo fajna gra ale w ogl inna niz tetris..

 

;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

@up, przyda się tylko

_GdiPlus_GraphiscClear

_GdiPlus_BrushCreateSolid

_GDIPlus_GraphicsFillRect

_GDIPlus_GraphicsDrawString

ew. jeszcze pare dodatkowych.

 

Nie używałem WM_PAINT, bo szczerze nawet nie wiem kiedy jest wysyłany i do czego jest używany ;d.

Jest zalecany, ale nie konieczny.

Próbuj samemu różnych sposobów, masz jeszcze czas. Najlepiej robić to metodą prób i błędów.

1. sprawdzaj czy dana komórka tablicy nie zawiera już klocka (wartość np 1 przypisujesz do danej tablicy po opadnięciu klocka.)

2. Przechodź do następnego i poruszaj następnym.

3. To stwórz parametr w tej funkcji, który może przyjmować wartości w zakresie np 0-6 i wartość tego parametru będzie losowana podczas wywoływania tej funkcji. Dla każdego parametru napiszesz pod inny klocek. Najlepiej zrób sobie tablice, które zawiera polozenia klocka od danego punktu

(kawałek mojego kodu)

 

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

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]]

 

każda liczba oznacza odległość od punktu 0,0 kolejnych klocków

czyli dla drugiego klocka (pogróbiony) będzie to wyglądać tak

-- 0 1 2 3

0 X X X

1 -- X

2

3

 

Do obracania zrób sobie kolejne 3 różne zestawy pozcyji

4.sprawdzaj po kolei każdą linie czy suma ilości wartości równych zapełnionemu polu jest równa ilości kolumn

Opublikowano

Dobra, już kumam. Dzięki. Spróbuje tego użyć.

 

@edit, coś mi to nie działało. Zrobiłem to po swojemu na bazie sprawdzania aktywności okna.

 

 

 

@down To może coś źle robiłem. Bo ciągle mi wysyłał WM_PAINT nawet gdy okno było ciągle aktywne i nic się z nim nie działo. Dobra na razie nie będę się w to zagłębiał. Działa wszystko i jest OK.

Opublikowano

Zgłaszam się.

/ GA-970A-UD3 / FX-6300 / Sapphire Xtreme 5830 / OCZ ZS 550W / Brutus M23 /

| MPC Coders Team | MPC Gold Member | C#, C++, PHP, (N)ASM, AutoIT, Python, Java |

Opublikowano

@up, przyda się tylko

_GdiPlus_GraphiscClear

_GdiPlus_BrushCreateSolid

_GDIPlus_GraphicsFillRect

_GDIPlus_GraphicsDrawString

ew. jeszcze pare dodatkowych.

 

Nie używałem WM_PAINT, bo szczerze nawet nie wiem kiedy jest wysyłany i do czego jest używany ;d.

Jest zalecany, ale nie konieczny.

Próbuj samemu różnych sposobów, masz jeszcze czas. Najlepiej robić to metodą prób i błędów.

1. sprawdzaj czy dana komórka tablicy nie zawiera już klocka (wartość np 1 przypisujesz do danej tablicy po opadnięciu klocka.)

2. Przechodź do następnego i poruszaj następnym.

3. To stwórz parametr w tej funkcji, który może przyjmować wartości w zakresie np 0-6 i wartość tego parametru będzie losowana podczas wywoływania tej funkcji. Dla każdego parametru napiszesz pod inny klocek. Najlepiej zrób sobie tablice, które zawiera polozenia klocka od danego punktu

(kawałek mojego kodu)

 

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

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]]

 

każda liczba oznacza odległość od punktu 0,0 kolejnych klocków

czyli dla drugiego klocka (pogróbiony) będzie to wyglądać tak

-- 0 1 2 3

0 X X X

1 -- X

2

3

 

Do obracania zrób sobie kolejne 3 różne zestawy pozcyji

4.sprawdzaj po kolei każdą linie czy suma ilości wartości równych zapełnionemu polu jest równa ilości kolumn

A jednak tablice sa nie zbedne dlatego nauczylem sie ich i juz w pelni rozumiem ich dzialanie..

to narazie juz wiem jak zrobic 1 , 2 i 3 rzecz /// sprawdzone..

a do 4 jeszcze nie doszlem ale chyba juz dam sobie rade..

thx za pomoc

skoro juz mi wychodzi cos to sie zglaszam moze dam rade napisac w pozostalym czasie xD

 

a i mam jeszcze 1 problem jak zrobic zebym wybral jaki obszar ma odswiezac funkcja _GDIPlus_GraphicsClear

bo jak co sekunde odswieza cale okno to sie myga przy poruszaniu wiekszym od 1 klocka

 

@EDIT : @DOWN : @Sopelek997

ok zara zobacze bo teraz zrobilem kilka rzeczy i jak normalnie spadal klocek to juz myga

 

@EDIT2 : @DOWN : @Sopelek997

thx dziala..

 

@EDIT3 :

dodalem obrazkowe klocki wyglada prawie jak tetris standard :D

 

;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

Czyść za pomocą _GdiPlus_graphicsFillRect (zamalowywuj na kolor tła) tylko te elementy, które aktualnie zmianią stan, a te które go nie zmieniają zostaw w spokoju.

 

Bo chyba za pomocą GDI+ nie da rady zrobić podwójnego buforowania i trzeba sobie radzić inaczej.

 

@edit, oczywiście rysuj też tylko te elmenty, które trzeba.

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...