/// <summary> /// Стандартный конструктор /// Standart constructor /// </summary> /// <param name="name">Имя змейки/Snake's name</param> /// <param name="cordinates">Кординаты тела змейки/Snake's body coordinates</param> /// <param name="isAlive">Жива ли змейка/Is snake alive</param> public Snake(string name, List <SnakeAttribute.Cordinates> cordinates, SnakeBase snake, SnakeStatistics snakeStatistics) { Name = name; Cordinates = cordinates; SnakeB = snake; SnakeStatistics = snake.Statistics; FoundFoodAfterStep = false; }
public Snake(SnakeBase snake) { Name = snake.SnakeName; Cordinates = snake.SnakeBody; SnakeB = snake; SnakeStatistics = snake.Statistics; FoundFoodAfterStep = false; }
public void UpdateStatistics(SnakeBase snake) { if (!IsExistInTable(snake.SnakeName)) { AddNewSnake(snake); } var curSt = GetStatisticsBySnake(snake.SnakeName); var newStatistics = new SnakeStatisticsForTable(); newStatistics.Name = curSt.Name; newStatistics.Genes = (snake is SmartSnakeBase) ? (snake as SmartSnakeBase).GenesString : "null"; newStatistics.StepsCount = curSt.StepsCount + snake.Statistics.Steps; newStatistics.DeathCount = curSt.DeathCount + (snake.IsAlive? 0 : 1); newStatistics.EatenFood = curSt.EatenFood + snake.Statistics.EatenFood; newStatistics.StepsPerFood = (int)Math.Round( (double)(newStatistics.StepsCount / ((newStatistics.EatenFood != 0)? newStatistics.EatenFood : 1))); newStatistics.MaxSize = (curSt.MaxSize > snake.Statistics.MaxSize)? curSt.MaxSize : snake.Statistics.MaxSize; newStatistics.PlayedGames = curSt.PlayedGames + 1; newStatistics.Mark = (int)(Math.Round((decimal)(newStatistics.StepsPerFood / 10))); string sqlQuery = String.Format("UPDATE Snakes SET " + "name = '{0}'," + "genes = '{1}'," + "stepsCount = {2}," + "deathCount = {3}," + "stepsPerFood = {4}," + "maxSize = {5}," + "eatenFood = {6}," + "playedGames = {7}," + "mark = {8} " + "WHERE name = '{0}'", newStatistics.Name, newStatistics.Genes, newStatistics.StepsCount, newStatistics.DeathCount, newStatistics.StepsPerFood, newStatistics.MaxSize, newStatistics.EatenFood, newStatistics.PlayedGames, newStatistics.Mark); dbconn.Open(); dbcmd = dbconn.CreateCommand(); dbcmd.CommandText = sqlQuery; dbcmd.ExecuteReader(); dbcmd.Dispose(); dbconn.Close(); }
public void AddNewSnake(SnakeBase snake) { string genes = (snake as SmartSnakeBase == null) ? "'null'" : "'" + (snake as SmartSnakeBase).GenesString + "'"; string sqlQuery = String.Format( "INSERT INTO Snakes" + "(name, genes, stepsCount, deathCount, stepsPerFood, maxSize, eatenFood, playedGames, mark)" + "VALUES" + "('{0}', {1}, 0, 0, 0, 0, 0, 0, 0);", snake.SnakeName, genes); dbconn.Open(); dbcmd = dbconn.CreateCommand(); dbcmd.CommandText = sqlQuery; dbcmd.ExecuteReader(); dbcmd.Dispose(); dbconn.Close(); }
/// <summary> /// Реакция змейки на объекты на новой кординате /// Snake's reaction to the objects with new coordinates /// </summary> /// <param name="cordinate">Новая кордината/New cooirdinate</param> /// <param name="snake">Змейка/Snake</param> /// <param name="map">Карта с объектами/Map with objects</param> private void ReactionToMapsObjectsOnNewPosition(SnakeAttribute.Cordinates cordinate, SnakeBase snake, PlayingMap map) { if (CollisionWithBarriers(cordinate, map) || CollisionWithSnakesBody(cordinate, map) || CollisionWithSnakesHead(cordinate, map) || CollisionWithDeadSnakes(cordinate, map)) { snake.IsAlive = false; return; } if (CollisionWithFood(cordinate, map)) { snake.Statistics.EatenFood++; map.Food.FoodCordinates.RemoveAll(c => cordinate == c); snake.SnakeBody.Insert(0, cordinate); return; } // Если нет колизии с объектами на карте, передвигаем змейку //If there is no collision on map, move snake for (int i = snake.SnakeBody.Count - 1; i > 0; i--) { snake.SnakeBody[i] = snake.SnakeBody[i - 1]; } snake.SnakeBody[0] = cordinate; }