public PlayerObject(Size panel_size, GameObjects NPC) : base(panel_size) //берём у нпс все параметры { this.center = NPC.GetCenter(); this.radius = NPC.GetRadius(); this.color = NPC.GetColor(); this.step = NPC.GetStep(); key = new KeyPlayer(ClassGame.GetDlinaKey()); // создали новый пустой ключ для игрока 256 переделать на значения комбобокса!!!!!!!!!!!!!!!!!! key.AddBitArray(NPC.GetKey().GetKeyArray()); // ключь нпс переделываем в ключ игрока }
public bool YouCanSeeMe(GameObjects NPCList) //проверка видит конкретный нпс, кого-то или нет { double d = Math.Sqrt(Math.Pow(NPCList.GetCenter().X - center.X, 2) + Math.Pow(NPCList.GetCenter().Y - center.Y, 2)); //расчёт расстояние между окружностями(объект и обзор) if (d <= (NPCList.GetRadius() + radobz)) //пересечение объекта и обзора { //double angle = Math.Atan2(NPCList.center.Y - center.Y, NPCList.center.X - center.X);//попадает ли объект в сектор //angle = (angle * 180) / Math.PI;//перевод в градусы //Console.WriteLine(angle); ///System.Diagnostics.Debug.WriteLine("нпс видит"); return(true); } return(false); }
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; //выбирается новая цель } } } } } } }