Tôi đang làm một trò chơi phòng thủ tháp 2D. Cho đến nay tôi có một mảng 2d hoạt động như một lưới cho trò chơi của tôi. Tôi có thể đặt các tòa tháp lên nó, chạy kẻ thù và một số thứ kéo và bắn tháp.
Bây giờ tôi đang phải đối mặt với một vấn đề trong logic vị trí tháp. Tôi muốn rằng luôn có một lối đi cho kẻ thù, có nghĩa là người dùng không thể chặn đường hoàn toàn bằng cách đặt tháp. Ví dụ. nếu người dùng đặt các tháp theo chiều dọc trên bản đồ, thuật toán phải ngăn vị trí của một tòa tháp sẽ hoàn thành đường thẳng đứng. Hoặc theo bất kỳ cách nào khác, phải có ít nhất một không gian trống (có thể đi bộ) để kẻ thù có thể trốn thoát.
Logic hiện tại của tôi kiểm tra theo mọi hướng bất cứ khi nào tháp được đặt. Nếu có một tháp hướng lên trên, nó sẽ gọi lại chức năng tương tự trên tháp phía trên cho đến khi chạm vào tường. Nó trả về 1 cho tường hướng lên và 5 cho tường hướng xuống và trả về chức năng (tháp lên / xuống) nếu có tháp. đây là mã:
int checkCollision(tower)
{
if( there is a tower up)
return checkCollision(up tower);
if(there is a tower down)
return checkCollision(down tower);
......all directions.....
if( there is a wall on UP )
return 1;
if( there is a wall DOWN )
return 5;
....all walls......
return 0;
}
Bây giờ điều tôi muốn là, đồng thời kiểm tra xem có một bức tường phía bắc và bức tường phía nam hay kiểm tra bất kỳ hướng nào khác với bất kỳ khả năng nào khác (như lên xuống, lên chéo, xuống chéo ... và không) cho phép người dùng đặt một tòa tháp vì cần có một nơi còn lại cho kẻ thù.
Tôi không hài lòng với mã của tôi tại thời điểm này. Ý tôi là mã của tôi nói với tôi rằng một bức tường được tìm thấy nhưng làm thế nào tôi có thể kiểm tra xem một bức tường được tìm thấy theo một hướng và một bức tường cũng được tìm thấy ở một hướng khác? Tôi không muốn đi vào các khả năng như:
if(checkCollision(tower) == 1 && checkCollision(tower) == 5)
"You cannot place"
Tôi muốn một cái gì đó như:
if( any combination of more than 2 wall found and there is entry/exit point in between) //so it is wall to wall
"You cant place"
Tôi cũng đã thử các cờ tính toán trước nếu có các bức tường ở hai bên (như lên xuống, chéo lên, v.v.) sau đó không cho phép người dùng đặt tháp nhưng điều đó vẫn không hoạt động.