2010-08-21 13 views
7

Vì vậy, tôi đã chơi rất nhiều pacman trên di động của tôi gần đây và tôi tự hỏi làm thế nào để những con ma dường như làm việc độc lập với nhau. Tôi đã suy nghĩ về cách nó sẽ được lập trình.Trong Pacman, các con ma có chọn con đường độc lập để tìm pacman không?

Một tùy chọn mà tôi nghĩ là chuỗi. Tất cả 4 con ma đang chạy trong chủ đề của riêng họ và bằng cách nào đó tìm thấy vị trí của pacman. Nhưng có vẻ như một chút để có bốn chủ đề làm việc và đồng bộ hóa sẽ khó khăn. Ngoài ra, google đã viết pacman trong Javascript mà không hỗ trợ chủ đề, do đó, nó có thể được thực hiện mà không có chủ đề và có phải là một cách dễ dàng hơn.

Suy nghĩ thứ hai của tôi là trình xử lý sự kiện. Tôi chỉ dây sự kiện 'directionChanged' mà pacman sẽ bắn tới 4 bộ điều khiển sự kiện, một cho mỗi con ma. Mỗi con ma sau đó quyết định con đường để đi đến pacman. Điều này tôi nghĩ là nhiều khả năng những gì đang xảy ra. Nhưng nó có thể bị chậm nếu xử lý sự kiện được thực hiện đồng bộ, bởi vì đường dẫn sẽ phải được tính tuần tự và con ma thứ 4 sẽ mất thời gian để thay đổi hướng và điều này có thể tạo ra độ trễ có thể nhìn thấy (có thể). Ngoài ra, những con ma sẽ tự cháy một sự kiện khi chúng va vào tường và những người xử lý sự kiện của chúng sẽ thay đổi hướng của ma. Nhưng với tần số mà pacman thay đổi hướng và bốn con ma đáp ứng, xử lý sự kiện cũng có vẻ hơi quá nhiều.

Tôi đang nói những ý tưởng trên sẽ hơi quá nhiều vì nhớ trò chơi được viết cách đây 30 năm khi thời gian và bộ nhớ cpu khan hiếm, vì vậy tôi nghĩ phải có cách dễ dàng hơn nhiều.

Ngoài ra, có vẻ như những con ma đang đi theo những con đường khác nhau ngay cả khi pacman vẫn còn. Tất cả các bóng ma có sử dụng các thuật toán tìm kiếm đường dẫn hoàn toàn khác hoặc được tối ưu hóa khác nhau không?

Tôi quan tâm nhiều hơn trong việc tìm hiểu làm thế nào tất cả các bóng ma dường như làm việc cho chính họ đồng thời so với các thuật toán tìm đường dẫn mà họ sử dụng. Suy nghĩ?

Trả lời

6

Bạn đang suy nghĩ quá mức về điều này.

Chủ đề và trình xử lý sự kiện diễn ra rất chậm theo tiêu chuẩn trò chơi điện tử. Công cụ trò chơi đa luồng là một phát minh tương đối mới, theo nghĩa đen hàng thập kỷ sau khi Pacman được phát hành. Logic ít ỏi Pacman sẽ xảy ra bên trong một vòng lặp khá chặt chẽ duy nhất, một cái gì đó giống như giả rất đơn giản này:

while (!pacman_dead) { 
    foreach ghost { 
    if (ghost has hit a wall) { 
     if (pacman to left) turn left 
     if (pacman to right) turn right 
    } else { 
     go straight 
     if (ghost touched pacman) { 
     pacman_dead = true 
     } 
    } 
    } 

    handle_input(); 
    move_pacman(); 
    draw_screen();  
} 

Đây là một mô hình khá phổ biến trong game, và nó mang lại cho sự xuất hiện của sự đồng. Thông thường một trò chơi sẽ chạy trong một vòng lặp đơn, "va chạm" trạng thái trò chơi chuyển tiếp bởi một số gia tăng nhỏ trong không gian giữa các lần vẽ lại màn hình.Đây là lý do tại sao hiệu suất vẫn rất quan trọng trong phát triển trò chơi: Trò chơi của bạn phải lặp qua mọi đối tượng trong trò chơi cần phải làm điều gì đó hoặc đưa ra quyết định (đối thủ AI, nền tảng di chuyển, hoạt ảnh đơn giản, v.v) và cập nhật nhà nước ít nhất 30 lần mỗi giây.

+0

Mặc dù phải có nhiều logic hơn trong nội bộ, tôi nghĩ điều này về cơ bản nên là ý tưởng phải Đã được thực hiện. cảm ơn. – desigeek

+0

Ngoại trừ trường hợp bóng ma tìm kiếm/chạy từ bạn, trong trường hợp này, họ sử dụng vị trí của bạn để xác định lựa chọn đại lộ tốt nhất (hoặc chọn ngẫu nhiên một trong hai lựa chọn này). Và đối với bản ghi họ cần MỘT chủ đề để họ di chuyển độc lập với các sự kiện của người dùng (nếu bạn không di chuyển họ sẽ giúp bạn) – Rudu

+0

Bạn cần một số ngẫu nhiên trong chuyển động của ma, nếu không, sớm hay muộn tất cả các bóng ma sẽ di chuyển cùng nhau trong một số lượng lớn, làm cho trò chơi tương đối dễ dàng. Và dĩ nhiên, một con ma không phải đập vào tường để thay đổi hướng, anh ta có thể làm điều đó trên bất kỳ giao lộ nào. Trong trò chơi Pacman ban đầu, Ghost thậm chí có thể đảo ngược mà không cần cảnh báo. –

13

Có rất nhiều thông tin tuyệt vời về cách pacman hoạt động here bao gồm một số chi tiết viết lên về hành vi của ma.

** Lưu ý Tôi đã tìm thấy thông tin này từ Pathfinding Algorithm For Pacman cách đây không lâu.

EDIT:

này trên blog post có nhiều thông tin hơn về những bóng ma.

+1

thánh $ * ^! đó là một trang tuyệt vời: D –

+2

Đó là một trang thực sự tuyệt vời. Nhưng anh chàng đó không được rời khỏi căn hộ của mình trong nhiều tuần !! –

+1

http://gameinternals.com/post/2072558330/understanding-pac-man-ghost-behavior có một lời giải thích tuyệt vời về hành vi của họ – GWW

1

Trước khi hiển thị từng khung hình, tôi sẽ lặp lại các bóng ma. Không có sự kiện, chủ đề hoặc các vấn đề không đồng bộ theo cách đó. Mỗi con ma có thể có một heuristic rất thô lỗ để ghi điểm di chuyển của nó và làm cho tâm trí của nó (rẽ trái hoặc phải, không có hành động, whatev).

Here's an implementation bạn có thể xem. :)