Nó luôn phụ thuộc vào tên miền. Nhưng cũng có hai tình huống mà bạn muốn thực hiện các loại tìm kiếm này. Tình hình là sau khi di chuyển (một sự thay đổi cho lĩnh vực trò chơi được thực hiện bởi người chơi), và khác sẽ là nếu/khi toàn bộ hội đồng quản trị đã thay đổi.
Trong Tetris, bạn sẽ không cần phải quét toàn bộ bảng sau khi một mảnh bị rơi. Bạn chỉ cần phải tìm kiếm các hàng mảnh được chạm vào.
Trong trò chơi match-3 như Bejeweled, khi bạn đổi hai phần liền kề một lúc, trước tiên bạn sẽ chạy tìm kiếm được bản địa hóa theo từng hướng xung quanh mỗi ô vuông thay đổi để xem có phần nào được kích hoạt hay không. Sau đó, nếu họ có, trò chơi sẽ đổ một số mảnh ngẫu nhiên mới lên bảng. Bây giờ, bạn có thể chạy cùng một tìm kiếm được bản địa hóa quanh mỗi ô vuông được thay đổi, nhưng điều đó có thể liên quan đến rất nhiều câu lệnh if
và thực sự có thể chậm hơn để quét toàn bộ bảng từ trên xuống dưới cùng bên phải. Nó phụ thuộc vào việc thực hiện của bạn và sẽ yêu cầu lược tả.
Như Adrian nói, một mảng 2D đơn giản đủ. Tuy nhiên, thông thường, bạn có thể thêm một "biên giới" của các pixel xung quanh mảng này, để đơn giản hóa khía cạnh tìm kiếm-cho-mẫu. Nếu không có đường viền, bạn phải có các câu lệnh if
dọc theo hình vuông cạnh có nội dung "tốt, nếu bạn ở hàng trên cùng, đừng tìm kiếm (và rời khỏi mảng)".Với một đường viền xung quanh nó, bạn có thể an toàn chỉ tìm kiếm thông qua mọi thứ: tiết kiệm cho mình các câu lệnh if
, tiết kiệm cho mình sự phân nhánh, tiết kiệm các vấn đề đường ống, tìm kiếm nhanh hơn.
Với Jon: những thứ này thực sự quan trọng trong cài đặt hiệu suất cao, ngay cả trên các máy hiện đại, nếu bạn đang thực hiện thuật toán tìm kiếm để giải quyết trò chơi. Nếu bạn đang có, bạn muốn mô phỏng cơ bản của bạn để chạy càng nhanh càng tốt để tìm kiếm càng sâu càng tốt trong các chu kỳ ít nhất.
Nguồn
2009-08-28 18:40:49