Tôi đang cố gắng viết một bộ giải trong C # .NET cho một trò chơi có tên là Flowerz. Để bạn tham khảo, bạn có thể chơi nó trên MSN, tại đây: http://zone.msn.com/gameplayer/gameplayer.aspx?game=flowerz . Tôi đang viết nó cho vui, không phải cho bất kỳ loại bài tập hay bất kỳ công việc nào liên quan. Bởi vì điều này, giới hạn duy nhất là máy tính của tôi (lõi intel i7, với 8GB RAM). Nó không cần phải chạy ở bất cứ nơi nào khác, theo như tôi quan tâm.
Nói tóm lại, quy tắc của nó là như thế này:
- Có một hàng đầy hoa màu. Chiều dài của nó là tùy ý
- Hàng đợi không thể bị ảnh hưởng
- Hàng đợi được tạo khi bắt đầu cấp
- Hoa có một hoặc hai màu.
- Nếu có hai màu, thì có màu bên ngoài và màu bên trong. Trong trường hợp có hai màu, màu bên ngoài được sử dụng để kết hợp.
- Nếu có sự trùng khớp thì màu bên ngoài sẽ biến mất và bông hoa bây giờ là một bông hoa màu duy nhất có cùng màu với hoa bên trong
- Mục tiêu của trò chơi là tạo ra các trận đấu gồm ba (hoặc nhiều hơn) cùng màu
- Khi một bông hoa có một màu duy nhất là một phần của trận đấu, nó sẽ bị xóa khỏi sân chơi, tạo ra một khoảng trống
- Bạn có thể kết hợp một bông hoa màu duy nhất với màu bên ngoài của một bông hoa hai màu. Trong trường hợp này, hoa màu đơn biến mất, màu bên ngoài của hoa hai màu biến mất và màu bên trong vẫn còn
- Bạn giành chiến thắng trong vòng khi hàng đợi trống và có ít nhất một khoảng trống còn lại
- Trận đấu xếp tầng là có thể. Một thác là khi ba (hoặc nhiều) hoa bên ngoài biến mất, và khi màu sắc bên trong của chúng tạo thành một chuỗi 3 (hoặc nhiều hoa hơn).
- Sân chơi luôn là 7x7
- Một số không gian trên cánh đồng được bao phủ bởi những tảng đá
- Bạn không thể đặt hoa trên đá
- Hàng đợi cũng có thể chứa một thuổng mà bạn có thể sử dụng để di chuyển bất kỳ bông hoa nào được đặt vào một không gian trống
- Bạn phải sử dụng thuổng, nhưng bạn thực sự không phải di chuyển bông hoa: việc đặt nó trở lại ngay từ nơi nó đến là hoàn toàn hợp pháp
- Hàng đợi cũng có thể chứa một con bướm màu. Khi bạn sử dụng con bướm này trên một bông hoa, thì bông hoa sẽ có màu của con bướm
- Áp dụng một con bướm cho một bông hoa có hai màu, kết quả là hoa chỉ nhận được một màu duy nhất, đó là màu của con bướm
- Bạn có thể lãng phí con bướm trên một không gian trống hoặc một bông hoa đã có màu này
- Xóa lĩnh vực không thắng trò chơi
Mục tiêu của người giải rất đơn giản: tìm cách làm trống hàng đợi, với càng nhiều khoảng trống còn lại trên sân chơi càng tốt. Về cơ bản, AI chơi trò chơi cho tôi. Đầu ra của bộ giải là một danh sách với các di chuyển mà nó tìm thấy. Tôi không quan tâm đến điểm số, nhưng sống sót càng lâu càng tốt, do đó tôi quan tâm đến những động tác để lại càng nhiều khoảng trống càng tốt.
Không cần phải nói, không gian tìm kiếm phát triển nhanh chóng khi hàng đợi càng lớn, do đó, một lực lượng vũ phu là không thể. Hàng đợi bắt đầu từ 15 và tăng lên với mỗi 5 hoặc ba cấp độ, nếu tôi nhớ đúng. Và, tất nhiên, đặt bông hoa thứ nhất trên (0,0) và bông thứ hai trên (0,1) khác với đặt bông hoa thứ nhất trên (1,0) và bông hoa thứ hai trên (0,0), đặc biệt là khi cánh đồng đã được trồng đầy hoa từ một vòng trước đó. Một quyết định đơn giản như vậy có thể tạo ra sự khác biệt trong việc đưa ra hay không.
Các câu hỏi tôi có như sau:
- Đây là loại vấn đề gì? (nghĩ rằng nhân viên bán hàng du lịch, ba lô hoặc một số vấn đề kết hợp khác). Biết điều này có thể làm cho Google-fu của tôi trở nên tốt hơn.
- Loại thuật toán nào có thể cho tôi kết quả tốt, nhanh?
Về vấn đề thứ hai: Lúc đầu, tôi đã cố gắng viết thuật toán heuristic của riêng mình (về cơ bản: tôi sẽ giải quyết nó như thế nào, nếu tôi biết xếp hàng?), Nhưng điều đó dẫn đến rất nhiều trường hợp cạnh và ghi điểm phù hợp mà tôi có thể bỏ lỡ.
Tôi đã nghĩ đến việc sử dụng một thuật toán di truyền (vì ít nhất tôi biết cách sử dụng nó ...), nhưng tôi gặp một số vấn đề khi quyết định đại diện nhị phân của bảng. Sau đó, có vấn đề chéo, nhưng điều đó có thể được giải quyết với một toán tử chéo được đặt hàng hoặc một loại hoạt động tương tự.
Tôi đoán là người giải phải luôn biết cấu hình bảng và hàng đợi nó đang cố để trống.
Tôi biết một vài thuật toán heuristic khác như mạng thần kinh và hệ thống logic mờ, nhưng tôi thiếu kinh nghiệm để biết cái nào phù hợp nhất, hoặc nếu có những thuật toán khác phù hợp hơn cho nhiệm vụ trong tay.