public void ClearTankAlgorithm() { // Позволяем очистить алгоритм, если он не выполняется if (!ParallelAlgorithm.GetInstance().running&& ParallelAlgorithm.GetInstance().currentAction == 0) { if (MessageBox.Show("Вы уверены, что хотите очистить алгоритм данного танка? Все несохраненные данные будут утеряны.", "Очистка алгоритма", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { for (int i = dgvAlgorithm.Rows.Count - 1; i >= 0; i--) { dgvAlgorithm.Rows.RemoveAt(i); } dgvAlgorithm.ClearSelection(); dgvAlgorithm.Focus(); } } else { MessageBox.Show("Чтобы очистить алгоритм, необходимо сначала остановить его.", "Очистка алгоритма", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
public void SaveAlgorithm() { XmlSerializer xmlSerializer = new XmlSerializer(typeof(ParallelAlgorithm)); string xmlContent = string.Empty; using (StringWriter textWriter = new StringWriter()) { xmlSerializer.Serialize(textWriter, ParallelAlgorithm.GetInstance()); xmlContent = textWriter.ToString(); } AlgorithmModel algorithm = new AlgorithmModel(); algorithm.Id = id; algorithm.XmlContent = xmlContent; algorithm.Result = result; algorithm.Success = success; algorithm.CreationDate = DateTime.Now; algorithm.Map = Settings.GetInstance().currentMap; algorithm.User = Settings.GetInstance().currentUser; Settings.GetInstance().context.Algorithms.Add(algorithm); Settings.GetInstance().context.SaveChanges(); }
public void SetCommand(ComboBox cb) { if (cb.SelectedIndex == -1) { return; } if (!ParallelAlgorithm.GetInstance().running&& ParallelAlgorithm.GetInstance().currentAction == 0) { // Задаем номер стобца int index = 0; switch (cb.Name) { case "cbMove": index = 1; break; case "cbCharge": index = 2; break; case "cbTurret": index = 3; break; } // Изменяем команды выделенного действия алгоритма if (dgvAlgorithm.SelectedCells.Count != 0) { dgvAlgorithm.Rows[dgvAlgorithm.SelectedCells[0].RowIndex].Cells[index].Value = cb.SelectedItem.ToString(); } // Вставляем новое действие в конец алгоритма else { int number = dgvAlgorithm.RowCount + 1; string move = index == 1 ? cb.SelectedItem.ToString() : "Бездействие"; string charge = index == 2 ? cb.SelectedItem.ToString() : "Бездействие"; string turret = index == 3 ? cb.SelectedItem.ToString() : "Бездействие"; dgvAlgorithm.Rows.Add(number, move, charge, turret); // Перемещаем таблицу вниз, чтобы были видны новые добавленные дейтсвия try { dgvAlgorithm.FirstDisplayedScrollingRowIndex = dgvAlgorithm.Rows.Count - 1; } catch (Exception) { // Ignore exception } } // Отменяем выделение и ставим фокус на таблице dgvAlgorithm.ClearSelection(); dgvAlgorithm.Focus(); } else { MessageBox.Show("Чтобы изменить команды алгоритма, необходимо сначала остановить его.", "Изменение команд алгоритма", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
public Errors GetErrors() { return(ParallelAlgorithm.GetInstance().errors); }
public bool CheckErrors() { return(ParallelAlgorithm.GetInstance().errors.Check()); }
public double ComputeEfficiency(double mapWidth, double mapHeight, double initiallyBurningTrees, double totalTrees, double burnedTrees) { return(ParallelAlgorithm.GetInstance().ComputeEfficiency(mapWidth, mapHeight, initiallyBurningTrees, totalTrees, burnedTrees)); }
public bool IsExecuted() { return(ParallelAlgorithm.GetInstance().IsExecuted()); }
public void StepAlgorithm() { ParallelAlgorithm.GetInstance().Step(); }
public void SaveAlgorithm(IOpenSave openSave) { ParallelAlgorithm.GetInstance().SaveAlgorithm(openSave); }
public void ClearAlgorithm() { ParallelAlgorithm.GetInstance().Clear(); }
public void RunAlgorithm() { ParallelAlgorithm.GetInstance().Run(); }
public void ReloadAlgorithm() { ParallelAlgorithm.GetInstance().Reload(); }
public static void ParallelAlgorithmController_Loaded(object sender, ParallelAlgorithm.LoadEventArgs e) { DetachEvents(); planForm.dgvPlan.Rows.Clear(); //planForm.dgvPlan.Rows.Add(1); //planForm.dgvPlan.Rows[0].Cells[0].Value = 1; // Обновляем DataGridView в соответствии с алгоритмом for (int i = 0; i < algorithmForms.Count; i++) { // Очищаем таблицу перед добавлением строк algorithmForms[i].dgvAlgorithm.Rows.Clear(); // Заполняем таблицу данными алгоритма for (int j = 0; j < ParallelAlgorithm.GetInstance().algorithms[i].actions.Count; j++) { Action action = ParallelAlgorithm.GetInstance().algorithms[i].actions[j]; int number = j + 1; string move = action.commands[(int)Action.Types.Move].ToString(); string charge = action.commands[(int)Action.Types.Charge].ToString(); string turret = action.commands[(int)Action.Types.Turret].ToString(); uint? planItem = action.planItem; algorithmForms[i].dgvAlgorithm.Rows.Add(number, move, charge, turret, planItem != 0 ? planItem : null); } // Отменяем выделение algorithmForms[i].dgvAlgorithm.ClearSelection(); } // Обновляем DataGridView плана в соответствии с алгоритмом for (int i = 0; i < ParallelAlgorithm.GetInstance().plan.items.Count; i++) { if (planForm.dgvPlan.Columns.Count == 2) { planForm.dgvPlan.Rows.Add(ParallelAlgorithm.GetInstance().plan.items[i].number, ParallelAlgorithm.GetInstance().plan.items[i].tankActions[0]); } if (planForm.dgvPlan.Columns.Count == 3) { planForm.dgvPlan.Rows.Add(ParallelAlgorithm.GetInstance().plan.items[i].number, ParallelAlgorithm.GetInstance().plan.items[i].tankActions[0], ParallelAlgorithm.GetInstance().plan.items[i].tankActions[1]); } if (planForm.dgvPlan.Columns.Count == 4) { planForm.dgvPlan.Rows.Add(ParallelAlgorithm.GetInstance().plan.items[i].number, ParallelAlgorithm.GetInstance().plan.items[i].tankActions[0], ParallelAlgorithm.GetInstance().plan.items[i].tankActions[1], ParallelAlgorithm.GetInstance().plan.items[i].tankActions[2]); } if (planForm.dgvPlan.Columns.Count == 5) { planForm.dgvPlan.Rows.Add(ParallelAlgorithm.GetInstance().plan.items[i].number, ParallelAlgorithm.GetInstance().plan.items[i].tankActions[0], ParallelAlgorithm.GetInstance().plan.items[i].tankActions[1], ParallelAlgorithm.GetInstance().plan.items[i].tankActions[2], ParallelAlgorithm.GetInstance().plan.items[i].tankActions[3]); } //planForm.dgvPlan.Rows.Add(ParallelAlgorithm.GetInstance().plan.items.Count); //planForm.dgvPlan.Rows[i].Cells[0].Value = ParallelAlgorithm.GetInstance().plan.items[i].number; //for (int j = 0; j < ParallelAlgorithm.GetInstance().plan.items[i].tankActions.Count; j++) //{ // planForm.dgvPlan.Rows[i].Cells[j + 1].Value = ParallelAlgorithm.GetInstance().plan.items[i].tankActions[j]; //} } AttachEvents(); }
private void button1_Click(object sender, EventArgs e) { var t = ParallelAlgorithm.GetInstance(); }
public void ClearErrors() { ParallelAlgorithm.GetInstance().errors.Clear(); }
// Выполняет построение мира, инициализирует точки старта объектов public void BuildWorld() { // Устанавливаем параметры карты Utilities.GetInstance().TILE_SIZE = map.GetTileSize().X; Utilities.GetInstance().TANKS_COUNT = map.GetObjects("tank").Count; Utilities.GetInstance().WIDTH_TILE_COUNT = (uint)map.width; Utilities.GetInstance().HEIGHT_TILE_COUNT = (uint)map.height; Utilities.GetInstance().INIT_BURNING_TREES = map.GetObjects("tree").Where(obj => obj.GetPropertyBool("burns")).Count(); coordinateSystem = new CoordinateSystem(Utilities.GetInstance().WIDTH_TILE_COUNT, Utilities.GetInstance().HEIGHT_TILE_COUNT, resources); traces = new List <WaterTrace>(); // Устанавливаем направление ветра wind = new Wind(Textures.ID.Wind, resources, map.properties["wind"]); //switch (map.properties["wind"]) //{ // case "up": // wind = new Wind(Wind.Direction.Up); // break; // case "upleft": // wind = new Wind(Wind.Direction.UpLeft); // break; // case "left": // wind = new Wind(Wind.Direction.Left); // break; // case "leftdown": // wind = new Wind(Wind.Direction.LeftDown); // break; // case "down": // wind = new Wind(Wind.Direction.Down); // break; // case "downright": // wind = new Wind(Wind.Direction.DownRight); // break; // case "right": // wind = new Wind(Wind.Direction.Right); // break; // case "rightup": // wind = new Wind(Wind.Direction.RightUp); // break; // default: // throw new Exception("Неверно указано направление ветра. Проверьте правильность значений переменных карты."); //} // Устанавливаем начальное положение объектов местности (деревьев, озер, гор) terrain = new Terrain(map.GetAllObjects(), resources, wind); // TODO: Добавить проверки на корректные цифры из файла карты (кратные цифры...) // Устанавливаем начальное положение танков tanks = new List <Tank>(); for (int i = 0; i < map.GetObjects("tank").Count; i++) { // Создаем экземпляр танка GameObject tankObject = map.GetObjects("tank")[i]; Tank tank = new Tank((Textures.ID)(i * 2), (Textures.ID)(i * 2 + 1), resources, (Tank.TankColor)i); tank.SetTerrain(terrain); tank.SetTanks(tanks); tank.SetAlgorithm(ParallelAlgorithm.GetInstance()[i]); switch (Utilities.NormalizedRotation(tankObject.rotation)) { case 0: tank.SetPosition(new Vector2f(tankObject.rect.Left + Utilities.GetInstance().TILE_SIZE / 2, tankObject.rect.Top - Utilities.GetInstance().TILE_SIZE / 2)); break; case 90: tank.SetPosition(new Vector2f(tankObject.rect.Left + Utilities.GetInstance().TILE_SIZE / 2, tankObject.rect.Top + Utilities.GetInstance().TILE_SIZE / 2)); break; case 180: tank.SetPosition(new Vector2f(tankObject.rect.Left - Utilities.GetInstance().TILE_SIZE / 2, tankObject.rect.Top + Utilities.GetInstance().TILE_SIZE / 2)); break; case 270: tank.SetPosition(new Vector2f(tankObject.rect.Left - Utilities.GetInstance().TILE_SIZE / 2, tankObject.rect.Top - Utilities.GetInstance().TILE_SIZE / 2)); break; default: throw new Exception("Неверно указаны координаты танка. Проверьте правильность значений переменных танка."); } tank.SetRotation(tankObject.rotation); //var o = map.GetObjects("tank")[i].properties; tank.turret.maxWaterPressure = map.GetObjects("tank")[i].GetPropertyInt("maxPressure"); tank.turret.maxWaterCapacity = map.GetObjects("tank")[i].GetPropertyInt("maxCapacity"); tank.turret.waterCapacity = map.GetObjects("tank")[i].GetPropertyInt("capacity"); // Подписываемся на обработку ошибок танка tank.Collided += (sender, e) => { ParallelAlgorithm.GetInstance().errors.Add(new CollidedError((Tank)sender, e.entity)); }; tank.MapLeft += (sender, e) => { ParallelAlgorithm.GetInstance().errors.Add(new LeftMapError((Tank)sender)); }; tank.NearLakeError += (sender, e) => { ParallelAlgorithm.GetInstance().errors.Add(new NearLakeError((Tank)sender)); }; tank.RefuelError += (sender, e) => { ParallelAlgorithm.GetInstance().errors.Add(new RefuelError((Tank)sender)); }; // Создаем экземпляр башни танка GameObject turretObject = map.GetObjects("turret").Find(turret => turret.rect.Left == tankObject.rect.Left && turret.rect.Top == tankObject.rect.Top); tank.SetTurretRotation(tankObject.rotation - turretObject.rotation); tank.turret.UpDown(false); // Подписываемся на обработку ошибок башни танка tank.turret.TurretPressureError += (sender, e) => { ParallelAlgorithm.GetInstance().errors.Add(new PressureError(((Turret)sender).tank)); }; tank.turret.TurretUpError += (sender, e) => { ParallelAlgorithm.GetInstance().errors.Add(new UpError(((Turret)sender).tank)); }; tank.turret.TurretDownError += (sender, e) => { ParallelAlgorithm.GetInstance().errors.Add(new DownError(((Turret)sender).tank)); }; tank.turret.WeaponAlreadyChargedError += (sender, e) => { ParallelAlgorithm.GetInstance().errors.Add(new WeaponAlreadyChargedError(((Turret)sender).tank)); }; tank.turret.WeaponUpChargeError += (sender, e) => { ParallelAlgorithm.GetInstance().errors.Add(new WeaponUpChargeError(((Turret)sender).tank)); }; tank.turret.WeaponUnchargedError += (sender, e) => { ParallelAlgorithm.GetInstance().errors.Add(new WeaponUnchargedError(((Turret)sender).tank)); }; tank.turret.InsufficientlyWaterError += (sender, e) => { ParallelAlgorithm.GetInstance().errors.Add(new InsufficientlyWaterError(((Turret)sender).tank)); }; // При выстреле сохраняем след от выстрела tank.turret.TurretShoot += (sender, e) => { traces.Add(new WaterTrace(tank.turret.up, tank.turret.sprite.Position, tank.turret.waterPressure, tank.turret.NormalizedRotation)); }; tanks.Add(tank); } }
public void LoadAlgorithm(IOpenSave openSave) { instance = openSave.OpenAlgorithm(); Loaded?.Invoke(this, new LoadEventArgs()); }