static internal int GetQualPosition(Classes.Driver driver, Classes.Car car, Classes.Divisions division) { int position = 1; float sd = Constants.sd; float qPerformance = 80 - 0.03f * driver.GetOA() - 0.18f * car.GetCarLevel(); float qOpPerformance = 80 - 0.03f * SpHelper.GetAvgOA(division) - 0.18f * SpHelper.GetAvgCarLevel(division); position = (int)(40 - 39 * Classes.Maths.NormalDistribution.GetCumulativeDistribution(qPerformance, qOpPerformance, sd)); position = AssurePositionWithinLimits(position); return(position); }
static Classes.Car GetCarAfterPartsChangeAndWear(Classes.Car car, bool testing, Classes.Track track, Classes.Driver driver, Classes.TechnicalDirector td, Classes.StaffFacilities sf, int ct, int[] carPartsBought) { Classes.Car carAfterWear = (Classes.Car)car.Clone(); //all properties are value type carAfterWear.UpdateCarWearAndLevelAfterCarUpdate(carPartsBought); carAfterWear.UpdateCarWearAfterRace(track, driver, ct); if (testing) { carAfterWear.DoTesting(td, track, sf); } return(carAfterWear); }
public static void UpdateDriverToDb(Classes.Driver driver) { string connectionString = Constants.connectionString; using (SqlConnection conn = new SqlConnection(connectionString)) { using (SqlCommand command = conn.CreateCommand()) { command.CommandText = "UPDATE Drivers " + "SET Concentration = @Concentration, Talent = @Talent, Aggressiveness = @Aggressiveness, " + "Experience = @Experience, TechnicalInsight = @TI, " + "Stamina = @Stamina, Charisma = @Charisma, Motivation = @Motivation, " + "Weight = @Weight, Age = @Age, Salary = @Salary, RacesLeft = @RacesLeft, Energy = @Energy " + "WHERE Id = @Id"; command.Parameters.Clear(); command.Parameters.AddWithValue("@Concentration", driver.Concentration); command.Parameters.AddWithValue("@Talent", driver.Talent); command.Parameters.AddWithValue("@Aggressiveness", driver.Aggressiveness); command.Parameters.AddWithValue("@Experience", driver.Experience); command.Parameters.AddWithValue("@TI", driver.TechnicalInsight); command.Parameters.AddWithValue("@Stamina", driver.Stamina); command.Parameters.AddWithValue("@Charisma", driver.Charisma); command.Parameters.AddWithValue("@Motivation", driver.Motivation); command.Parameters.AddWithValue("@Weight", driver.Weight); command.Parameters.AddWithValue("@Age", driver.Age); command.Parameters.AddWithValue("@Salary", driver.Salary); command.Parameters.AddWithValue("@RacesLeft", driver.RacesLeft); command.Parameters.AddWithValue("@Energy", driver.Energy); command.Parameters.AddWithValue("@Id", driver.Id); conn.Open(); command.ExecuteNonQuery(); conn.Close(); } } }
public static Classes.Driver ReadDriverFromDB() { string connectionString = Constants.connectionString; Classes.Driver driver = new Classes.Driver(); string query = "SELECT * FROM Drivers WHERE Id=1"; using (SqlConnection conn = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand(query, conn)) { conn.Open(); SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { driver.Id = int.Parse(reader[0].ToString()); driver.Concentration = int.Parse(reader[1].ToString()); driver.Talent = int.Parse(reader[2].ToString()); driver.Aggressiveness = int.Parse(reader[3].ToString()); driver.Experience = int.Parse(reader[4].ToString()); driver.TechnicalInsight = int.Parse(reader[5].ToString()); driver.Stamina = int.Parse(reader[6].ToString()); driver.Charisma = int.Parse(reader[7].ToString()); driver.Motivation = int.Parse(reader[8].ToString()); driver.Weight = int.Parse(reader[9].ToString()); driver.Age = int.Parse(reader[10].ToString()); driver.Salary = int.Parse(reader[11].ToString()); driver.RacesLeft = int.Parse(reader[12].ToString()); driver.Energy = int.Parse(reader[13].ToString()); } conn.Close(); } } return(driver); }
public static void SaveDriverToDb(Classes.Driver driver) { string connectionString = Constants.connectionString; using (SqlConnection conn = new SqlConnection(connectionString)) { using (SqlCommand command = conn.CreateCommand()) { command.CommandText = "INSERT INTO Drivers " + "VALUES (@Concentration, @Talent, @Aggressiveness, @Experience, @TI, " + "@Stamina, @Charisma, @Motivation, @Weight, @Age, @Salary, @RacesLeft, @Energy)"; command.Parameters.Clear(); command.Parameters.AddWithValue("@Concentration", driver.Concentration); command.Parameters.AddWithValue("@Talent", driver.Talent); command.Parameters.AddWithValue("@Aggressiveness", driver.Aggressiveness); command.Parameters.AddWithValue("@Experience", driver.Experience); command.Parameters.AddWithValue("@TI", driver.TechnicalInsight); command.Parameters.AddWithValue("@Stamina", driver.Stamina); command.Parameters.AddWithValue("@Charisma", driver.Charisma); command.Parameters.AddWithValue("@Motivation", driver.Motivation); command.Parameters.AddWithValue("@Weight", driver.Weight); command.Parameters.AddWithValue("@Age", driver.Age); command.Parameters.AddWithValue("@Salary", driver.Salary); command.Parameters.AddWithValue("@RacesLeft", driver.RacesLeft); command.Parameters.AddWithValue("@Energy", driver.Energy); conn.Open(); command.ExecuteNonQuery(); conn.Close(); } } }
static internal SeasonPlannerFullLine ProcessSeasonPlanner(SeasonPlannerFullLine spFull) { #region Initial Values Classes.RaceTab rt = spFull.spOptimizer.raceTab; Classes.SeasonPlannerForDataTable spForDataTable = spFull.spTable; //null. Filled later Classes.TechnicalDirector td = spFull.spOptimizer.technicalDirector; Classes.Car car = (Classes.Car)spFull.spOptimizer.car.Clone(); Classes.Car carAfterRace = (Classes.Car)car.Clone(); Classes.Driver driver = spFull.spOptimizer.driver; int trackId = DB.SeasonTrack.GetTrackId(spFull.spTable.SeasonRaceNumber); Classes.Track track = DB.Track.ReadTrackFromDB(trackId); Classes.StaffFacilities sf = spFull.spOptimizer.staffFacilities; Classes.TyresSupplier tyre = DB.Tyres.ReadActiveTyreSupplierFromDB(); int seasonRaceNumber = rt.SeasonTrackIndex; //float balanceM = spFull.spTab.StartingBalanceM; float balanceM = spFull.spTable.BalanceAfterRaceM; int[] carPartsBought = new int[11]; Divisions division = (Divisions)spFull.spTab.Division; int trainning = (int)spFull.spDecisions.Training; bool testing = spFull.spDecisions.Testing; int targetCarLevel = spFull.spDecisions.TargetCarLevelEngBra; int targetCarLevel2 = spFull.spDecisions.TargetCarLevelOthers; int ct = spFull.spDecisions.CT; #endregion #region Process carAfterRace.UpdateCarWearAfterRace(track, driver, ct); if (testing) { carAfterRace.DoTesting(td, track, sf); } carPartsBought = GetWhichCarPartsChange(car, carAfterRace, targetCarLevel, targetCarLevel2); carAfterRace = (Classes.Car)car.Clone(); carAfterRace = GetCarAfterPartsChangeAndWear(car, testing, track, driver, td, sf, ct, carPartsBought); int qualPosition = SpHelper.GetQualPosition(driver, car, division); int racePosition = SpHelper.GetRacePosition(driver, car, division, ct); int racePoints = SpHelper.GetPoints(racePosition); //Expenses processing float balanceAfterRaceM = ((balanceM * 1000000) + GetAfterRaceBalance(driver, td, sf, testing, tyre, car, division, qualPosition, racePosition, trainning, carPartsBought)) / 1000000f; #endregion #region Output SeasonPlannerDecision spDecisionsNext = new SeasonPlannerDecision(); spDecisionsNext = (Classes.SeasonPlannerDecision)spFull.spDecisions.Clone(); SeasonPlannerForDataTable spTableNext = new SeasonPlannerForDataTable(); spTableNext.SeasonRaceNumber = spFull.spTable.SeasonRaceNumber + 1; spTableNext.BalanceAfterRaceM = balanceAfterRaceM; spTableNext.CarPartsChanged = carPartsBought; spTableNext.CarWearAfterRace = carAfterRace.GetWears(); spTableNext.QualPosition = qualPosition; spTableNext.RacePosition = racePosition; SeasonPlannerForOptimizer spOptimizerNext = new SeasonPlannerForOptimizer(); spOptimizerNext.car = (Classes.Car)carAfterRace.Clone(); driver.DoTrainning((DriverTrainning)trainning); driver.DriverUpdateAfterRace(racePosition); spOptimizerNext.driver = driver; spOptimizerNext.Id = spFull.spOptimizer.Id + 1; spOptimizerNext.raceTab = rt; //How to update trackId? spOptimizerNext.staffFacilities = sf; //To Do: Update sf after races (convert levels to float type) spOptimizerNext.technicalDirector = td; SeasonPlannerTab spTabNext = new SeasonPlannerTab(); spTabNext.CurrentPoints = spFull.spTab.CurrentPoints + racePoints; spTabNext.Division = spFull.spTab.Division; spTabNext.StartingBalanceM = balanceAfterRaceM; spTabNext.TargetPoints = spFull.spTab.TargetPoints; SeasonPlannerFullLine spFullNext = new SeasonPlannerFullLine(spDecisionsNext, spTableNext, spOptimizerNext, spTabNext); return(spFullNext); #endregion }