[Tả đạo] Làm sao để xếp hạng 1 thế giới (1/ 290891 người) về gỡ mìn (minesweeper) ?

Hạng 1 là hắn đó. Nguồn: https://minesweeper.online/ranking/all-time
Kết quả trên ở https://minesweeper.online/
TLDR; hắn có sharingan, j/k =)))

1/ Động lực:

Viết bài này để nghĩ lại rằng: Học công nghệ thông tin lâu lâu ngồi làm mấy trò tả đạo như này cũng thấy vui vui.
Phần vui nó nằm ở đoạn sau.

2/ Hoàn cảnh

Vào một ngày đẹp trời, đứa em làm chung bỗng dưng hỏi hắn
- Anh B, hồi đó anh có hiếu thắng không anh ?
- Có chứ! Mà sao em lại hỏi vậy ?
- Vậy là hồi đó anh cũng trẻ trâu. Vậy mà tưởng anh hiền lắm.
- Sao tự nhiên lại có chủ đề này vậy ?
- Thằng T  thấy em nạp tiền vô game, nó chửi em trẻ trâu, em tự ái nên hỏi anh. Nếu anh cũng trẻ trâu vậy thì trẻ trâu cũng được mà. Chơi game thì phải đứng top mới vui phải không anh?
- …
Hắn bật cười vì logic của thằng nhóc. Hắn đúng là thích chơi game, có điều game nào cũng thường thường bậc trung, không có gì nổi bật cả. Hắn không đến nỗi là tạ (vì game nào tạ thì hắn bỏ không chơi nữa), nhưng cũng không giỏi để gánh team được.
Trùng hợp làm sao, cũng ngay hôm đó, hắn dạo dạo đọc được 1 bài về các chiến thuật chơi gỡ mìn (minesweeper).
Nghĩ lại thì từ hồi xưa lắm rồi, lúc học tin học ở trường, tụi hắn toàn trốn rồi ngồi chơi gỡ mìn (vì máy ở trường chỉ có những trò đó). Trò đó là trò duy nhất hắn chơi hay, ít nhất là cũng ngồi chỉ trỏ khi người khác chơi được.
Vậy là hắn vào thử trang được giới thiệu trong bài đó (xem chú thích ảnh ở trên) để chơi gỡ mìn thử.

3/ Bắt đầu chơi:


Nhào vô chơi chế độ 99 trái. Hắn mất tầm hơn 200 giây để giải được 2/3 bảng, trước khi thua vì nhấn phải mìn.
Hắn thầm nghĩ:
- Mình tập trung chơi thì chắc tầm 300 giây là giải xong thôi.
Rồi hắn nhấn vào bảng ranking xem kết quả người ta chơi như thế nào. Đập vào mắt hắn là 40 giây ở người đứng đầu.
- Hư cấu - Hắn thốt lên.
Hắn xem tiếp. Các thứ hạng tiếp theo nằm trong khoảng 40 tới 50 giây.
- Ơ, máaaa. Thú vậy. Cái này có khi biết trước kết quả mới làm được vậy ấy chứ.
Và rồi hắn mày mò 

4/ Bắt đầu vọc.

Hắn mở bảng network lên xem. Ngay lập tức hắn phát hiện ra:
- Ủa, mấy nước đi không đồng bộ lên server à. Tức là bảng trạng thái được lưu ở dưới trình duyệt. Kiểu này thì việc biết trước vị trí các ô mìn là chắc chắn được.
Rồi hắn lại hí hoáy đặt breakpoint dò tìm trong cái mớ mã nguồn của trang đó. Sau khi dò ngược chừng 6-7 bước, hắn mới phát hiện ra cái bảng trạng thái của trò chơi.
- Rồi, thế là xong. Anh đây lên top ngồi cho xem.
Sau khi ngồi viết mấy đoạn mã đơn giản để hiện thị vị trí các ô mìn, cuối cùng hắn cũng có được cái hắn muốn.
Sharingan... Ô đỏ là mìn, ô xanh là số 0.

5/ Biết trước kết quả vẫn hơn 100 giây

Có một sự thật là ngay cả khi có sẵn kết quả trước mắt như vậy, hắn cũng không thể hoàn thành nó dưới 100 giây.
Việc di chuyển chuột và bấm vào các ô khiến hắn mất khá nhiều thời gian, nhất là việc click chuột.
Vậy là hắn mở cái app auto click lên. Công việc của hắn hiện giờ chỉ là ngồi di chuyển chuột đến từng ô mìn thôi.
Và rồi hắn không thể nào hoàn thành được bãi mìn. Lí do là hắn cứ lỡ di chuyển chuột qua ô có bom. Và BÙM. Tay chân vụng về.
Mà cho dù có không bị BÙM đi nữa, thì hắn ước lượng hoàn thành khoảng 80 giây.
- Thế quái nào mà tụi nó lại hoàn thành trong 40s được nhỉ? - Hắn thầm nghĩ mà nể những người đó.

6/ Full automation

Bí quá, đã vậy thì chơi tới cùng luôn.
Đầu tiên, hắn nghĩ là sẽ là giả một cái request hoàn thành màn chơi lên server. Nhưng cách này khá là sơ hở, vì hắn không biết cơ chế validation dưới server là gì. Nên cách này như mò kim đáy bể vậy.
Vậy thì auto luôn việc chơi thôi. Về cơ bản trò chơi này là một chuỗi sự kiện di chuyển chuột, click, click và click thôi mà.
Vấn đề là nếu vô ấn bụp bụp thì ảo quá. Nên hắn xác định có 2 yếu tố:
- Thời gian: Làm sao cho thời gian không được vô lí quá, nhưng cũng đủ tốt để cho người ta nhìn vô là bỏ cuộc (mode trẻ trâu: On)
- Cách giải: Làm cho nó giống con người chút. Đặc biệt là con chuột phải di chuyển và luôn nằm trên cái bảng như thể mình đang chơi ấy
Vấn đề thứ 2 (cách giải) mới là thú vị. Hắn thích thuật toán A star. Hầu như các trò chơi gì cần não 1 chút là hắn dùng thuật toán này, huống chi đây là trò chơi đã biết trước kết quả, nên dựa vào đó để giả tạo hành vi cũng hợp lý.
...
Nhưng đắn đo một hồi, hắn cảm thấy không nhất thiết phải làm vậy. Đơn giản là click vào mấy ô mà xung quanh không có mìn trước, rồi sau đó là mấy ô còn lại. Cộng thêm việc giả lập các sự kiện di chuyển chuột là đủ để lấp liếm rồi.
Rồi hắn ngồi hí hoáy viết một số đoạn mã tiếp:
Kết quả


P/s

- Lúc làm xong, cũng định mail cho nhà phát triển nói xoá kết quả đi. Nhưng nghĩ lại, nếu họ muốn phát hiện thì dễ dàng lắm, vì cái kiểu giải đó ngoài auto ra thì làm gì còn ai giải kiểu này nữa.
- Hắn đã gửi cho đứa em kết quả, mà không nói là hắn đã làm ra sao :)) 
- Lúc up bài, hắn cũng thử coi spiderum có ngăn XSS không, chứ không là hắn cho mọi người tự động upvote chơi luôn :-p Nhưng bị chặn mất tiêu
...
Dân công nghệ thông tin còn nhiều trò lắm, cái này cũng dễ, chỉ dùng mỗi Chrome là làm được :D Quan trọng là độ trẩu ra sao thôi.
Fun.
97
1992 lượt xem
97
13
13 bình luận