HƯỚNG DẪN LÀM AUTO GAME ONLINE

 - 

Xin chào các bạn. Lần này mình quay trở về với một bài bác hướng dẫn các bạn lập trình một tool nho nhỏ nhưng gồm tính ứng dụng cao. Tool này là tool tự động chơi game Lyto Different màu sắc hiện đang làm mưa làm gió 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 dễ dàng và vui vẻ. Đại khái là bao gồm một bảng hình vuông đựng nhiều hình tròn nhỏ, vào đó có 1 hình tròn bao gồm màu biệt lập với tất cả các hình tròn khác. Nhiệm vụ của doanh nghiệp là tìm kiếm kiếm hình tròn có màu biệt lập này cùng qua bài thật nhanh.

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

Sau 1 ngày chơi game, mình đưa ra quyết định sẽ làm một chiếc tool để auto chơi. Vấn đề không những là điểm số cao, vụ việc là họ cần liên tục "rèn luyện kỹ năng lập trình". Nếu như hứng thú cùng say mê lập trình, hãy thử làm tool này theo phía dẫn của mình nhé

Ý tưởng và phác thảo, sẵn sàng công nghệ

Để xuất bản tool tự nghịch 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 những vùng khác như điểm số, thời gian)Phát hiện ra được hình tròn có màu khác biệt (tìm được tọa độ trung ương của hình tròn trụ này)Điều khiển con chuột nhảy cho tới tọa độ của hình tròn trụ trên, sau đó click rồi quay về bước đầu tiên

*

Ý tưởng thì khá rõ ràng rồi. Vấn đề là bọn họ sẽ code bằng ngữ điệu gì, technology gì?

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

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

Ở đây bạn muốn nhấn to gan lớn mật với các bạn rằng, bài toán lựa lựa chọn công nghệ/công cụ/ngôn ngữ là khá yêu cầu thiết. Chính vì nếu lựa chọn sai, các bạn sẽ đi vào thuyệt vọng khi không kiếm được những hàm nhưng mình cần

Tạo project C# Winform và sẵn sàng màn hình Game

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

Xem thêm: Chơi Liên Minh Huyền Thoại Bằng Wifi, Chơi Lol Bằng Wifi Bị Lag

Bạn cũng có thể có thể xem thêm một dự án/ứng dụng nhỏ tuổi mà mình đã hướng dẫn ở đây:lập trình game winform với C#

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

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

Như trình bày ở trên, trước hết chúng ta cần kéo ra khu vực màn hình game có chứa những hình tròn. Chúng ta cần:

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

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

*

Đối với bài toán tạo pictureBox, mình không khuyên bảo nữa (có ở bài bác game Pikachu rồi)

Đối với việc lấy được hình ảnh màn hình, chúng ta cũng có thể tham khảo và test đ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 yêu cầu tự khẳng định độ rộng cũng giống như tọa độ góc bên trên trái của vùng màn hình hiển thị cần lấy (startX, startY và width). Để xác định được vùng game chủ yếu xác, chúng ta cũng có thể hard code một trong những con số (tự chỉnh sửa trong code) hoặc rất có thể cho nhập trường đoản cú textBox, hoặc rất có thể dựa vào một số ít công thức nhằm tự tính ra

Step 2: chế tác sự kiện nhằm lặp đi tái diễn chu trình rước ảnh, phân tích hình ảnh theo chu kì thời gian

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

Tuy nhiên trong lập trình sẵn giao diện, ko ai làm bởi vậy cả. Nó sẽ khiến cho chương trình với CPU của công ty bị lag cứng, không làm việc được

Ở đây bọn họ sẽ thực hiện Timer:

myTimer = new System.Windows.Forms.Timer();myTimer.Tick += new EventHandler(TimerEventProcessor);....private void TimerEventProcessor(Object myObject, EventArgs myEventArgs) //process every X milisecondsĐể cấu hình thời gian (tức là timer sẽ tiến hành gọi từng X miliseconds) và bắt đầu timer, chúng ta có thể tham khảo:

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

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

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

Đây là bài toán trở ngại nhất trong bài toán hoàn thiện phần mềm này. Chũm thể, với vớ cả công việc khác, mình buộc phải 30". Riêng biệt với bước này, phiên bản thân mình yêu cầu tới 6 giờ đồng hồ (mình đề xuất code và kiểm tra 3 thuật toán khác 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 ảnh vuông (ma trận điểm ảnh) kích cỡ n*n pixels (n thế định)Trong ảnh có m*m hình tròn 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ó một hình tròn bao gồm màu không giống vs các hình tròn trụ còn lạiNhiệm vụ của chúng ta là tìm ra hình trụ có màu khác hoàn toàn và trọng tâm của hình tròn đó (để click vào tâm)

Yêu mong phụ:

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

Để làm vấn đề này, bạn có thể làm theo công việc sau:

Xác định m bằng bao nhiêu (ở phía trên mình hard code theo level, lấy ví dụ 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 ảnh nhỏ thành m*m ảnh con, mỗi ảnh con các bạn tính color trung bình của hình ảnh con đó (bỏ màu nền đi nhé)duyệt m*m vùng trên, tìm thấy vùng tất cả màu trung bình biệt lập vs m*m-1 vùng còn lại

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

*

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

Để để mắt tới ảnh, bạn sử dụng chính tấm hình ảnh Bitmap đã mang 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 tại được vùng hình tròn có màu khác biệt, giờ chúng ta cần tinh chỉnh và điều khiển chuột cho tới đó và click. Đúng không?

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

Xem thêm: Ngành Hàng Fmcg Là Gì ? 5 Xu Hướng Kinh Doanh, Marketing Ngành Fmcg

Bạn lên google thử tìm kiếm cụm trường đoản cú "mouse click mouse move c#" và sẽ tìm được 1 vài giải đáp (mình cũng làm như vậy)

Mình không hướng dẫn cụ thể đoạn này, do có không ít hướng dẫn trên mạng. Đại khái sẽ có được mấy đoạn code như thế này (chèn vào đâu thì chúng ta tự khám phá 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ú ý: nếu như bạn không tồn tại các hàm cách xử trí chuẩn, hoặc không tồn tại các đoạn mã để ngắt được điều khiển và tinh chỉnh chuột, thì tool của bạn có thể rơi vào trạng thái chiếm chuột và click liên tục

Để hạn chế điều này bạn cũng có thể thêm các xử lý như sau:

Chỉ click 1 số ít hữu hạn lần (ví dụ 10 lần, 20 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 cần sử dụng phím tắt, ...)

Step 5: làm mịn

Chương trình sơ bộ đã trả thành, nhưng chúng ta cần có tác dụng mịn để lịch trình có kết quả tốt hơn

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

Tổng kết

Như vậy là tôi đã hướng dẫn các bạn gần như không thiếu thốn các kĩ thuật nhằm giúp chúng ta cũng có thể làm được tự động hóa của trò chơi này. Các bạn hoàn toàn hoàn toàn có thể áp dụng kiến thức đã học tập vào những game giống như ví dụ như lấy hình ảnh màn hình, so sánh rồi click,...

Riêng mình, đấy là thành quả của 7 tiếng đồng hồ thời trang (mình mất tương đối nhiều time vào phần phân tích ảnh)

*

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