2009-02-24 65 views
5

Tôi đã đọc that question và tôi nhớ về số Wikipedia list of algorithms. Tôi biết rằng Wikipedia cũng có danh sách các trò chơi nguồn mở, nhưng điều tôi muốn là một liên kết cho các thuật toán trò chơi đơn giản, ngay cả khi được viết bằng mã giả.Liên kết cho các thuật toán trò chơi đơn giản

Như "đơn giản" trò chơi, tôi có nghĩa là các trò chơi như Sudoku, Bejeweled, Solitaire, Minesweeper, Labyrinth, Rắn, Gorilla, Cờ vua, Tetris vv

Bonus cho C# mã nguồn :)

+0

Bạn đang nói về thuật toán AI để chơi các trò chơi này? –

+0

Rất rộng. Cân nhắc tập trung vào các thuật toán cho một trò chơi cho mỗi câu hỏi. –

Trả lời

7

Hầu hết các thuật toán chơi trò chơi đơn giản là thuật toán tìm kiếm. Thực tế, bạn có thể nói AI là tìm kiếm.

Đối với Sudoku, dancing links là một thuật toán tốt. Ngoài ra, nó được giải quyết very concisely in Prolog.

Để chơi cờ, hãy bắt đầu với Minimax, sau đó thử dùng Minimax with alpha-beta pruning.

Minesweeper is NP-complete. Không có bất kỳ thuật toán nhanh nào đáng tin cậy được biết đến là .

+2

Tàu quét mìn tổng quát có thể là NP-complete, nhưng Sudoku [Yato và Seta, 2002] và cờ vua phức tạp hơn nhiều (EXPTIME-complete). Trong thực tế, NP-đầy đủ của Sudoku không có nghĩa là không có thuật toán đáng tin cậy và nhanh chóng cho những vấn đề mà mọi người thực sự muốn giải quyết. –

+0

"Trên thực tế, bạn có thể nói rằng AI đang tìm kiếm" Tôi không biết ý nghĩa của nó là gì. Tôi nghĩ rằng tuyên bố là sai. – Niyaz

+0

@Gareth: Điểm tốt. Không giống như Sudoku và Chess, tôi đã không cố gắng viết một chương trình để chơi Minesweeper. –

0

tổ chức sự kiện nghĩ rằng các trò chơi bạn đề cập ở trên là đơn giản, tôi không nghĩ rằng thuật toán cho các trò chơi đó thì không. (Thực sự không có hành vi phạm tội :))

1

Bạn không thể đơn giản hơn nhiều so với Conway's Game of Life. Chỉ có bốn quy tắc:

  1. Bất kỳ ô trực tiếp nào có ít hơn hai người hàng xóm sống chết, như thể nhu cầu do thiếu dân số.
  2. Bất kỳ ô trực tiếp nào có hơn ba người hàng xóm sống chết, như thể quá đông.
  3. Bất kỳ ô trực tiếp nào có hai hoặc ba người hàng xóm sống, không thay đổi, cho thế hệ tiếp theo.
  4. Bất kỳ tế bào chết nào có đúng ba người hàng xóm sống sẽ trở thành một tế bào trực tiếp.

Có thể dễ dàng triển khai bằng bất kỳ ngôn ngữ nào, yêu cầu zero players và tạo một số mẫu thú vị.

+0

Thực sự thú vị! Cảm ơn! –

0

Dưới đây là các thuật toán cho hầu hết các trò chơi:

Khi các trò chơi được khởi tạo ...

  1. Chấp nhận người dùng nhập vào
  2. Cập nhật trò chơi nhà nước dựa trên người dùng nhập vào
  3. Cung cấp thông tin phản hồi thị giác (cập nhật màn hình)
  4. Kiểm tra thay đổi điểm số và cập nhật khi cần thiết
  5. Kiểm tra "trò chơi o ver "và chuyển sang bước 1 nếu trò chơi chưa kết thúc chưa
  6. Um ... Đó là về nó.

Hy vọng điều này sẽ hữu ích.

2

Khi những người khác có nhiều ám chỉ, ý tưởng về 'thuật toán' cho trò chơi không thực sự phù hợp, ngoại trừ một thứ tầm thường và không đặc biệt giống như trò chơi như Life.Thuật toán là một cách để xử lý một tập hợp dữ liệu theo cách đã biết để tạo ra một đầu ra cụ thể của dữ liệu đó, thường trong một số loại thời gian/độ phức tạp bị ràng buộc. Trò chơi không phù hợp với tiêu chí đơn giản đó - chúng giống như mô phỏng khi chúng liên tục thay đổi trạng thái của các đối tượng dựa trên đầu vào cho đến khi đạt được điều kiện cụ thể của trò chơi. Vì vậy, hầu như tất cả đều theo dõi vòng lặp đầu vào-> cập nhật-> với logic trò chơi đặt trước trong giai đoạn cập nhật. Các phần riêng lẻ của trò chơi chắc chắn sẽ được thực hiện theo thuật toán đơn giản và nổi tiếng nhưng bản thân chương trình trò chơi thực sự chỉ là vòng lặp mô phỏng và logic trong đó.

1

Điều gì về thuật toán, không phải để chơi trò chơi, nhưng đối với các tác vụ tương đối phức tạp bên trong chúng. Ví dụ, trong Bejeweled bạn có một lưới 8x8 đầy đồ trang sức bằng một trong 7 màu. Bất cứ lúc nào, có khoảng 8 viên ngọc của mỗi màu. Sau khi người dùng di chuyển một viên ngọc để tạo ra một trận đấu, ít nhất ba viên ngọc (tất cả cùng màu) sẽ biến mất khỏi màn hình, và ba viên ngọc mới sẽ rơi vào màn hình. Làm cách nào để đảm bảo rằng luôn có ít nhất một kết quả phù hợp trên màn hình? Làm cách nào để đảm bảo rằng các kết quả phù hợp có thể xuất hiện trên màn hình chứ không chỉ ở trên cùng?

+0

Tôi gặp vấn đề này để giải quyết cho sự phát triển trò chơi của mình –

Các vấn đề liên quan