Skocz do zawartości
  • 0

Pomoc w zwiększaniu zmiennej o 1 gdy znajdzie pixel


fredziukus12
 Udostępnij

Pytanie

Witam chciał bym napisać skrypt który po znaleźieniu pixela zwiększa wartość zmiennej o 1 

jak do tej porty napisałem coś takiego :C ale niestety nie działa po mojej myśli a ja nie wiem jak powiedzieć programowi

"Gdy znajdziesz pixel czerwony  $i zwiększ o 1 i zapisz jej wartość " niestety on nawet nie wykonuje ruchu mimo tego 

że zmienna  w pewnym momęcie ma wartość 6 proszę o pomoc 

 

 

#include <MsgBoxConstants.au3>

While 1
    $zmienna = PixelSearch(158, 738,194, 765,0x9EC6E5)
    If IsArray($zmienna) = True Then
        For $i = 0 To 6 Step 1
            MsgBox($MB_SYSTEMMODAL, "", "znaleziono pixel red" & @CRLF & $i)
        Next
        MsgBox($MB_SYSTEMMODAL, "", "był juz 6 razy")
    EndIf
WEnd
If $i=6 Then
    MouseMove (0,0,1)
EndIf

 

Odnośnik do komentarza
Udostępnij na innych stronach

16 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Nic  nie robisz poza sprawdzaniem tej samej pozycji $zmienna  6x , by szukało w innym miejscu należy DODAĆ do odpowiedniego koordynatu  przesunięcie  o np +1 czy +10 pixeli 

 

Nie chce mi sie rozpisywać, mniej więcej to wygląda tak : 

 

$zmienna = $zmienna +10 

Np zmienna 10 zmienia się 

1 raz ma 10 

2 raz  ma 20

3 ma 30 

4 ma 40

5 ma 50

6 ma 60

jak masz tablicę to do każdej zmiennej którą potrzebujesz masz dodać tyle ma sie przesunąć. 

 

Edytowane przez Ktosiu

Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

@Ktosiu

 

Edytowałem kod w ten sposób 

 

While 1
    $zmienna = PixelSearch(158, 738,194, 765,0x9EC6E5)
    If IsArray($zmienna) = True Then
        $zmienna = $zmienna + 1
    EndIf
WEnd
If IsArray($zmienna) = 6 Then
    MouseMove (0,0,1)
EndIf

 

Ten drugi if się nie wykonuję ;/ chodziło mi o to aby ktoś wytumaczył mi jak zrobić taką funkcję 

żeby było to coś w stylu licznika że program liczy ile razy pojawił się kolor czerwony a jeśli pojawi się zielony to zaczyna liczyć od nowa

jeżeli licznik osiągnie wartość 6 ma wykonac prosty ruch myszą testowo. Nie wykonuje tego ruchu 

Albo jestem za głupi żeby zrozumieć jak napisać taki skrypt albo sam już nie wiem miło było by gdybyś pokierował mnie w jaki kolwiek sposób.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
$kolor = 0
While 1

$zmienna = PixelSearch(158, 738,194, 765,0x9EC6E5)

If not $zmienna = 0 Then ; Jeśli ZNAJDZIE KOLOR zawarty w $zmienna
$kolor = $kolor + 1

If $kolor = 6 Then
MouseMove (0,0,1)
ExitLoop
EndIf
    EndIf

WEnd

Msgbox(64,"","Koniec programu")

Jeśli nie o to chodzi, wytłumacz bardzo dokładnie o co chodzi jeszcze raz.

Edytowane przez m4rcin93
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
31 minut temu, m4rcin93 napisał:
$kolor = 0
While 1

$zmienna = PixelSearch(158, 738,194, 765,0x9EC6E5)

If not $zmienna = 0 Then ; Jeśli ZNAJDZIE KOLOR zawarty w $zmienna
$kolor = $kolor + 1

If $kolor = 6 Then
MouseMove (0,0,1)
ExitLoop
EndIf
    EndIf

WEnd

Msgbox(64,"","Koniec programu")

Jeśli nie o to chodzi, wytłumacz bardzo dokładnie o co chodzi jeszcze raz.

Niestety nie wyszukuje mi tego pixela coś z fukcja pixelsearch jest nie tak :/ Chodzi mi o to że gdy funkcja pixelsearch znajdzie ten pixel 

ma policzyć że widziała go raz, po tym czeka aż pojawi on się znowu trwa to około 20 sekund, gdy pojawi się czerwony znowy zwiększa w tym

