예제 #1
0
        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);
        }
예제 #2
0
        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;
        }
예제 #3
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();
                }
        }
예제 #4
0
        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();
                }
            }
        }
예제 #5
0
        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);
        }
예제 #6
0
        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
        }
예제 #7
0
        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);
        }