Kiểm soát giá trị biến

 


Code mẫu cuối bài đăng

Xem video giải thích:

Video 1:   https://www.youtube.com/watch?v=dGRnGsJW5bU

Video 2:   https://www.youtube.com/watch?v=DA08JvL4L5g


Các biến sẽ được ký hiệu $tên biến. Ví dụ $a, $i, $1,$2, $abc ....
Nếu không gán giá trị biến thì mặc định khi mới chạy tool, tất cả các biến sẽ nhận giá trị 0

Các từ sau dấu // được coi như ghi chú, không ảnh hưởng tới code

inc($i) // lệnh này giúp tăng biến $i lên 1 đơn vị, cũng giống như mình ghi $i = $i + 1


Trường hợp 1:







Giả sử ta gán giá trị $i=1 ở cuối tệp lệnh và  sử dụng lệnh print($i) để ghi giá trị $i vào nhật ký (log)

Vòng chạy đầu lúc mới chạy tool sẽ chạy lệnh getscreen (giá trị $i lúc mới chạy tool lần đầu = 0) => Câu lệnh 1 (giá trị $i = 0)  => Câu lệnh 2 (giá trị $i = 0) => Câu lệnh 3 (giá trị $i = 0) => Câu lệnh cuối (giá trị $i = 0) => Gán $i = 1 => ghi giá trị $i vào nhật ký print($i)
Lúc này khi kết thúc vòng chạy đầu tiên, giá trị $i được gán =1.
Khi tới vòng chạy thứ 2, giá trị $i sẽ = 1, nhận từ vòng chạy trước. Tool sẽ chạy lệnh Getscreen (giá trị $i = 1) => Câu lệnh 1 (giá trị $i = 1)  => Câu lệnh 2 (giá trị $i = 1) => Câu lệnh 3 (giá trị $i = 1) => Câu lệnh cuối (giá trị $i = 1) => Gán $i = 1

Nếu gán $i =1 ngay ở đầu tệp lệnh thì ngay ở vòng chạy đầu, giá trị $i = 1 ở các câu lệnh 1,2,3... cuối. Sang các vòng chạy sau giá trị $i cũng vẫn = 1

Trường hợp 2:



Gán giá trị $i = 1 ngay ở đầu tệp, và cuối tệp gán $i=2. Tool sẽ chạy như sau

Vòng chạy 1
Getscreen (giá trị khởi tạo $i = 0) => $i =1 (gán $i = 1) => print($i) (ghi giá trị $i vào  nhật ký, lúc này $i nhận giá trị $i = 1) => Câu lệnh 1 ($i = 1) => Câu lệnh 2 ($i = 1) => Câu lệnh 3 ($i=1) => Câu lệnh cuối ($i=1) => $i = 2 (gán $i = 2 ) => print ($i=2) (ghi giá trị $i = 2 vào nhật ký)

Vòng chạy 2
Getscreen (giá trị $i = 2, nhận kết quả từ vòng chạy trước)  => $i =1 (gán $i = 1) => print($i) (ghi giá trị $i vào  nhật ký, lúc này $i bị gán về $i = 1) => Câu lệnh 1 ($i = 1) => Câu lệnh 2 ($i = 1) => Câu lệnh 3 ($i=1) => Câu lệnh cuối ($i=1) => $i = 2 (gán $i = 2 ) => print ($i=2) (ghi giá trị $i = 2 vào nhật ký)

Vòng chạy 3,4,5... các vòng khác cũng sẽ giống như vòng 2. Khi bật nhật ký ta sẽ thấy giá trị $i thay đổi liên tục từ 1 sang 2 rồi lại về 1

Trường hợp 3


Không để biến $i ở ngoài mà ta nhét vào trong 1 lệnh if. Chỉ khi nào lệnh if xảy ra thì biến $i mới được gán sang giá trị $i = 1. Nếu lệnh if không xảy ra thì biến $i không được gán $i=1 mà sẽ luôn nhận giá trị $i = 0 như giá trị khởi tạo.

