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
Đăng nhận xét