przypadku zmienną kolor o 1 ale jeśli pojawi się kolor zielony ma nadać zmiennej kolor wartość 0 niestety napotkałem na błąd który mówi mi że nie mogę deklarować tej samej zmiennej dwa razy i tu jest właśnie ten pies pogrzebany, program nie może się zakończyć ma działać cały czas w pętli 

gdy wartość zmiennej kolor wyniesie wartość = 6 program ma wykonać złożone czynności kliknięć i przesunięć myszą oraz nacisnąć klawisze. 

gdybyś czegoś jeszcze potrzebował to napisz 

 

dziś w szkolę znalazłem to 

Wszystkie te funkcje zwracają 1 gdy badane wyrażenie jest danego typu, w przeciwnym razie zwracają 0.

Przykład:

$a=1 $x=IsInt($a) ;zwróci 1

$x=IsInt($a+1.1) ;zwróci 0

$x=IsFloat($a+1.1) ;zwróci 1

 

nie wiem czy to może w czymś pomóc ale jeśli zadziała i będzie w stanie doliczyć do 6 i wyżej a gdy warunek nie 

będzie prawdziwy to wyzeruję zmienną to jak najbardziej się przyda 

Edytowane przez fredziukus12
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Odpal program Autoit Window Info, przejdź do zakładki Mouse. Weź celownik i najedź na poszukiwany piksel. Zapisz pozycję i kolor, tam Ci się pojawi i napisz tutaj.

Dla koloru czerwonego i dla koloru zielonego to zrób.

 

Może złe koordynaty wziąłes do funkcji PixelSearch(158, 738,194, 765,0x9EC6E5) i nie wykrywa pixela.

Edytowane przez m4rcin93
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
1 minutę temu, m4rcin93 napisał:

Odpal program Autoit Window Info, przejdź do zakładki Mouse. Weź celownik i najedź na poszukiwany piksel. Zapisz pozycję i kolor, tam Ci się pojawi i napisz tutaj.

Dla koloru czerwonego i dla koloru zielonego to zrób.

 

187, 751 0x0E6FBF kolor zielony 

161, 746 0x87B8DF kolor czerwony 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

$zielony = 0
$czerwony = 0
$kolor = 0

While 1
	$kolor_zielony = PixelSearch(187,751,200,770,0x0E6FBF)
	If not @error Then
	$kolor = 0
	ConsoleWrite("JEST ZIELONY!"&@CRLF)
	EndIf

	$kolor_czerwony = PixelSearch(161,746,180,760,0x87B8DF)
	If not @error Then
		$kolor = $czerwony + 1
		ConsoleWrite("JEST CZERWONY!"&@CRLF)
	EndIf

	If $kolor = 6 Then
		ExitLoop
		EndIf
WEnd

MsgBox(64,"","KONIEC PROGRAMU!")

Edytowane.

Edytowane przez m4rcin93
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Edytowałem post, sprawdź jeszcze raz.

 


$zielony = 0
$czerwony = 0
$kolor = 0

While 1
	$kolor_zielony = PixelSearch(187,751,200,770,0x0E6FBF)
	If not @error Then
	$kolor = 0
	ConsoleWrite("JEST ZIELONY!"&@CRLF)
	EndIf

	$kolor_czerwony = PixelSearch(161,746,180,760,0x87B8DF)
	If not @error Then
		$kolor = $czerwony + 1
		ConsoleWrite("JEST CZERWONY!"&@CRLF)
	EndIf

	If $kolor = 6 Then
		ExitLoop
		EndIf
WEnd

MsgBox(64,"","KONIEC PROGRAMU!")

 

Edytowane przez m4rcin93
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Kolejny problem z jakim się spotkałem to niestety podczas gdy pojawi się kolor z wartosci 0 robi sie wartosc 1 ale gdy znowu pojawi sie kolor wartosc powinna wynosic 2 a dalej wynosi 1 czyli zostaje przy punkcie wyjscia program nigdy nie dojdzie do wartosci 6 gdy nie potrafi liczyc :/ masz moze pomysl jak to zrobić ? 

 

próbowałem użyć tego 

Wszystkie te funkcje zwracają 1 gdy badane wyrażenie jest danego typu, w przeciwnym razie zwracają 0.

Przykład:

$a=1 $x=IsInt($a) ;zwróci 1

$x=IsInt($a+1.1) ;zwróci 0

$x=IsFloat($a+1.1) ;zwróci 1

