Hướng dẫn làm auto game online

     

Xin chào các bạn. Lần này mình trở về với một bài hướng dẫn chúng ta lập trình một tool nho nhỏ nhưng bao gồm tính áp dụng cao. Tool này là tool tự động chơi game Lyto Different màu sắc hiện đang làm loạn trên facebook.

Bạn đang xem: Hướng dẫn làm auto game online

Giới thiệu

Game này khá đơn giản và vui vẻ. Đại khái là gồm một bảng hình vuông đựng được nhiều hình tròn nhỏ, trong đó có một hình tròn tất cả màu khác biệt với toàn bộ các hình tròn khác. Nhiệm vụ của doanh nghiệp là kiếm tìm kiếm hình tròn trụ có màu khác hoàn toàn này với qua bài xích thật nhanh.

Mình đã đùa thử game này trong một tiếng. Kết quả tốt nhất của mình là bài 42, lúc số hình trụ trong một ô vuông là 49 hình và gồm màu cực kỳ giống nhau. Chúng ta có thể thử đùa để biết

Sau một ngày chơi game, mình ra quyết định sẽ làm một cái tool để tự động hóa chơi. Vấn đề không chỉ có là điểm số cao, sự việc là họ cần thường xuyên "rèn luyện tài năng lập trình". Nếu hứng thú cùng say mê lập trình, hãy thử có tác dụng tool này theo hướng dẫn của chính bản thân mình nhé

Ý tưởng với phác thảo, chuẩn bị công nghệ

Để thành lập tool tự chơi này, bạn cần phải code được những đoạn mã đuổi theo chu trình như sau:

Lấy được ảnh màn hình/cửa sổ gameLấy được vùng ảnh chứa các hình trụ (bỏ qua các vùng khác như điểm số, thời gian)Phát hiện ra được hình tròn trụ có màu khác biệt (tìm được tọa độ trọng tâm của hình tròn này)Điều khiển con chuột nhảy tới tọa độ của hình tròn trụ trên, tiếp đến click rồi trở lại bước đầu tiên

*

Ý tưởng thì khá rõ ràng rồi. Sự việc là chúng ta sẽ code bằng ngôn từ gì, technology gì?

Trước hết bạn phải chơi được game trên windows với chrome. Nghịch được trò chơi trên chrome, các bạn sẽ dễ dàng sử dụng những công cố thứ 3 nhằm can thiệp vào game hơn. Cách chơi đc game này bên trên chrome thì quá dễ, mình bỏ qua.

Đối với việc trở nên tân tiến tool, mình tuyển lựa C#, vì ngôn từ C# cung ứng các hàm rất mạnh để lấy được ảnh màn hình và điều khiển chuột, cũng tư vấn việc duyệt hình ảnh dễ dàng qua lớp Bitmap. Giả dụ sử dụng ngôn từ lập trình C++, bạn sẽ gặp trở ngại trong vấn đề tạo giao diện, phân tích hình ảnh (duyệt ảnh để kiếm tìm hình tròn). Nếu chọn Java, mình nghĩ bạn sẽ gặp khó khăn với các API tinh chỉnh và điều khiển chuột hay lấy hình ảnh màn hình

Ở đây mình muốn nhấn khỏe khoắn với chúng ta rằng, câu hỏi lựa chọn công nghệ/công cụ/ngôn ngữ là khá phải thiết. Chính vì nếu lựa chọn sai, bạn sẽ đi vào thất vọng khi không tìm được các hàm mà lại mình cần

Tạo project C# Winform và chuẩn bị màn hình Game

Hướng dẫn của chính bản thân mình chỉ nêu ý tưởng và những hàm quan lại trọng, yêu cầu những cái đơn giản mình đã nói hết sức nhanh. Ở trên đây chỉ nói ngắn gọn, chúng ta tạo ra một project C# Winform đơn giản trên IDE visual studio nhá.

Xem thêm: Hệ Phái Nào Sau Đây Không Có Kĩ Năng Tăng Nộ? Những Cái Nhất Của

Bạn cũng đều có thể bài viết liên quan một dự án/ứng dụng nhỏ mà tôi đã hướng dẫn nghỉ ngơi đây:lập trình game winform cùng với C#

Các bước thực hiện

