private bool Estb(GameObjects NPCList_obj) //проверка можно ли съесть или нет { double bolshe = (double)this.radius / NPCList_obj.GetRadius(); //радиус текущего объекта, делится с который видно //if (bolshe > 1.15)//есть можно, если на 15% меньше ///System.Diagnostics.Debug.WriteLine("Estb"); ///System.Diagnostics.Debug.WriteLine(Convert.ToString(bolshe)); if (bolshe > 1.01)//есть можно, если на 1% меньше { /// System.Diagnostics.Debug.WriteLine("можно есть"); return(true); } else { return(false); } }
private bool Ubegat(GameObjects NPCList_obj) //проверка убегать объекту или нет { double bolshe = (double)NPCList_obj.GetRadius() / this.radius; //радиус объекта, который видно делится с текущим //if (bolshe > 1.15)//есть можно, если на 15% меньше ///System.Diagnostics.Debug.WriteLine("ubegat"); ///System.Diagnostics.Debug.WriteLine(Convert.ToString(bolshe)); if (bolshe > 1.01)//есть можно, если на 1% меньше { ///System.Diagnostics.Debug.WriteLine("убегать"); return(true); } else { return(false); } }
public void Vidno_ne(LinkedList <GameObjects> List1) //проверка видно кого или нет { WhoEat = new LinkedList <GameObjects>(); //новый список, от кого убегать target = null; for (int i = 0; i < List1.Count; i++) { GameObjects NPCList_obj = List1.ElementAt(i);//перебор всех нпс if (NPCList_obj == null) { continue; } if (NPCList_obj != this) //проверка какой это нпс(что-бы не проверять самого себя) { bool vidno = YouCanSeeMe(NPCList_obj); //нпс проверяет видит ли он другой объект if (vidno == true) { bool nadoubegat = Ubegat(NPCList_obj); if (nadoubegat == true) //надо ли убегать? { WhoEat.AddLast(NPCList_obj); //добавляем в лист } bool mojnoestb = Estb(NPCList_obj); if (mojnoestb == true) //можно есть? { if (target == null) { target = NPCList_obj; } else { if (NPCList_obj.GetRadius() > target.GetRadius()) //поиск наилучшей цели МОЖНО ОДИН ИФ { target = NPCList_obj; //выбирается новая цель } } } } } } }
//{ // int step = 10; // Point MousePosition1 = new Point(MousePosition.X - radius, MousePosition.Y - radius); // double dist = Math.Sqrt(Math.Pow(MousePosition1.X - center.X, 2) + Math.Pow(MousePosition1.Y - center.Y, 2)); //расчёт расстояния // Console.WriteLine(dist); // if (dist <= step) //сдвиг объекта // { // center = MousePosition1; // } // else // { // //сдвиг на шаг к курсору // center.X = (int)(center.X + (MousePosition1.X - center.X) * (step / dist)); // center.Y = (int)(center.Y + (MousePosition1.Y - center.Y) * (step / dist)); // } //} protected void KillObj(LinkedList <GameObjects> List1, GameObjects target) //съедание { if (target != null) //проверка, что кто-то выбран для съедания { if (radius > target.radius) //проерка кто больше { double dist = Math.Sqrt(Math.Pow(center.X - target.GetCenter().X, 2) + Math.Pow(center.Y - target.GetCenter().Y, 2)); //момент съедания(центр круга еды в круге охотника) if (dist < radius) //проверка ^ { for (int i = 0; i < List1.Count; i++) //удалить кого съели { if (List1.ElementAt(i) == target) { List1.Find(target).Value = null; // удалить из списка, кого съели key.AddBitArray(target.GetKey().GetKeyArray()); // тот, кто съедает кого-то получает его последовательность IncRad(target); // вызов увеличения break; } } } } } }
//Выбор объекта, которым будем управлять public void CreatePlayer(Point MousePosition) { if (PlayerInList() == false) //проверка не выбран ли уже объект { //System.Diagnostics.Debug.WriteLine("mouse"); //System.Diagnostics.Debug.WriteLine(Convert.ToString(MousePosition.X)); //System.Diagnostics.Debug.WriteLine(Convert.ToString(MousePosition.Y)); double mindist = 10000; //мин расстояние GameObjects podhodNPCList = null; for (int i = 0; i < np; i++) { if (NPCList.ElementAt(i) == null) //проверка если нпс в списке нул { continue; } Point center = NPCList.ElementAt(i).GetCenter(); //получение координта центра нпс double dist = Math.Sqrt(Math.Pow(MousePosition.X - center.X, 2) + Math.Pow(MousePosition.Y - center.Y, 2)); //рассчтё расстояния от курсора до объектов if (mindist > dist) //нахождение ближайшего нпс { mindist = dist; podhodNPCList = NPCList.ElementAt(i); } //System.Diagnostics.Debug.WriteLine("center"); //System.Diagnostics.Debug.WriteLine(Convert.ToString(center.X)); //System.Diagnostics.Debug.WriteLine(Convert.ToString(center.Y)); //System.Diagnostics.Debug.WriteLine("dist"); //System.Diagnostics.Debug.WriteLine(Convert.ToString(dist)); } Player = new PlayerObject(p.Size, podhodNPCList); //создание игрока NPCList.Remove(podhodNPCList); //удаление выбранного нпс NPCList.AddFirst(Player); //добавление игрока (подмена нпс на игрока) } }
public override void IncRad(GameObjects target) // увеличение радиуса обзора { base.IncRad(target); radobz = 5 * radius; }