/// <summary> /// Конструктор класса /// </summary> /// <param name="parSourcePos">Положение источника сегмента лазерного луча</param> /// <param name="parSoursVector">Вектор направления сегмента лазерного луча</param> public Laser(Point parSourcePos, Point parSoursVector) { _LaserSegments = new List<LaserSource>(); _LaserSegments.Add(new LaserSource(parSourcePos, parSoursVector)); _LaserSource = _LaserSegments[0]; _SegmentsCount = _LaserSegments.Count; }
/// <summary> /// Конструктор класса /// </summary> /// <param name="parLaserSource">сегмент лазерного луча</param> public Laser(LaserSource parLaserSource) { _LaserSegments = new List<LaserSource>(); _LaserSegments.Add(parLaserSource); _LaserSource = parLaserSource; _SegmentsCount = _LaserSegments.Count; }
/// <summary> /// Конструктор формы /// </summary> public MainForm() { InitializeComponent(); _Laser = new LaserSource(new Point((int)numericUpDownLaserPosX.Value,(int)numericUpDownLaserPosY.Value), new Point(5,5)); _Mirrors = new List<Point>(); _Holes = new List<Point>(); _Goals = new List<Point>(); _Game = new LasersGame(_FieldWidth, _FieldHeight); timer1.Start(); }
/// <summary> /// Конструктор класса /// </summary> /// <param name="parFieldWidth">Ширина поля</param> /// <param name="parFieldHeight">Выста поля</param> /// <param name="parLaser">Лазер</param> /// <param name="parGoal">Целевая точка</param> /// <param name="parMirrors">Зеркала</param> public LasersGame(int parFieldWidth, int parFieldHeight, LaserSource parLaser, List<Goal> parGoals, List<Square> parMirrors, List<Square> parHoles) { _FieldHeight = parFieldHeight; _FieldWidth = parFieldWidth; parLaser.Vector = new Point(parLaser.Vector.X * COORDINATE_RATIO / (2 * Math.Abs(parLaser.Vector.X)) , parLaser.Vector.Y * COORDINATE_RATIO / (2 * Math.Abs(parLaser.Vector.Y))); _Laser = new Laser(parLaser); _Goals = parGoals; _Mirrors = parMirrors; _Holes = parHoles; }
/// <summary> /// Нажатие кнопки "Загрузить пример" /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonOpen_Click(object sender, EventArgs e) { try { OpenFileDialog ofd = new OpenFileDialog(); ofd.ShowDialog(); using (FileStream fs = File.Open(ofd.FileName, FileMode.Open)) { _Game = null; BinaryFormatter formatter = new BinaryFormatter(); _Game = (LasersGame)formatter.Deserialize(fs); } _FieldHeight = _Game.FieldHeight; _FieldWidth = _Game.FieldWidth; numericUpDownHeightField.Value = _FieldHeight; numericUpDownWidhField.Value = _FieldWidth; _Laser = _Game.Laser.LaserSource; numericUpDownLaserPosX.Value = _Laser.Position.X; numericUpDownLaserPosY.Value = _Laser.Position.Y; if (_Laser.Vector == new Point(5, 5)) { radioButton45.Checked = true; } if (_Laser.Vector == new Point(-5, 5)) { radioButton135.Checked = true; } if (_Laser.Vector == new Point(-5, -5)) { radioButton225.Checked = true; } if (_Laser.Vector == new Point(5, -5)) { radioButton315.Checked = true; } _Mirrors = _Game.GetMirrors(); _Holes = _Game.GetHoles(); _Goals = _Game.GetGoals(); OutMirrorsList(); OutHolesList(); OutGoalsList(); _Action = Action.None; } catch { MessageBox.Show("Пример не был загружен"); } }
/// <summary> /// Нажатие кнопки "Отменить" /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonCancel_Click(object sender, EventArgs e) { _FieldHeight = _Game.FieldHeight; _FieldWidth = _Game.FieldWidth; numericUpDownHeightField.Value = _FieldHeight; numericUpDownWidhField.Value = _FieldWidth; _Laser = _Game.Laser.LaserSource; numericUpDownLaserPosX.Value = _Laser.Position.X; numericUpDownLaserPosY.Value = _Laser.Position.Y; if (_Laser.Vector == new Point(5, 5)) { radioButton45.Checked = true; } if (_Laser.Vector == new Point(-5, 5)) { radioButton135.Checked = true; } if (_Laser.Vector == new Point(-5, -5)) { radioButton225.Checked = true; } if (_Laser.Vector == new Point(5, -5)) { radioButton315.Checked = true; } OutMirrorsList(); OutHolesList(); OutGoalsList(); _Action = Action.None; }
/// <summary> /// Установить лазер /// </summary> /// <param name="parPos">Положение лазера</param> /// <param name="parVector">Вектор направления лазера</param> public void SetUpLaser(LaserSource parLaserSource) { if (PointInField(parLaserSource.Position)) { Point vector = parLaserSource.Vector; vector.X = parLaserSource.Vector.X * COORDINATE_RATIO / (2 * Math.Abs(parLaserSource.Vector.X)); vector.Y = parLaserSource.Vector.Y * COORDINATE_RATIO / (2 * Math.Abs(parLaserSource.Vector.Y)); parLaserSource.Vector = vector; _Laser = new Laser(parLaserSource); CalculateLaser(); } }
/// <summary> /// Добавить новый сегмент луча /// </summary> /// <param name="parLaserSource">Новый сегмент луча</param> public void AddSegment(LaserSource parLaserSource) { _LaserSegments.Add(parLaserSource); _LaserSource = _LaserSegments[0]; _SegmentsCount = _LaserSegments.Count; }
/// <summary> /// Удалить сегмент луча и все следующие за ним сегменты /// </summary> /// <param name="parIndex">Индекс удаляемого егмента луча</param> public void RemoveSegment(int parIndex) { _LaserSegments.RemoveRange(parIndex, _SegmentsCount - parIndex); _LaserSource = _LaserSegments[0]; _SegmentsCount = _LaserSegments.Count; }
/// <summary> /// Удалить сегмент луча и все следующие за ним сегменты /// </summary> /// <param name="parSourcePos">Положение источника лазерного луча</param> /// <param name="parSoursVector">Вектор направления лазерного луча</param> public void RemoveSegment(Point parSourcePos, Point parSoursVector) { _LaserSegments.RemoveRange(_LaserSegments.IndexOf(new LaserSource(parSourcePos, parSoursVector)), - _SegmentsCount - _LaserSegments.IndexOf(new LaserSource(parSourcePos, parSoursVector))); _LaserSource = _LaserSegments[0]; _SegmentsCount = _LaserSegments.Count; }
/// <summary> /// Удалить сегмент луча и все следующие за ним сегменты /// </summary> /// <param name="parLaserSource">Удаляемый сегмент cегмент луча</param> public void RemoveSegment(LaserSource parLaserSource) { _LaserSegments.RemoveRange(_LaserSegments.IndexOf(parLaserSource), _SegmentsCount - _LaserSegments.IndexOf(parLaserSource)); _LaserSource = _LaserSegments[0]; _SegmentsCount = _LaserSegments.Count; }
/// <summary> /// Добавить новый сегмент луча /// </summary> /// <param name="parSourcePos">Положение источника лазерного луча</param> /// <param name="parSoursVector">Вектор направления лазерного луча</param> public void AddSegment(Point parSourcePos, Point parSoursVector) { _LaserSegments.Add(new LaserSource(parSourcePos, parSoursVector)); _LaserSource = _LaserSegments[0]; _SegmentsCount = _LaserSegments.Count; }