Step 1: Code phần lấy ảnh của hành lang cửa số chơi game

Như trình bày ở trên, trước hết các bạn cần kéo ra khu vực màn hình hiển thị game gồm chứa các hình tròn. Bạn cần:

Dùng hàm để lấy hình ảnh (gần như vấn đề capture screen ý)Tạo 1 picturebox trên ứng dụng của bạn, rồi load cái hình ảnh bạn vừa lấy (mục đích để chất vấn xem nó bao gồm đúng không)

Sau bước này, bạn cần tạo sự được cửa ngõ sổ y hệt như mình nè:

*

Đối với việc tạo pictureBox, mình không gợi ý nữa (có ở bài bác game Pikachu rồi)

Đối với vấn đề lấy được ảnh màn hình, chúng ta có thể tham khảo và chạy thử đoạn mã sau:

Bitmap destBitmap = new Bitmap(width, width);using (Graphics g = Graphics.FromImage(destBitmap)) g.CopyFromScreen(new Point(startX, startY), Point.Empty, new Size(width, width));px.Image = destBitmap;​Bạn phải tự xác minh độ rộng cũng giống như tọa độ góc bên trên trái của vùng screen cần đem (startX, startY cùng width). Để xác định được vùng game thiết yếu xác, bạn có thể hard code một vài con số (tự căn chỉnh trong code) hoặc rất có thể cho nhập từ textBox, hoặc có thể dựa vào 1 số ít công thức nhằm tự tính ra

Step 2: tạo sự kiện nhằm lặp đi lặp lại chu trình mang ảnh, phân tích hình ảnh theo chu kì thời gian

Nếu chúng ta nghĩ đối chọi giản, bạn có thể dùng while-true để tái diễn chu trình trên.

Tuy nhiên trong xây dựng giao diện, ko ai làm bởi vậy cả. Nó sẽ khiến chương trình với CPU của người tiêu dùng bị giật cứng, không thao tác làm việc được

Ở đây họ sẽ sử dụng Timer:

myTimer = new System.Windows.Forms.Timer();myTimer.Tick += new EventHandler(TimerEventProcessor);....private void TimerEventProcessor(Object myObject, EventArgs myEventArgs) //process every X milisecondsĐể thông số kỹ thuật thời gian (tức là timer sẽ được gọi từng X miliseconds) và bắt đầu timer, chúng ta cũng có thể tham khảo:

myTimer.Interval = 45;myTimer.Start();

Được rồi, bởi vậy hãy demo tích phù hợp với step1, nhằm tools của chúng ta có thể cập nhật đc hình ảnh màn hình liên tục sau từng 1 chu kỳ thời gian nào đó (trong ví dụ của bản thân là 45 ms)

Step 3: Phát hiện vùng hình trụ có màu khác biệt

Đây là bài xích toán khó khăn nhất trong bài toán hoàn thiện ứng dụng này. Rứa thể, với vớ cả các bước khác, mình phải 30". Riêng với bước này, bạn dạng thân mình cần tới 6 giờ (mình phải code và thử nghiệm 3 thuật toán không giống nhau mới search ra đc thuật toán tốt nhất)

Bài toán viết lại bên dưới dạng như sau:

Cho một hình ảnh vuông (ma trận điểm ảnh) size n*n pixels (n núm định)Trong hình ảnh có m*m hình trụ được xếp giáp vs nhau (m biến đổi qua từng màn chơi)Trong m*m hình tròn, có 1 hình tròn gồm màu khác vs các hình tròn trụ còn lạiNhiệm vụ của người sử dụng là tìm ra hình tròn trụ có màu biệt lập và trung khu của hình tròn trụ đó (để click vào tâm)

Yêu ước phụ:

