public static int GetTrackId(int id) { string connectionString = Constants.connectionString; int trackId = 1; Classes.Track track = new Classes.Track(); string query = string.Format("SELECT * FROM SeasonTracks WHERE Id = {0}", id); using (SqlConnection conn = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand(query, conn)) { conn.Open(); SqlDataReader reader = command.ExecuteReader(); reader.Read(); trackId = int.Parse(reader[1].ToString()); conn.Close(); } } return(trackId); }
internal void DoTesting(Classes.TechnicalDirector td, Classes.Track track, Classes.StaffFacilities sf) { UpdateCarWearAfterTesting(td, sf); CCPoints = CCPoints * 0.95f + EngineeringPoints * (2.1f); EngineeringPoints = RDPoints * (73f + 0.03f * sf.Technicalskill + 0.02f * sf.Efficiency + 0.02f * sf.RDworkshop + 0.02f * sf.Engineeringworkshop + 0.05f * sf.Alloyandchemicallab); RDPoints = TestPoints * (80 + 0.7f + td.Experience * .01f + td.RDaerodynamics * 0.01f + td.RDelectronics * 0.01f + td.RDmechanics * 0.01f + sf.Technicalskill * 0.2f + 0.1f * sf.Efficiency + 0.2f * sf.Windtunnel); TestPoints = 0; }
public static void SaveTrackToDb(Classes.Track track) { string connectionString = Constants.connectionString; using (SqlConnection conn = new SqlConnection(connectionString)) using (SqlCommand command = conn.CreateCommand()) { command.CommandText = "INSERT INTO Tracks VALUES (@Name, @DistanceKm, @Laps, @P, @H, @A, " + "@FuelConsumption, @FuelConstant, @TyresWear, @PitStopTime, @Downforce, " + "@Overtake, @Suspension, @GripLevel, @WS, @TDCConst, " + "@ChassisWC, @EngineWC, @FWingWC, @RWingWC, @UnderbodyWC, @SidepodsWC, @CoolingWC, " + "@GearboxWC, @BrakesWC, @SuspensionWC, @ElectronicsWC, @BaseTime )"; command.Parameters.Clear(); command.Parameters.AddWithValue("@Name", track.Name); command.Parameters.AddWithValue("@DistanceKm", track.DistanceKm); command.Parameters.AddWithValue("@Laps", track.Laps); command.Parameters.AddWithValue("@P", track.Power); command.Parameters.AddWithValue("@H", track.Handling); command.Parameters.AddWithValue("@A", track.Acceleration); command.Parameters.AddWithValue("@FuelConsumption", (int)track.FuelConsumption); command.Parameters.AddWithValue("@FuelConstant", track.FuelConstant); command.Parameters.AddWithValue("@TyresWear", (int)track.TyresWear); command.Parameters.AddWithValue("@PitStopTime", track.PitStopTime); command.Parameters.AddWithValue("@Downforce", (int)track.Downforce); command.Parameters.AddWithValue("@Overtake", (int)track.Overtake); command.Parameters.AddWithValue("@Suspension", (int)track.Suspension); command.Parameters.AddWithValue("@GripLevel", (int)track.GripLevel); command.Parameters.AddWithValue("@WS", track.NormalWingSplit); command.Parameters.AddWithValue("@TDCConst", track.TDCConstant); command.Parameters.AddWithValue("@ChassisWC", track.ChassisWearConstant); command.Parameters.AddWithValue("@EngineWC", track.EngineWearConstant); command.Parameters.AddWithValue("@FWingWC", track.FWingWearConstant); command.Parameters.AddWithValue("@RWingWC", track.RWingWearConstant); command.Parameters.AddWithValue("@UnderbodyWC", track.UnderbodyWearConstant); command.Parameters.AddWithValue("@SidepodsWC", track.SidepodsWearConstant); command.Parameters.AddWithValue("@CoolingWC", track.CoolingWearConstant); command.Parameters.AddWithValue("@GearboxWC", track.GearboxWearConstant); command.Parameters.AddWithValue("@BrakesWC", track.BrakesWearConstant); command.Parameters.AddWithValue("@SuspensionWC", track.Suspension); command.Parameters.AddWithValue("@ElectronicsWC", track.ElectronicsWearConstant); command.Parameters.AddWithValue("@BaseTime", track.baseTime); conn.Open(); command.ExecuteNonQuery(); conn.Close(); } }
public static void UpdateTrackToDb(Classes.Track track) { string connectionString = Constants.connectionString; if (track.Id == 0) { MessageBox.Show("Invalid track selected for update. \nPlease first select a track from the grid to update"); return; } string query = "UPDATE Tracks "; query += string.Format( "SET Name = '{0}', DistanceKm = {1}, Laps = {2}, Power = {3}, Handling = {4}, Acceleration={5}, " + "FuelConsumption = {6}, FuelConstant = {7}, TyresWear = {8}, PitStopTime = {9}, " + "Downforce = {10}, Overtake = {11}, Suspension = {12}, GripLevel = {13}, NormalWingSplit = '{14}'," + "TDCConstant = {15}, ", track.Name, track.DistanceKm, track.Laps, track.Power, track.Handling, track.Acceleration, (int)track.FuelConsumption, track.FuelConstant, (int)track.TyresWear, track.PitStopTime, (int)track.Downforce, (int)track.Overtake, (int)track.Suspension, (int)track.GripLevel, track.NormalWingSplit, track.TDCConstant); query += string.Format( "ChassisWearConstant = {0}, EngineWearConstant = {1}, FWingWearConstant = {2}, " + "RWingWearConstant = {3}, UnderbodyWearConstant = {4}, " + "SidepodsWearConstant = {5}, CoolingWearConstant = {6}, GearboxWearConstant = {7}, " + "BrakesWearConstant = {8}, SuspensionWearConstant = {9}, ElectronicsWearConstant = {10}, ", track.ChassisWearConstant, track.EngineWearConstant, track.FWingWearConstant, track.RWingWearConstant, track.UnderbodyWearConstant, track.SidepodsWearConstant, track.CoolingWearConstant, track.GearboxWearConstant, track.BrakesWearConstant, track.SuspensionWearConstant, track.ElectronicsWearConstant); query += string.Format("BaseTime = {0} ", track.baseTime); query += string.Format( "WHERE Id = {0}", track.Id ); using (SqlConnection conn = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand(query, conn)) { conn.Open(); command.ExecuteNonQuery(); conn.Close(); } } }
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); }
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 }
public static Classes.Track ReadTrackFromDB(int trackId) { string connectionString = Constants.connectionString; Classes.Track track = new Classes.Track(); string query = string.Format("SELECT * FROM Tracks WHERE Id = {0}", trackId); using (SqlConnection conn = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand(query, conn)) { conn.Open(); SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { int id = int.Parse(reader[0].ToString()); string name = reader[1].ToString(); int distanceKm = int.Parse(reader[2].ToString()); int laps = int.Parse(reader[3].ToString()); int power = int.Parse(reader[4].ToString()); int handling = int.Parse(reader[5].ToString()); int acceleration = int.Parse(reader[6].ToString()); int fuelConsumption = int.Parse(reader[7].ToString()); float fuelConstant = 0; float.TryParse(reader[8].ToString(), out fuelConstant); int tyreWear = int.Parse(reader[9].ToString()); Single pitStopTime = Single.Parse(reader[10].ToString()); int downforce = int.Parse(reader[11].ToString()); int overtake = int.Parse(reader[12].ToString()); int suspension = int.Parse(reader[13].ToString()); int gripLevel = int.Parse(reader[14].ToString()); string WS = reader[15].ToString(); float tdcConstant = 0; float.TryParse(reader[16].ToString(), out tdcConstant); float chassisWearConstant = 0; float.TryParse(reader[17].ToString(), out chassisWearConstant); float engineWearConstant = 0; float.TryParse(reader[18].ToString(), out engineWearConstant); float fWingWearConstant = 0; float.TryParse(reader[19].ToString(), out fWingWearConstant); float rWingWearConstant = 0; float.TryParse(reader[20].ToString(), out rWingWearConstant); float underbodyWearConstant = 0; float.TryParse(reader[21].ToString(), out underbodyWearConstant); float sidepodsWearConstant = 0; float.TryParse(reader[22].ToString(), out sidepodsWearConstant); float coolingWearConstant = 0; float.TryParse(reader[23].ToString(), out coolingWearConstant); float gearboxWearConstant = 0; float.TryParse(reader[24].ToString(), out gearboxWearConstant); float brakesWearConstant = 0; float.TryParse(reader[25].ToString(), out brakesWearConstant); float suspensionWearConstant = 0; float.TryParse(reader[26].ToString(), out suspensionWearConstant); float electronicsWearConstant = 0; float.TryParse(reader[27].ToString(), out electronicsWearConstant); float baseTime = 0; float.TryParse(reader[28].ToString(), out baseTime); track = new Classes.Track( id, name, distanceKm, laps, power, handling, acceleration, (Levels.HighLow)fuelConsumption, fuelConstant, pitStopTime, (Levels.HighLow)tyreWear, (Levels.HighLow)downforce, (Levels.EasyHard)overtake, (Levels.HighLow)suspension, (Levels.HighLow)gripLevel, WS, tdcConstant); track.SetWearConstants(chassisWearConstant, engineWearConstant, fWingWearConstant, rWingWearConstant, underbodyWearConstant, sidepodsWearConstant, coolingWearConstant, gearboxWearConstant, brakesWearConstant, suspensionWearConstant, electronicsWearConstant); track.baseTime = baseTime; } conn.Close(); } } return(track); }