Я слабый программист совсем , пытаюсь как неделю понять а*, написал как сам вижу его, можете ли вы помочь мне его дописать или ткнуть носом, что не так:
Есть класс который создает саму клетку
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Клетка : MonoBehaviour
{
public bool Занята = false;
public bool Проверена = false;
public int Ширина = 0;
public int Высота = 0;
public int Цена = 0;
public int Всего = 0;
public int Растояние = 0;
public GameObject Сылка_На_Себя;
void Start()
{
Ссылка = Сылка_На_Себя.GetComponent<MeshRenderer>().material;
}
}
using System.Collections.Generic;
using UnityEngine;
public class Клетка : MonoBehaviour
{
public bool Занята = false;
public bool Проверена = false;
public int Ширина = 0;
public int Высота = 0;
public int Цена = 0;
public int Всего = 0;
public int Растояние = 0;
public GameObject Сылка_На_Себя;
void Start()
{
Ссылка = Сылка_На_Себя.GetComponent<MeshRenderer>().material;
}
}
Тут создаю карту:
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Карта : MonoBehaviour
{
[SerializeField]
private GameObject Ячейка_Карты;
[SerializeField]
private int Ширина;
[SerializeField]
private int Высота;
public Клетка[,] Крта_Масив;
void Start()
{
Создать_Карту();
}
void Update()
{
}
private void Создать_Карту()
{
Крта_Масив = new Клетка[Ширина, Высота];
for (int y = 0; y < Высота; y++)
{
for (int x = 0; x < Ширина; x++)
{
GameObject создать = Instantiate(Ячейка_Карты, new Vector3(x, 0, y * -1), Quaternion.identity);
Клетка клетка = создать.GetComponent<Клетка>();
Крта_Масив[x, y] = клетка;
Крта_Масив[x, y].Ширина = x;
Крта_Масив[x, y].Высота = y;
}
}
}
}
using System.Collections.Generic;
using UnityEngine;
public class Карта : MonoBehaviour
{
[SerializeField]
private GameObject Ячейка_Карты;
[SerializeField]
private int Ширина;
[SerializeField]
private int Высота;
public Клетка[,] Крта_Масив;
void Start()
{
Создать_Карту();
}
void Update()
{
}
private void Создать_Карту()
{
Крта_Масив = new Клетка[Ширина, Высота];
for (int y = 0; y < Высота; y++)
{
for (int x = 0; x < Ширина; x++)
{
GameObject создать = Instantiate(Ячейка_Карты, new Vector3(x, 0, y * -1), Quaternion.identity);
Клетка клетка = создать.GetComponent<Клетка>();
Крта_Масив[x, y] = клетка;
Крта_Масив[x, y].Ширина = x;
Крта_Масив[x, y].Высота = y;
}
}
}
}
Тут сам расчет:
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class А : MonoBehaviour
{
public Клетка Начало;
public Клетка Конец;
public Карта Карта_Сылка;
public Клетка[,] Крта_Масив;
public List<Клетка> Провереные = new List<Клетка>();
public List<Клетка> Ждущие_Проверку = new List<Клетка>();
void Start()
{
Карта_Сылка = GameObject.Find("Скрипты").GetComponent<Карта>();
Крта_Масив = Карта_Сылка.Крта_Масив;
Клетка[] я = FindObjectsOfType<Клетка>();
Начало = я[я.Length -42 ];
Конец = я[20];
for (int d = 0; d < 10; d++)
{
Крта_Масив[d, 5].Занята = true;
}
for (int d = 5; d < 37; d++)
{
Крта_Масив[d, 9].Занята = true;
}
//Начало = Провереные[Провереные.Count - 1];
Поиск_Соседних_Ячеек();
Найти_Наименьшее_Число();
int dd = 0;
foreach (var item in Ждущие_Проверку)
{
Начало = item;
Поиск_Соседних_Ячеек();
Найти_Наименьшее_Число();
}
foreach (var item in Ждущие_Проверку)
{
Провереные.Add(item);
}
}
void Найти_Наименьшее_Число()
{
int костыль = 9999;
for (int i = 1; i < Ждущие_Проверку.Count; i++)
{
if (Ждущие_Проверку[i].Всего <= костыль)
{
костыль = Ждущие_Проверку[i].Всего;
}
else
{
Ждущие_Проверку.RemoveAt(i);
i --;
}
}
}
void Update()
{
foreach (var item in Провереные)
{
item.Путь_найден = true;
}
}
void Поиск_Соседних_Ячеек()
{
Начало.Проверена = true;
if(Начало.Ширина - 1 >= 0 && Начало.Ширина -1 <= Крта_Масив.GetLength(0) && Начало.Высота + 1 >= 0 && Начало.Высота + 1 <= Крта_Масив.GetLength(1))//
{
Клетка расчет = Крта_Масив[Начало.Ширина - 1, Начало.Высота + 1];
if (расчет.Занята == false)
{
Ждущие_Проверку.Add(расчет);
if (расчет.Проверена == false)
{
расчет.Проверена = true;
int a = расчет.Ширина - Конец.Ширина;
int b = расчет.Высота - Конец.Высота;
if (a < 0) { a = a * -1; }
if (b < 0) { b = b * -1; }
расчет.Растояние = a + b;
расчет.Цена = расчет.Цена + 14;
расчет.Всего = расчет.Цена + расчет.Растояние;
}
}
}
if (Начало.Ширина >= 0 && Начало.Ширина <= Крта_Масив.GetLength(0) && Начало.Высота + 1 >= 0 && Начало.Высота + 1 <= Крта_Масив.GetLength(1))//
{
Клетка расчет = Крта_Масив[Начало.Ширина, Начало.Высота + 1];
if (расчет.Занята == false)
{
Ждущие_Проверку.Add(расчет);
if (расчет.Проверена == false)
{
расчет.Проверена = true;
int a = расчет.Ширина - Конец.Ширина;
int b = расчет.Высота - Конец.Высота;
if (a < 0) { a = a * -1; }
if (b < 0) { b = b * -1; }
расчет.Растояние = a + b;
расчет.Цена = расчет.Цена + 10;
расчет.Всего = расчет.Цена + расчет.Растояние;
}
}
}
if (Начало.Ширина + 1 >= 0 && Начало.Ширина + 1 <= Крта_Масив.GetLength(0) && Начало.Высота + 1 >= 0 && Начало.Высота + 1 <= Крта_Масив.GetLength(1))//
{
Клетка расчет = Крта_Масив[Начало.Ширина + 1, Начало.Высота + 1];
if (расчет.Занята == false)
{
Ждущие_Проверку.Add(расчет);
if (расчет.Проверена == false)
{
расчет.Проверена = true;
int a = расчет.Ширина - Конец.Ширина;
int b = расчет.Высота - Конец.Высота;
if (a < 0) { a = a * -1; }
if (b < 0) { b = b * -1; }
расчет.Растояние = a + b;
расчет.Цена = расчет.Цена + 14;
расчет.Всего = расчет.Цена + расчет.Растояние;
}
}
}
if (Начало.Ширина - 1 >= 0 && Начало.Ширина - 1 <= Крта_Масив.GetLength(0) && Начало.Высота >= 0 && Начало.Высота <= Крта_Масив.GetLength(1))//
{
Клетка расчет = Крта_Масив[Начало.Ширина - 1, Начало.Высота];
if (расчет.Занята == false)
{
Ждущие_Проверку.Add(расчет);
if (расчет.Проверена == false)
{
расчет.Проверена = true;
int a = расчет.Ширина - Конец.Ширина;
int b = расчет.Высота - Конец.Высота;
if (a < 0) { a = a * -1; }
if (b < 0) { b = b * -1; }
расчет.Растояние = a + b;
расчет.Цена = расчет.Цена + 10;
расчет.Всего = расчет.Цена + расчет.Растояние;
}
}
}
if (Начало.Ширина + 1 >= 0 && Начало.Ширина + 1 <= Крта_Масив.GetLength(0) && Начало.Высота >= 0 && Начало.Высота <= Крта_Масив.GetLength(1))//
{
Клетка расчет = Крта_Масив[Начало.Ширина + 1, Начало.Высота];
if (расчет.Занята == false)
{
Ждущие_Проверку.Add(расчет);
if (расчет.Проверена == false)
{
расчет.Проверена = true;
int a = расчет.Ширина - Конец.Ширина;
int b = расчет.Высота - Конец.Высота;
if (a < 0) { a = a * -1; }
if (b < 0) { b = b * -1; }
расчет.Растояние = a + b;
расчет.Цена = расчет.Цена + 10;
расчет.Всего = расчет.Цена + расчет.Растояние;
}
}
}
if (Начало.Ширина - 1 >= 0 && Начало.Ширина - 1 <= Крта_Масив.GetLength(0) && Начало.Высота - 1 >= 0 && Начало.Высота - 1 <= Крта_Масив.GetLength(1))
{
Клетка расчет = Крта_Масив[Начало.Ширина - 1, Начало.Высота - 1];
if (расчет.Занята == false)
{
Ждущие_Проверку.Add(расчет);
if (расчет.Проверена == false)
{
расчет.Проверена = true;
int a = расчет.Ширина - Конец.Ширина;
int b = расчет.Высота - Конец.Высота;
if (a < 0) { a = a * -1; }
if (b < 0) { b = b * -1; }
расчет.Растояние = a + b;
расчет.Цена = расчет.Цена + 14;
расчет.Всего = расчет.Цена + расчет.Растояние;
}
}
}
if (Начало.Ширина >= 0 && Начало.Ширина <= Крта_Масив.GetLength(0) && Начало.Высота - 1 >= 0 && Начало.Высота - 1 <= Крта_Масив.GetLength(1))
{
Клетка расчет = Крта_Масив[Начало.Ширина, Начало.Высота - 1];
if (расчет.Занята == false)
{
Ждущие_Проверку.Add(расчет);
if (расчет.Проверена == false)
{
расчет.Проверена = true;
int a = расчет.Ширина - Конец.Ширина;
int b = расчет.Высота - Конец.Высота;
if (a < 0) { a = a * -1; }
if (b < 0) { b = b * -1; }
расчет.Растояние = a + b;
расчет.Цена = расчет.Цена + 10;
расчет.Всего = расчет.Цена + расчет.Растояние;
}
}
}
if (Начало.Ширина + 1 >= 0 && Начало.Ширина + 1 <= Крта_Масив.GetLength(0) && Начало.Высота - 1 >= 0 && Начало.Высота - 1 <= Крта_Масив.GetLength(1))
{
Клетка расчет = Крта_Масив[Начало.Ширина + 1, Начало.Высота - 1];
if (расчет.Занята == false)
{
Ждущие_Проверку.Add(расчет);
if (расчет.Проверена == false)
{
расчет.Проверена = true;
int a = расчет.Ширина - Конец.Ширина;
int b = расчет.Высота - Конец.Высота;
if (a < 0) { a = a * -1; }
if (b < 0) { b = b * -1; }
расчет.Растояние = a + b;
расчет.Цена = расчет.Цена + 14;
расчет.Всего = расчет.Цена + расчет.Растояние;
}
}
}
}
}
using System.Collections.Generic;
using UnityEngine;
public class А : MonoBehaviour
{
public Клетка Начало;
public Клетка Конец;
public Карта Карта_Сылка;
public Клетка[,] Крта_Масив;
public List<Клетка> Провереные = new List<Клетка>();
public List<Клетка> Ждущие_Проверку = new List<Клетка>();
void Start()
{
Карта_Сылка = GameObject.Find("Скрипты").GetComponent<Карта>();
Крта_Масив = Карта_Сылка.Крта_Масив;
Клетка[] я = FindObjectsOfType<Клетка>();
Начало = я[я.Length -42 ];
Конец = я[20];
for (int d = 0; d < 10; d++)
{
Крта_Масив[d, 5].Занята = true;
}
for (int d = 5; d < 37; d++)
{
Крта_Масив[d, 9].Занята = true;
}
//Начало = Провереные[Провереные.Count - 1];
Поиск_Соседних_Ячеек();
Найти_Наименьшее_Число();
int dd = 0;
foreach (var item in Ждущие_Проверку)
{
Начало = item;
Поиск_Соседних_Ячеек();
Найти_Наименьшее_Число();
}
foreach (var item in Ждущие_Проверку)
{
Провереные.Add(item);
}
}
void Найти_Наименьшее_Число()
{
int костыль = 9999;
for (int i = 1; i < Ждущие_Проверку.Count; i++)
{
if (Ждущие_Проверку[i].Всего <= костыль)
{
костыль = Ждущие_Проверку[i].Всего;
}
else
{
Ждущие_Проверку.RemoveAt(i);
i --;
}
}
}
void Update()
{
foreach (var item in Провереные)
{
item.Путь_найден = true;
}
}
void Поиск_Соседних_Ячеек()
{
Начало.Проверена = true;
if(Начало.Ширина - 1 >= 0 && Начало.Ширина -1 <= Крта_Масив.GetLength(0) && Начало.Высота + 1 >= 0 && Начало.Высота + 1 <= Крта_Масив.GetLength(1))//
{
Клетка расчет = Крта_Масив[Начало.Ширина - 1, Начало.Высота + 1];
if (расчет.Занята == false)
{
Ждущие_Проверку.Add(расчет);
if (расчет.Проверена == false)
{
расчет.Проверена = true;
int a = расчет.Ширина - Конец.Ширина;
int b = расчет.Высота - Конец.Высота;
if (a < 0) { a = a * -1; }
if (b < 0) { b = b * -1; }
расчет.Растояние = a + b;
расчет.Цена = расчет.Цена + 14;
расчет.Всего = расчет.Цена + расчет.Растояние;
}
}
}
if (Начало.Ширина >= 0 && Начало.Ширина <= Крта_Масив.GetLength(0) && Начало.Высота + 1 >= 0 && Начало.Высота + 1 <= Крта_Масив.GetLength(1))//
{
Клетка расчет = Крта_Масив[Начало.Ширина, Начало.Высота + 1];
if (расчет.Занята == false)
{
Ждущие_Проверку.Add(расчет);
if (расчет.Проверена == false)
{
расчет.Проверена = true;
int a = расчет.Ширина - Конец.Ширина;
int b = расчет.Высота - Конец.Высота;
if (a < 0) { a = a * -1; }
if (b < 0) { b = b * -1; }
расчет.Растояние = a + b;
расчет.Цена = расчет.Цена + 10;
расчет.Всего = расчет.Цена + расчет.Растояние;
}
}
}
if (Начало.Ширина + 1 >= 0 && Начало.Ширина + 1 <= Крта_Масив.GetLength(0) && Начало.Высота + 1 >= 0 && Начало.Высота + 1 <= Крта_Масив.GetLength(1))//
{
Клетка расчет = Крта_Масив[Начало.Ширина + 1, Начало.Высота + 1];
if (расчет.Занята == false)
{
Ждущие_Проверку.Add(расчет);
if (расчет.Проверена == false)
{
расчет.Проверена = true;
int a = расчет.Ширина - Конец.Ширина;
int b = расчет.Высота - Конец.Высота;
if (a < 0) { a = a * -1; }
if (b < 0) { b = b * -1; }
расчет.Растояние = a + b;
расчет.Цена = расчет.Цена + 14;
расчет.Всего = расчет.Цена + расчет.Растояние;
}
}
}
if (Начало.Ширина - 1 >= 0 && Начало.Ширина - 1 <= Крта_Масив.GetLength(0) && Начало.Высота >= 0 && Начало.Высота <= Крта_Масив.GetLength(1))//
{
Клетка расчет = Крта_Масив[Начало.Ширина - 1, Начало.Высота];
if (расчет.Занята == false)
{
Ждущие_Проверку.Add(расчет);
if (расчет.Проверена == false)
{
расчет.Проверена = true;
int a = расчет.Ширина - Конец.Ширина;
int b = расчет.Высота - Конец.Высота;
if (a < 0) { a = a * -1; }
if (b < 0) { b = b * -1; }
расчет.Растояние = a + b;
расчет.Цена = расчет.Цена + 10;
расчет.Всего = расчет.Цена + расчет.Растояние;
}
}
}
if (Начало.Ширина + 1 >= 0 && Начало.Ширина + 1 <= Крта_Масив.GetLength(0) && Начало.Высота >= 0 && Начало.Высота <= Крта_Масив.GetLength(1))//
{
Клетка расчет = Крта_Масив[Начало.Ширина + 1, Начало.Высота];
if (расчет.Занята == false)
{
Ждущие_Проверку.Add(расчет);
if (расчет.Проверена == false)
{
расчет.Проверена = true;
int a = расчет.Ширина - Конец.Ширина;
int b = расчет.Высота - Конец.Высота;
if (a < 0) { a = a * -1; }
if (b < 0) { b = b * -1; }
расчет.Растояние = a + b;
расчет.Цена = расчет.Цена + 10;
расчет.Всего = расчет.Цена + расчет.Растояние;
}
}
}
if (Начало.Ширина - 1 >= 0 && Начало.Ширина - 1 <= Крта_Масив.GetLength(0) && Начало.Высота - 1 >= 0 && Начало.Высота - 1 <= Крта_Масив.GetLength(1))
{
Клетка расчет = Крта_Масив[Начало.Ширина - 1, Начало.Высота - 1];
if (расчет.Занята == false)
{
Ждущие_Проверку.Add(расчет);
if (расчет.Проверена == false)
{
расчет.Проверена = true;
int a = расчет.Ширина - Конец.Ширина;
int b = расчет.Высота - Конец.Высота;
if (a < 0) { a = a * -1; }
if (b < 0) { b = b * -1; }
расчет.Растояние = a + b;
расчет.Цена = расчет.Цена + 14;
расчет.Всего = расчет.Цена + расчет.Растояние;
}
}
}
if (Начало.Ширина >= 0 && Начало.Ширина <= Крта_Масив.GetLength(0) && Начало.Высота - 1 >= 0 && Начало.Высота - 1 <= Крта_Масив.GetLength(1))
{
Клетка расчет = Крта_Масив[Начало.Ширина, Начало.Высота - 1];
if (расчет.Занята == false)
{
Ждущие_Проверку.Add(расчет);
if (расчет.Проверена == false)
{
расчет.Проверена = true;
int a = расчет.Ширина - Конец.Ширина;
int b = расчет.Высота - Конец.Высота;
if (a < 0) { a = a * -1; }
if (b < 0) { b = b * -1; }
расчет.Растояние = a + b;
расчет.Цена = расчет.Цена + 10;
расчет.Всего = расчет.Цена + расчет.Растояние;
}
}
}
if (Начало.Ширина + 1 >= 0 && Начало.Ширина + 1 <= Крта_Масив.GetLength(0) && Начало.Высота - 1 >= 0 && Начало.Высота - 1 <= Крта_Масив.GetLength(1))
{
Клетка расчет = Крта_Масив[Начало.Ширина + 1, Начало.Высота - 1];
if (расчет.Занята == false)
{
Ждущие_Проверку.Add(расчет);
if (расчет.Проверена == false)
{
расчет.Проверена = true;
int a = расчет.Ширина - Конец.Ширина;
int b = расчет.Высота - Конец.Высота;
if (a < 0) { a = a * -1; }
if (b < 0) { b = b * -1; }
расчет.Растояние = a + b;
расчет.Цена = расчет.Цена + 14;
расчет.Всего = расчет.Цена + расчет.Растояние;
}
}
}
}
}