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

  -  

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

Mình đã chơi thử trò chơi này trong 1 tiếng. Kết quả tốt nhất của chính mình là bài xích 42, khi số hình tròn trong một ô vuông là 49 hình và bao gồm màu khôn cùng giống nhau. Chúng ta cũng có thể thử nghịch để biết

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

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

Để phát hành tool tự đùa 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 biệt lập (tìm được tọa độ trung khu của hình trụ này)Điều khiển loài chuột nhảy tới tọa độ của hình trụ trên, tiếp nối click rồi quay về bước đầu tiên

*

Ý tưởng thì khá rõ ràng rồi. Vụ việc là họ sẽ code bằng ngữ điệu 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, bạn sẽ dễ dàng sử dụng các công thế thứ 3 nhằm can thiệp vào trò chơi hơn. Lối chơi đc game này bên trên chrome thì vượt dễ, mình vứt qua.

Đối cùng với việc cải cách và phát triển tool, mình sàng lọc C#, vì ngôn ngữ C# hỗ trợ các hàm khôn xiết mạnh để đưa được ảnh màn hình và điều khiển chuột, cũng support việc duyệt hình ảnh dễ dàng qua lớp Bitmap. Ví như sử dụng ngôn từ 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 ảnh (duyệt hình ảnh để tìm kiếm hình tròn). Nếu tìm Java, bản thân nghĩ bạn sẽ gặp khó khăn với những API điều khiển chuột hay lấy ảnh màn hình

Ở đây bạn thích nhấn mạnh mẽ với các bạn rằng, câu hỏi lựa chọn công nghệ/công cụ/ngôn ngữ là khá yêu cầu thiết. Bởi vì nếu lựa chọn sai, bạn sẽ đi vào thất vọng khi không kiếm được các hàm nhưng mà 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 chính bản thân mình chỉ nêu phát minh và các hàm quan liêu trọng, cần những cái dễ dàng mình sẽ nói rất nhanh. Ở phía trên chỉ nói ngắn gọn, các bạn tạo ra một project C# Winform đơn giản dễ dàng trên IDE visual studio nhá.

Xem thêm: Cách In Bài Yugioh 2 Mặt Có Sleeves, Cách In Bài Yugioh 2 Mặt

Bạn cũng có thể tham khảo thêm một dự án/ứng dụng bé dại mà mình đã hướng dẫn nghỉ ngơi đây:lập trình trò chơi winform với C#

Các cách 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 diễn ở trên, trước hết chúng ta cần lấy ra khu vực màn hình game bao gồm chứa những hình tròn. Bạn cần:

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

Sau cách này, bạn cần làm nên được cửa ngõ sổ hệt như mình nè:

*

Đối với việc tạo pictureBox, bản thân không giải đáp nữa (có ở bài xích game Pikachu rồi)

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

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

Nếu chúng ta nghĩ 1-1 giản, chúng ta 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 vì vậy cả. Nó sẽ khiến cho chương trình và CPU của chúng ta bị giật cứng, không thao tác được

Ở đây 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ước đầu timer, bạn có thể tham khảo:

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

Được rồi, bởi vậy hãy test tích hợp với step1, nhằm tools của bạn có thể cập nhật đc hình ảnh màn hình liên tiếp sau mỗi 1 chu kỳ thời gian nào kia (trong ví dụ của mình là 45 ms)

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

Đây là bài bác toán khó khăn nhất trong việc hoàn thiện phần mềm này. Thế thể, với vớ cả các bước khác, mình nên 30". Riêng biệt với cách này, phiên bản thân mình yêu cầu tới 6 giờ đồng hồ (mình buộc phải code và kiểm tra 3 thuật toán khác nhau mới tìm ra được thuật toán tốt nhất)

Bài toán viết lại 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 gần cạnh vs nhau (m biến hóa 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 còn lạiNhiệm vụ của người tiêu dùng là kiếm tìm ra hình tròn trụ có màu khác biệt và trọng tâm của hình trụ đó (để click vào tâm)

Yêu cầu phụ:

Hàm đề xuất xử lý nhanh, dưới 70ms là ổn, giả dụ trên 1s thì quá không ổnBạn cần chăm chú nhiễu, chúng ta tưởng tượng các px có màu hệt nhau nhau, nhưng thực tế không đề xuất vậy. Lấy một ví dụ một hình tròn trụ có màu chủ đạo là (r,g,b), nhưng xung quanh nó có nhiều pixel (r+r", g+g", b+b") để pha loãng

Để làm việc này, chúng ta có thể làm theo các bước sau:

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

Ý tưởng thực hiện được minh hoạ bằng ả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 px rồi sử dụng 1 vài ba thuật toán cơ bản để tìm ra vùng tất cả màu khác biệt thôi

Để coi xét ảnh, bạn thực hiện chính tấm ảnh Bitmap đã lôi ra ở phần 4 và tham khảo đ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 nay được vùng hình tròn có màu không giống biệt, giờ các bạn cần tinh chỉnh chuột tới đó cùng click. Đúng không?

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

Xem thêm: Cài Giao Diện Đẹp Cho Điện Thoại Samsung, 17 Theme Đẹp Cho Điện Thoại Samsung

Bạn lên google thử search cụm từ "mouse click mouse move c#" cùng sẽ tìm đc 1 vài trả lời (mình cũng có tác dụng như vậy)

Mình không hướng dẫn chi tiết đoạn này, do có tương đối nhiều 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ự tò mò 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 bạn không tồn tại các hàm cách xử lý chuẩn, hoặc không có các đoạn mã để ngắt được điều khiển và tinh chỉnh chuột, thì tool của chúng ta có thể rơi vào trạng thái chiếm phần chuột cùng click liên tục

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

Chỉ click 1 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 để stop việc tinh chỉnh và điều khiển chuột (ví dụ như bấm nút stop, hoặc cần sử dụng phím tắt, ...)

Step 5: có tác dụng mịn

Chương trình sơ bộ đã trả thành, nhưng họ cần làm mịn để chương trình có kết quả 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 chờ của timer, độ rộng của vùng ảnh, ...)Tăng tốc độ xử lý ả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 chúng ta gần như tương đối đầy đủ các kĩ thuật nhằm giúp bạn cũng có thể làm được tự động của trò chơi này. Các bạn hoàn toàn có thể áp dụng kiến thức đã học 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ồ (mình mất tương đối nhiều time vào phần so sánh ảnh)

*

Chúc chúng ta thành công. Nhớ 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 theo nha những bạn!