Что нового

Проверка числа на совпадение с заданным ранее

Сообщения
5
Репутация
0
Добрый день. Решил заняться изучением AutoIt для написания нескольких ботов для онлайн игры.
Так как это первый изучаемый язык, не всё сразу получается. Вот небольшой код написанный мной, для получения 11 целых чисел.
Код:
Run("notepad.Exe")
WinWaitActive("Безымянный — Блокнот")
$iCounter = 0 ; задаем переменную
for $iCounter = 0 to 11 step 1 ; начало цикла
$iNumber = Random ( "0", "25") ; берем рандомное число 
 $iNumber = Round ( $iNumber )  ; округлем до целого
send ($iNumber) ; печатаем его
send ( '{ENTER}') ; следующая строка
Next

Два близких вопроса:
- как сделать так, чтобы следующее число было не равно любому из предыдущих?
- как сделать чтобы каждое из этих чисел можно было дальше использовать в скрипте? (в виде переменных $число1, $число2, ..., $число3)
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Я вот не пойму, а где у Вас в коде используется переменная счетчик $iCounter
Во - первых
Нет необходимости инициализировать переменную $iCounter
Код:
$iCounter = 0 ; задаем переменную

так как она инициализируется у Вас в начале цикла
Код:
for $iCounter = 0 to 11 step 1 ; начало цикла

Во - вторых , я просто не вижу где она у Вас обрабатывается в теле цикла.
В - третьих в функции Вы указываете строки "0" и "25"
Код:
Random ( "0", "25")

А нужно указывать число
Код:
Random ( 0, 25)
 

Zaramot

I ♥ AutoIt
Сообщения
1 160
Репутация
658
1)
Код:
$iNumber = Random ( "0", "25") ; берем рандомное число 
 $iNumber = Round ( $iNumber )  ; округлем до целого
Зачем округлять с помощью Round, если можно в Random добавить 3
параметр:
Код:
$iNumber = Random ( 0, 25, 1) ; берем рандомное число


2)
Код:
for $iCounter = 0 to 11 step 1

Не обязательно добавлять step 1, он и так стоит по умолчанию.
 
Автор
В
Сообщения
5
Репутация
0
Спасибо за советы.
изменил код на
Код:
Run("notepad.Exe")
WinWaitActive("Безымянный — Блокнот")
for $iCounter = 1 to 11 ; начало цикла
$iNumber = Random ( 1, 25, 1) ; берем рандомное число
send ($iNumber) ; печатаем его
send ( '{ENTER}') ; следующая строка
Next

Поменял в строке
Код:
$iNumber = Random ( 1, 25, 1)

0 на 1, так как значение 0 ненужно.

$iCounter хотел использовать для задания переменной массива, например чтото в этом духе:
Код:
$aNumbers [$iCounter] = $iNumber

и в конечном счете вывод массива на экран/использование цифр далее
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Вова великолепный [?]
и в конечном счете вывод массива на экран/использование цифр далее
Код:
#Include <Array.au3>
Run("notepad.Exe")
Sleep(1000)
WinActive("Безымянный — Блокнот")
 Dim $aArry [1]
For $iCounter = 0 to 11  ; начало цикла
$iNumber = Random ( $iCounter , 25) ; берем рандомное число 
 $iNumber = Round ( $iNumber )  ; округлем до целого
_ArrayAdd ($aArry,$iNumber)
send ($iNumber ) ; печатаем его
send ( '{ENTER}') ; следующая строка
Next

_ArrayDisplay($aArry)
 
Автор
В
Сообщения
5
Репутация
0
вывод на экран получился, правда возникло 2 проблемы:
чисел надо только 11, а по вашему коду получилось 12 (решил изменением 0 на 1 в строчке 5)
Код:
$iNumber = Random ( $iCounter , 25) ; берем рандомное число

с таким кодом 1е число будет от 1 до 25, второе от 2 до 25, третье от 3 до 25 , 11е от 11 до 25. Что не подходит.
 

Zaramot

I ♥ AutoIt
Сообщения
1 160
Репутация
658
3)
Код:
send ($iNumber ) ; печатаем его
send ( '{ENTER}') ; следующая строка

Можно написать так:
Код:
send ($iNumber & @CR) ; печатаем его


Подправил:
Код:
#Include <Array.au3>
Run("notepad.Exe")
Sleep(1000)
WinActive("Безымянный — Блокнот")
Dim $aArry[1]

For $iCounter = 0 to 10  ; начало цикла
	$iNumber = Random (0 , 25 ,1) ; берем рандомное число
	_ArrayAdd ($aArry, $iNumber)
	send ($iNumber & @CR) ; печатаем его
Next

_ArrayDisplay($aArry)
 
Автор
В
Сообщения
5
Репутация
0
Спасибо, ситуация с использованием числа далее ясна.
Как сделать чтобы числа не совпадали?
 

XpycT

Скриптер
Сообщения
380
Репутация
132
Вова великолепный

Код:
#Include <Array.au3>
Run("notepad.exe")
Sleep(1000)
WinActive("Безымянный — Блокнот")

Dim $iNumbersCount = 11 ; Указываем какое кол-во чисел нужно сгенерировать
Dim $aArray[$iNumbersCount + 1] ; определяем массив
; $aArray[0] - тут храниться кол-во чисел в массиве

While $aArray[0] <> $iNumbersCount ; цикл пока кол-во чесел в массиве не будет равно 10
    $iNumber = Random(1, 25, 1) ; получаем рандомное число

    ; проверяем массив на наличие сгенерированного числа
    ; если сгенерированное число найдено в массиве то продолжаем цикл
    If _ArraySearch($aArray, $iNumber) <> -1 Then ContinueLoop

    ; если сгенерированное число не найденно в массиве то выполняем следующее

    $aArray[0] += 1 ; увеличиваем кол-во чисел в маасиве на один
    $aArray[$aArray[0]] = $iNumber ; заносим сгенерированное число в массив

    Send($aArray[$aArray[0]] & @CR) ; печатаем его
WEnd

_ArrayDisplay($aArray)
 

Zaramot

I ♥ AutoIt
Сообщения
1 160
Репутация
658
XpycT у тебя получается 10 чисел, а ему нежно 11.
Вова великолепный поменяй в скрипте XpycT'а строку:
Код:
Dim $aArray[11] ; определяем массив размером 10

на
Код:
Dim $aArray[12] ; определяем массив размером 10
 

XpycT

Скриптер
Сообщения
380
Репутация
132
Zaramot
Незаметил какой кол-во чисел нужно :whistle:

Изменил немного скрипт, теперь можно указать какое кол-во чисел нужно сгенерировать
 
Автор
В
Сообщения
5
Репутация
0
Спасибо ребят)
Дальше буду заставлять бота нажимать на точки на экране согласно этим цифрам. всем спасибо, проблема решена
 
Верх