Hàm phải xử lý nhanh, bên dưới 70ms là ổn, giả dụ trên 1s thì quá ko ổnBạn cần để ý nhiễu, các bạn tưởng tượng các pixel có màu giống hệt nhau, nhưng thực tiễn không buộc phải vậy. Ví dụ một hình trụ có màu chủ yếu là (r,g,b), nhưng bao phủ nó có tương đối nhiều pixel (r+r", g+g", b+b") để pha loãng

Để làm bài toán này, bạn có thể làm theo công việc sau:

Xác định m bởi bao nhiêu (ở phía trên mình hard code theo level, lấy ví dụ như level1 thì m=2, lv4 thì m=3), nhưng bạn có thể tự suy nghĩ ra thuật toán quét ảnh để tìm đc mBạn chia hình ảnh nhỏ thành m*m ảnh con, mỗi ảnh con bạn tính màu trung bình của ảnh con kia (bỏ màu nền đi nhé)duyệt m*m vùng trên, đưa ra vùng tất cả màu trung bình khác hoàn toàn vs m*m-1 vùng còn lại

Ý tưởng tiến hành được minh hoạ bằng hình ảnh dưới đây:

*

Phần này, nhằm phân tích màu, bản thân gợi ý các bạn duyệt cả ảnh. Kế tiếp đếm con số từng loại pixel rồi sử dụng 1 vài ba thuật toán cơ bạn dạng để tìm ra vùng tất cả màu khác hoàn toàn thôi

Để săn sóc ảnh, bạn thực hiện chính tấm ảnh Bitmap đã lấy ra ở phần 4 và xem thêm đoạn mã sau:

public void imageProcessing(Bitmap p){ for (int i = 0; i Step 4: Điều khiển chuột

Giả sử các bạn đã phát hiện được vùng hình tròn có màu không giống biệt, giờ chúng ta cần điều khiển chuột tới đó với click. Đúng không?

C# chắc hẳn rằng là một ngôn từ giúp bạn tiện lợi thực hiện nay điều này.

Bạn lên google thử search cụm từ bỏ "mouse click mouse move c#" với sẽ tìm được 1 vài hướng dẫn (mình cũng có tác dụng như vậy)

Mình không phía dẫn chi tiết đoạn này, do có nhiều hướng dẫn bên trên mạng. Đại khái sẽ sở hữu mấy đoạn code như vậy này (chèn vào đâu thì các bạn tự tìm hiểu nhá)

public static extern int SetCursorPos(int x, int y);private const int MOUSEEVENTF_MOVE = 0x0001; /* mouse move */private const int MOUSEEVENTF_LEFTDOWN = 0x0002; /* left button down */private const int MOUSEEVENTF_LEFTUP = 0x0004; /* left button up */private const int MOUSEEVENTF_RIGHTDOWN = 0x0008; /* right button down */DllImport("user32.dll",CharSet = CharSet.Auto, CallingConvention=CallingConvention.StdCall)>public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);......SetCursorPos(dx, dy);//Thread.Sleep(100);mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);Chú ý: trường hợp bạn không tồn tại các hàm xử trí chuẩn, hoặc không tồn tại các đoạn mã để ngắt được điều khiển chuột, thì tool của bạn có thể rơi vào trạng thái chiếm phần chuột với click liên tục

Để giảm bớt điều này chúng ta có thể thêm các xử lý như sau:

Chỉ click một số hữu hạn lần (ví dụ 10 lần, đôi mươi lần rồi thôi)Dùng sự kiện nhằm stop việc tinh chỉnh chuột (ví dụ như bấm nút stop, hoặc dùng phím tắt, ...)

Step 5: làm cho mịn

Chương trình sơ cỗ đã hoàn thành, nhưng họ cần làm cho mịn để công tác có công dụng tốt hơn

Thêm nút start/stop để bắt đầu chơi game hoặc dừng chơi gameThêm các thông số kỹ thuật để tùy chỉnh tự động (thời gian hóng của timer, độ rộng của vùng ảnh, ...)Tăng tốc độ xử lý hình ảnh lên buổi tối đa (nó để giúp đỡ bạn được điểm số cao hơn)

Tổng kết

Như vậy là mình đã hướng dẫn các bạn gần như không thiếu các kĩ thuật nhằm giúp chúng ta cũng có thể làm được auto của game này. Chúng ta hoàn toàn rất có thể áp dụng kỹ năng đã học tập vào các game tương tự như ví dụ như lấy hình ảnh màn hình, phân tích rồi click,...

Riêng mình, đó là thành trái của 7 tiếng đồng hồ (mình mất không ít time vào phần so sánh ảnh)

*

Chúc chúng ta thành công. Nhớ chia sẻ nội dung bài viết và vote 5 làm sao cho mình để có động lực viết các bài tiếp sau nha những bạn!


Chuyên mục: Thế giới Game