Trường hợp 4

Ví dụ trong game Gunny, ta có 1 tệp lệnh sau:

Getscreen

if (Điều kiện 1) //  Lệnh sẵn sàng ngoài sảnh hoặc ngoài phòng, ngay trước khi vào game đấu

    // Click sẵn sàng

     $i=0 // gán giá trị $i = 0 để trước khi vào game, giá trị $i = 0 và sau mỗi ván thì giá trị $i sẽ được gán trả về giá trị $i = 0.

end_if


if (Điều kiện 2) // Màu tới lượt mình (màu chữ Đến lượt bạn hoặc Pass)

    if($i=0) // turn đầu tiên
        // lệnh 1
    end_if // $i=0

    if($i=1) // turn thứ 1
        // lệnh 2
    end_if

//...

    if($i=10) // turn thứ 2
         // lệnh 10
    end_if

inc($i) // đặt tăng biến  $i ở cuối câu lệnh để sau mỗi vòng chạy giá trị $i tăng lên 1 đơn vị
print($i) // ghi giá trị $i vào nhật ký để xem biến $i có tăng đúng như mình mong muốn không hay bị tăng vọt giá trị không tăng 1 đơn vị mỗi vòng bắn.

end_if



// ====> Nếu giá trị biến $i không được gán ở ngoài sảnh ngay khi vào game đấu, thì giả sử xong ván đấu đầu tiên, giá trị $i lúc này có thể sẽ bị biến đổi sang giá trị khác như $i = 1, $i = 2, $i = 10 thì tới ván đấu tiếp theo, giá trị $i sẽ nhận giá trị từ ván đấu trước (như trong các ví dụ bên trên mình đã giải thích). Lúc này giả sử vào game, Đến lượt mình bắn ( if điều kiện 2 ) giá trị $i = 1 thì nó sẽ bỏ qua câu lệnh if($i = 0) không thực hiện mà thực hiện câu lệnh if($i=1).









-------------------------------------- CODE MẪU------------------------------------

getscreen

if_pixel_in(450,389,450,389,255)
print("sang man")
lclick(1,1)
waitms(100)
end_if


if( pxl(628,287) =1603839 )
print("Chon pho ban")
LCLICK(590,214)  // Chon pho ban
wait(1)
LCLICK(360,193)  // Chon chuong
wait(1)
LCLICK(302,239)  // Chon map
wait(1)
LCLICK(474,503)  // Chon ai anh hung
wait(1)
LCLICK(496,566)  // Dong y
wait(0.5)
end_if


if(pxl(945,569) =12515071 )
print("Sang sang")
waitms(100)
LCLICK(903,234)  // Dan duong
waitms(100)
DBLCLICK(951,237)  // kickpow
waitms(500)
LCLICK(952,487)  // bat dau
waitms(500)
$turn=0
end_if

if_pixel_in(342,314,342,314,3523833) // Màu chữ Đến lượt bạn
print("TURN - ĐẾN LƯỢT BẠN, $turn = ", $turn)

if($turn=0)
print("Luot ban dau")
keypress(#4)
keypress(#4)
keypress(#4)
wait(2)
keypress(#p)
end_if // $turn=0


if($turn=1)
print("Luot ban thu 2")
keypress(#left)
waitms(200)
keydown(75)
wait(3)
keyup(75)
waitms(200)
keypress(#right)
end_if// $turn=1

if($turn=2)
print("Luot ban thu 3")
for($z=0,$z<50)
keypress(#up)
end_cyc
end_if// $turn=2


if($turn>2)
print("Luot ban >3")
waitms(100)
keydown(68)
  waitms(100)
keypress(#b)
keypress(#1)
keypress(#4)
keypress(#8)
wait(2)
keyup(68)
end_if// $turn>3

inc($turn) // tăng giá trị $turn lên 1 đơn vị
print("$turn = ",$turn)
wait(2) // chờ cho hết turn
end_if














Nhận xét

Bài đăng phổ biến