edytowałem kod niestety bezskutecznie wyskakuje mi bład a po sprawdzeniu tego na internecie oznacza to ze jest gożej niż źle to zrobione 

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
$kolor = $czerwony + 1

Zmień na:
 

$kolor = $kolor + 1

 

Cytat

próbowałem użyć tego 

Wszystkie te funkcje zwracają 1 gdy badane wyrażenie jest danego typu, w przeciwnym razie zwracają 0.

Przykład:

$a=1 $x=IsInt($a) ;zwróci 1

$x=IsInt($a+1.1) ;zwróci 0

$x=IsFloat($a+1.1) ;zwróci 1

edytowałem kod niestety bezskutecznie wyskakuje mi bład a po sprawdzeniu tego na internecie oznacza to ze jest gożej niż źle to zrobione 

$a=1 $x=IsInt($a)  - zwróci 1 bo sprawdzasz czy zmienna $a jest liczbą całkowitą. Dasz $a = 1.5 to zwróci 0 bo jest liczbą niecałkowitą.

$x=IsInt($a+1.1) ;zwróci 0 bo wynik to 2.1 czyli liczba niecałkowita

$x=IsFloat($a+1.1) ;zwróci 1 bo $a = 2.1 a funkcją IsFloat sprawdzasz czy liczba jest niecałkowita.

 

Jest to całkowicie zbędne w Twoim skrypcie i nie o to tu chodzi.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Proponowal bym od nowa zrobic program opierajac sie na skrypcie FastFind. To to samo co masz teraz tylko w wersjii szybszej i rozszezonej.

Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Z tym fastfindem to bym sie tak nie rozpedzal. ;) Raz, ze bot ma tylko grac w ruletke, wiec predkosc nie ma tu znzaczenia (dodatkowo szuka na malym obszarze to nawet nie zauwazy roznicy). Dwa, widac u kolegi brak podstaw programowania, a to jednak jest potrzebne aby korzystac z kodu pisanego przez innych. 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Witam chciał bym się spytać czy w auto it da się zrobić cos takiego że jesli leci ta petla i wartosc wyniesie 6 to czy jest dalej mozliwosc sprawdzania pixela taka petla while w petli while aby mozliwe były wykonywane dwa skrypty na raz 1 czesc pixel scearch i 2 czesc instrukcje warunkowe if 

Global $zielony = 0
Global $czerwony = 0
Global $kolor = 0

While 1
	Sleep (3550)
	$kolor_zielony = PixelSearch(576, 634,683, 655,0x008000)
	If not @error Then
	$kolor = 0
	ConsoleWrite("JEST ZIELONY!"&@CRLF)
	EndIf
	$kolor_czerwony = PixelSearch(576,634,683,655,0xD0242A)
	If not @error Then
		$kolor = $kolor + 1
		ConsoleWrite("JEST CZERWONY!"&@CRLF)
	EndIf
	MsgBox (0,"JEST CZERWONY!",$kolor,1)
	For $kolor = 1 to 2
		Sleep (10500)
		MouseClick ("left",1016, 509) ;stawka
		Sleep (100)
		MouseClick ("left",870, 515);resetuje
		Sleep (25000)
	Next
	For $kolor = 2 To 3

	Sleep (10500)
		MouseClick ("left",1016, 509);stawka
		Sleep (100)
		MouseClick ("left",870, 515);resetuje
		Sleep (2500)
	Next
	For $kolor = 3 To 4

		Sleep (10500)
		MouseClick ("left",1016, 509);stawka
		Sleep (100)
		MouseClick ("left",1016, 509);stawka
		Sleep (100)
		MouseClick ("left",1016, 509);stawka
		Sleep (100)
		MouseClick ("left",870, 515);resetuje
		Sleep (25000)

	Next
	If $kolor = 4 Then

		Sleep (10500)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",870, 515);resetuje
		Sleep (25000)

	EndIf
	If $kolor = 5 Then

		Sleep (10500)
		MouseClick ("left",1079, 511)
		Sleep (100)
		MouseClick ("left",1079, 511)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",1016, 509)
		Sleep (100)
		MouseClick ("left",870, 515);resetuje
		Sleep (25000)

	EndIf
WEnd

 

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Zaloguj się poniżej.

Zaloguj się
 Udostępnij

  • Ostatnio przeglądający forum Pomoc w zwiększaniu zmiennej o 1 gdy znajdzie pixel   0 użytkowników
    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...