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

     

Xin chào những bạn. Lần này mình 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 nhỏ tuổi nhưng có tính vận dụng cao. Tool này là tool auto chơi trò chơi 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 và vui vẻ. Đại khái là có một bảng hình vuông chứa nhiều hình tròn nhỏ, vào đó có 1 hình tròn có màu khác hoàn toàn với tất cả các hình trụ khác. Nhiệm vụ của chúng ta là kiếm tìm kiếm hình tròn có màu khác biệt này và qua bài xích thật nhanh.

Mình đã nghịch thử game này trong 1 tiếng. Hiệu quả tốt nhất của mình là bài 42, khi 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. Chúng ta cũng có thể thử chơi để 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 chơi. Vấn đề không chỉ có là điểm số cao, vụ việc là chúng ta cần tiếp tục "rèn luyện khả năng lập trình". Nếu như hứng thú với 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 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òn (bỏ qua những vùng khác như điểm số, thời gian)Phát chỉ ra được hình tròn có màu biệt lập (tìm được tọa độ chổ chính giữa của hình trụ này)Điều khiển con chuột nhảy tới tọa độ của hình trụ trên, sau đó click rồi quay về bước đầu tiên

*

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

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

Đối cùng với việc cách tân và phát triển tool, mình chọn lựa C#, vì ngôn từ C# hỗ trợ các hàm siêu mạnh để lấy đượ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. Trường hợp 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 để search hình tròn). Nếu tìm Java, mình nghĩ bạn sẽ gặp trở ngại với những API điều khiển và tinh chỉnh chuột giỏi lấy ảnh màn hình

Ở đây mình thích nhấn bạo gan với chúng ta rằng, bài toán lựa chọn công nghệ/công cụ/ngôn ngữ là khá phải thiết. Cũng 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 cơ 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 bản thân mình chỉ nêu ý tưởng phát minh và các hàm quan lại trọng, buộc phải 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 dễ dàng trên IDE visual studio nhá.

Xem thêm: Samsung Galaxy Note 8 Đài Loan Có Tốt Không Sạc Được, Thực Sự Galaxy Note 8 Đài Loan Có Tốt Không

Bạn cũng có thể có thể tìm hiểu thêm một dự án/ứng dụng nhỏ mà mình đã hướng dẫn sinh sống đâ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 hình ảnh của hành lang 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 screen game gồm chứa những hình tròn. Chúng ta cần:

Dùng hàm để lấy hình ả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 mang (mục đích để khám nghiệm xem nó bao gồm đúng không)

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

*

Đối với vấ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 bài toán lấy được ảnh màn hình, bạn cũng có thể tham khảo và demo đ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 cần tự khẳng định độ rộng cũ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 đem (startX, startY cùng width). Để xác định được vùng game chính 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 hoàn toàn có thể dựa vào 1 số công thức nhằm tự tính ra

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

Nếu bạn nghĩ đối chọi giản, bạn 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 vậy nên cả. Nó sẽ khiến cho chương trình với CPU của công ty bị đơ cứng, không thao tác làm việc được

Ở đây họ sẽ áp 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Để cấu hình thời gian (tức là timer sẽ được gọi từng X miliseconds) và ban đầu timer, chúng ta có thể tham khảo:

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

Được rồi, bởi vậy hãy thử tích phù 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 đó (trong ví dụ của bản thân là 45 ms)

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

Đây là bài bác toán trở ngại nhất trong vấn đề hoàn thiện ứng dụng này. Nạm thể, với vớ cả quá trình khác, mình buộc phải 30". Riêng biệt với cách này, bạn dạng thân mình yêu cầu tới 6 tiếng (mình bắt buộc code và kiểm tra 3 thuật toán không giống nhau mới kiếm tìm ra đc thuật toán giỏi 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) form size n*n pixels (n cầm cố định)Trong ảnh có m*m hình tròn được xếp sát vs nhau (m thay đổi qua từng màn chơi)Trong m*m hình tròn, có một hình tròn có màu khác vs các hình tròn còn lạiNhiệm vụ của người sử dụng là tìm kiếm ra hình tròn có màu biệt lập và chổ chính giữa của hình tròn đó (để click vào tâm)

Yêu mong phụ:

Hàm đề nghị xử lý nhanh, dưới 70ms là ổn, giả dụ trên 1s thì quá không ổnBạn cần chú ý nhiễu, 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 yêu cầu vậy. Lấy ví dụ một hình trụ có màu chủ đạo là (r,g,b), nhưng bao phủ nó có khá nhiều pixel (r+r", g+g", b+b") để pha loãng

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

Xác định m bằng bao nhiêu (ở trên đây mình hard code theo level, ví dụ như level1 thì m=2, lv4 thì m=3), nhưng chúng ta cũng có thể tự nghĩ về ra thuật toán quét hình ảnh để tìm được mBạn chia ảnh nhỏ thành m*m hình ảnh con, mỗi ảnh con bạn tính màu trung bình của ảnh con đó (bỏ màu nền đi nhé)duyệt m*m vùng trên, đưa ra vùng bao 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, để phân tích màu, bản thân gợi ý các bạn duyệt cả ảnh. Sau đó đếm số lượng từng loại px rồi cần sử dụng 1 vài ba thuật toán cơ phiên bản để đưa ra vùng gồm màu khác biệt thôi

Để coi xét ảnh, bạn áp dụng chính tấm ảnh Bitmap đã lấy ra ở phần 4 và tìm hiểu 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ử chúng ta đã phát hiện tại được vùng hình trụ có màu khác biệt, giờ chúng ta cần điều khiển chuột cho tới đó và click. Đúng không?

C# có lẽ là một ngôn từ giúp bạn tiện lợi thực hiện điều này.

Xem thêm: Game Y8 1 Người Chơi, Tổng Hợp Trò Chơi Y81 Người Mới Nhất Miễn Phí

Bạn lên google thử search cụm từ "mouse click mouse move c#" với sẽ tìm được 1 vài lý giả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ó khá nhiều hướng dẫ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ò 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ú ý: giả dụ bạn không có các hàm xử lý chuẩn, hoặc không có các đoạn mã để ngắt được 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 cùng click liên tục

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

Chỉ click một 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 đ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: làm cho mịn

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

Thêm nút start/stop để bắt đầu chơi game hoặc dừng đùa gameThêm các thông số kỹ thuật để tùy chỉnh auto (thời gian chờ của timer, phạm vi của vùng ảnh, ...)Tăng vận tốc xử lý hình ảnh lên tối đa (nó để 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 chúng ta gần như không thiếu các kĩ thuật để giúp bạn có thể làm được auto của trò chơi này. Bạn hoàn toàn rất có thể áp dụng kiến thức đã học vào những game tựa như ví dụ như lấy ảnh màn hình, đối chiếu rồi click,...

Riêng mình, đó 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 phân tích ảnh)

*

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