Войти

Показать полную графическую версию : [решено] Объявление переменной


DenNC
28-06-2009, 12:06
Здравствуйте. Решил научиться писать программы на AutoIT и столкнулся с небольшой проблемой объявления переменных. Уверен, исправляеться она просто, но сижу уже сутки и никак сделать немогу, помогите пожалуйста.
Вобщем когда программа была в одном файле и без функций интерфейса GUI все работало нормально, но после GUI попросила объявить некоторые переменные, вот с одной то я и столкнулся, никак объявить не могу, прога пишет
"Variable used without being declared.:" на файле warp.au3 на строке "if $belt=1 Then $y=0"



файл Main.au3

#include <GuiConstantsEx.au3>
#include <start.au3>

Opt('MustDeclareVars', 1)
Opt("GUIOnEventMode", 1)

Global $ExitID
Global $number_belt

GUI()


Func GUI()
Local $YesID

; GUI
GuiCreate("AI BOT 1.0", 400, 300)

; TAB
GuiCtrlCreateTab(10, 0, 380, 260)
GuiCtrlCreateTabItem("main")
GuiCtrlCreateLabel("Number of belts", 20, 40)


$YesID = GUICtrlCreateButton("Start", 10, 260, 100, 30)
GUICtrlSetOnEvent($YesID, "Start")

$ExitID = GUICtrlCreateButton("Exit", 290, 260, 100, 30)
GUICtrlSetOnEvent($ExitID, "OnExit")

GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")

GUISetState() ; display the GUI

While 1
Sleep(1000)
WEnd
EndFunc

Func Start()
main2()
EndFunc

Func OnExit()
Exit
EndFunc



файл start.au3

WinMove("EVE","",0,0)

#include "attack.AU3"
#include "warp.AU3"

Func main2()
Local $x
$x=1
MsgBox(0,1,"инициализация",2)

Do
warp($x)
sleep(30000)
attack()
$x=$x+1
Until $x=GUICtrlRead($numberbelt)

sleep(2000)
MsgBox(0,1,"завершение работы программы",2)
EndFunc



файл warp.au3

;WinMove("EVE","",0,0)

;инициализация точки
$WinPos = WinGetPos("EVE")
$tochkaX = $WinPos[0] + 57
$tochkaY = $WinPos[1] + 73

;инициализация меню
$WinPos = WinGetPos("EVE")
$menuX = $tochkaX + 70
$menuY = $tochkaY + 10

;инициализация меню астероидов
$WinPos = WinGetPos("EVE")
$asteroidX = $menuX + 200
$asteroidY = $menuY + 0

;инициализация первого белта
$WinPos = WinGetPos("EVE")
$beltX = $asteroidX + 190
$beltY = $asteroidY + 3

;функция варпа, передаваемое значение - номер белта
func warp($belt)
if $belt=1 Then $y=0
if $belt=2 Then $y=17
if $belt=3 Then $y=34
if $belt=4 Then $y=51
if $belt=5 Then $y=68
if $belt=6 Then $y=85
if $belt=7 Then $y=102
if $belt=8 Then $y=119
if $belt=9 Then $y=136
if $belt=10 Then $y=153
if $belt=11 Then $y=170

MouseClick("left", $tochkaX, $tochkaY, 1, 20)
sleep (1000)
MouseClick("left", $menuX, $menuY, 1, 20)
sleep (1000)
MouseClick("left", $asteroidX, $asteroidY, 1, 20)
MouseClick("left", $asteroidX, $asteroidY+$y, 1, 20)
sleep (1000)
MouseClick("left", $beltX, $beltY+$y, 1, 20)
MsgBox(0,1,"варпаем на "& $belt &" астероид",2)
EndFunc

DenNC
28-06-2009, 13:07
Вобщем сутки не мог решить, а как тему повесил, через час сам сделал. Спс большое за внимание :).

SyDr
28-06-2009, 13:08
Проверить нормально не могу. Нет файла attack.au3
Во-вторых, зачем всё в отдельных файлах? Ведь предназначение одно?
Может конструкцию if $belt=n Then $y=k заменить на
$y = ($belt-1) * 17

А с "ошибкой" всё просто:
Установлена опция: перeменные должны быть обявлены Opt('MustDeclareVars', 1)
А переменная $y не обявлена.
Перед тем, как использовать её:
В функции Local $y или Dim $y

DenNC
28-06-2009, 13:58
Спс большое, а я все думал, что не объявлена belt и ничего не мог поделать, про игрик вообще не думал.




© OSzone.net 2001-2012