我在一个新的类构造函数中有这个:
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 个航路点线,仅此而已。