1

我在一个新的类构造函数中有这个:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace TowerDefense
{
    public class Level
    {

        private List<Texture2D> tileTextures = new List<Texture2D>();
        private List<int[,]> MapsArrays = new List<int[,]>();
        private Queue<Vector2> waypoints = new Queue<Vector2>();
        private List<int> waypath = new List<int>();

        int[,] map = new int[,]
        {
        {1,1,1,0,0,0,0,0,},
        {0,0,1,0,0,0,0,0,},
        {0,0,1,1,0,0,1,1,},
        {0,0,0,1,0,0,1,0,},
        {0,0,1,1,0,0,1,0,},
        {0,0,1,0,0,0,1,0,},
        {0,0,1,1,1,0,1,0,},
        {0,0,0,0,1,1,1,0,},
        };

        int[,] map1 = new int[,]
        {
        {0,0,0,1,1,1,1,0,},
        {0,0,0,1,0,0,1,0,},
        {0,0,0,1,1,0,1,0,},
        {1,1,0,0,1,0,1,0,},
        {0,1,0,0,1,0,1,0,},
        {0,1,1,1,1,0,1,0,},
        {0,0,0,1,1,0,1,1,},
        {0,0,0,0,0,0,0,0,},
        };

        int[,] map2 = new int[,]
        {
        {1,1,0,0,1,0,0,0,},
        {0,1,0,0,1,0,1,1,},
        {0,1,0,0,1,0,1,0,},
        {0,1,1,1,1,1,1,0,},
        {0,0,0,0,0,1,0,0,},
        {0,1,1,1,1,1,1,1,},
        {0,1,0,1,0,0,0,0,},
        {0,1,0,1,0,0,0,0,},
        };

        public Level()
        {
            MapsArrays.Add(map);
            MapsArrays.Add(map1);
            MapsArrays.Add(map2);

            for (int i = 0; i < Width; i++)
            {
                for (int f = 0; f < Height; f++)
                {
                    int textureIndex = MapsArrays[0][i, f];
                    waypath.Add(textureIndex);
                }
            }
        }

所以现在 waypath 包含了所有的第一张地图 0 和 1 里面。现在我需要以某种方式将这些 0 和 1 分配给航路点线:

waypoints.Enqueue(new Vector2(3, 4) * 64);

但相反,许多像这样的线,坐标在 3,4 3,5 7,8 等等......我需要以某种方式在路径列表中使用 0 和 1,因此 waypoints.Enqueue 将使用 0 和 1 自动.

这就是我在硬编码之前使用航点的方式:

waypoints.Enqueue(new Vector2(0, 0) * 64);
waypoints.Enqueue(new Vector2(2, 0) * 64);
waypoints.Enqueue(new Vector2(2, 3) * 64);
waypoints.Enqueue(new Vector2(3, 2) * 64);
waypoints.Enqueue(new Vector2(4, 2) * 64);
waypoints.Enqueue(new Vector2(4, 4) * 64);
waypoints.Enqueue(new Vector2(3, 4) * 64);
waypoints.Enqueue(new Vector2(3, 5) * 64);
waypoints.Enqueue(new Vector2(2, 5) * 64);
waypoints.Enqueue(new Vector2(2, 7) * 64);
waypoints.Enqueue(new Vector2(7, 7) * 64);

但我不想以这种方式使用它,而是使用 List waypath 使其自动成为航路点。

编辑:

第一个航路点应该是手动的,例如在第一张地图中,第一个数字 1 在左上角,所以我希望它是开始,所以左上角是 0,0,所以第一个航路点将是:

while (true)
            {
                int rows = map.GetUpperBound(0);
                int cols = map.GetUpperBound(1);
                int textureIndex = MapsArrays[0][rows,cols];
                waypoints.Enqueue(new Vector2(0, 0) * 64);
                if (textureIndex == 1)
                {

                    waypath.Add(textureIndex);
                }

我还不确定这段代码,但我的想法是制作 whi(true) 因为我不知道地图可以是多长时间 8x* 或 800x800 或 90X100 然后第一个航路点是 0,0 所以我知道下一个航路点不能(-1,0)它只能向右移动它也不能向上移动所以它可以是(0,-1)不知何故我需要使用许多if's检查我认为4个if's或更多来检查方向。

如果第一个 1 在 0,0,那么我需要从左上角右下角扫描并检查下一个 1 在哪里,然后决定下一步移动是在航路点 (x,0) 还是 (0,x) 还是 (- 1,x) 或 (x,-1) 因为也许我向右移动,现在它应该向下移动然后向左移动。再一次,逻辑是以某种方式循环扫描所有方向并找到数字 1 的位置并以这种方式移动。

再次确定第一个航路点是 0,0 然后应该使用 IF 自动找到所有方向的路径,我需要使用 4 个 IF 或 6 个 If 来检查所有方向。

所以最后,如果我没记错的话,我应该有 4 或 6 个 IF 和 4-6 个航路点线,仅此而已。

4

0 回答 0