private void OnCook(ESide side, float value) { if (value > CurrentRecipe.MaxFry) { LoseEvent?.Invoke(); } }
private void OnLose() { if (LoseEvent != null) { LoseEvent.Invoke(); } }
/// <summary> /// Вызывается при получении с сервера сообщения о проигрыше (закончились очки здоровья) /// </summary> public void Lose(int result) { LoseEvent?.Invoke(this, new LoseEventArgs(result)); }
private void OnLose(Dice dice, string ret) { LoseEvent?.Invoke(this, ret); }
/// <summary> /// Ход пиратов /// </summary> /// <returns>Новое положение пиратов</returns> public Position PirateGo() { //Если : пираты уже на границе поля - поражение if (_PirateLocation[0] == 0 || _PirateLocation[0] == 21 || _PirateLocation[1] == 0 || _PirateLocation[1] == 15) { LoseEvent.Invoke(this, new EventArgs()); return(null); } //Рейтинг выбора движения для пиратов //[0] - северо-запад //[1] - северо-восток //[2] - юго-восток //[3] - юго-запад var rating = new int[] { 10000, 10000, 10000, 10000 }; //Определение разрешенных направлений for (var i = 0; i < 4; i++) { var address = GetNewPosition(_PirateLocation, (Direction)i); //Если : путь кораблю в соответствующем направлении закрыт - туда не ходим if (_Plane[address[0]][address[1]].Status == StatusPoint.Mine) { rating[i] = -10000; } } //Проверка зажат-ли кораблик минами if (rating[0] == -10000 && rating[1] == -10000 && rating[2] == -10000 && rating[3] == -10000) { WinEvent.Invoke(this, new EventArgs()); return(null); } #region Определение рейтинга ближайшего пути: //Каждая сторона света убавляет рейтинга по дальности до границы напрямую rating[0] -= _BalanceCurse * (_PirateLocation[1]); rating[1] -= _BalanceCurse * (_PirateLocation[1]); rating[1] -= _BalanceCurse * (21 - _PirateLocation[0]); rating[2] -= _BalanceCurse * (21 - _PirateLocation[0]); rating[2] -= _BalanceCurse * (15 - _PirateLocation[1]); rating[3] -= _BalanceCurse * (15 - _PirateLocation[1]); rating[3] -= _BalanceCurse * (_PirateLocation[0]); rating[0] -= _BalanceCurse * (_PirateLocation[0]); #endregion #region Определение рейтинга опасности: //Каждая мина на прямой и по сторонам от главного курса уменьшает рейтинг пути for (var i = 0; i < 4; i++) { var tick = 0; int[] address = _PirateLocation; int[] temp = null; //Ведем подсчет, пока не достигнем конца курса while (true) { //Получаем первое смещение по курсу address = GetNewPosition(address, (Direction)i); //Если : уперлись в границу карты - выход if (address == null) { break; } //Каждая мина изменяет рейтинг пути if (_Plane[address[0]][address[1]].Status == StatusPoint.Mine) { tick++; } //Учитываем мину при повороте курса против часовой стрелки temp = GetNewPosition(address, RollCourse(i - 1)); if (temp != null && _Plane[temp[0]][temp[1]].Status == StatusPoint.Mine) { tick++; } //Учитываем мину при повороте курса по часовой стрелке temp = GetNewPosition(address, RollCourse(i + 1)); if (temp != null && _Plane[temp[0]][temp[1]].Status == StatusPoint.Mine) { tick++; } } rating[i] -= _BalanceMines * tick; } #endregion #region Определение рейтинга вариативности: //Кол-во вариантов выбора пути после совершения хода for (var i = 0; i < 4; i++) { var tick = 0; var address = GetNewPosition(_PirateLocation, (Direction)i); int[] temp = null; for (var j = 0; j < 4; j++) { temp = GetNewPosition(address, (Direction)j); if (temp != null && _Plane[temp[0]][temp[1]].Status == StatusPoint.Mine) { tick++; } } rating[i] -= _BalanceVariables * tick; } #endregion var dic = new Dictionary <int, int>(4); for (var i = 0; i < 4; i++) { dic.Add(i, rating[i]); } //Смена локации корабля _Plane[_PirateLocation[0]][_PirateLocation[1]].Status = StatusPoint.Empty; _PirateLocation = GetNewPosition(_PirateLocation, (Direction)GetTopCurse(dic, GetTopCurse(dic, 0, 1), GetTopCurse(dic, 2, 3))); _Plane[_PirateLocation[0]][_PirateLocation[1]].Status = StatusPoint.Ship; return(_Plane[_PirateLocation[0]][_PirateLocation[1]]); }
/// <summary> /// Окончание игры /// </summary> public void Stop() { timer.Change(Timeout.Infinite, 0); LoseEvent?.Invoke(this, new LoseEventArgs(result)); }
private void OnCastleDestroy() { StopGame(); LoseEvent?.Invoke(); }