示例#1
0
        static void Main()
        {
            var graham = new Racer(7, "Graham", "Hill", "UK", 14);
            var emerson = new Racer(13, "Emerson", "Fittipaldi", "Brazil", 14);
            var mario = new Racer(16, "Mario", "Andretti", "USA", 12);

            var racers = new List<Racer>(20) { graham, emerson, mario };

            racers.Add(new Racer(24, "Michael", "Schumacher", "Germany", 91));
            racers.Add(new Racer(27, "Mika", "Hakkinen", "Finland", 20));

            racers.AddRange(new Racer[] {
               new Racer(14, "Niki", "Lauda", "Austria", 25),
               new Racer(21, "Alain", "Prost", "France", 51)});

            var racers2 = new List<Racer>(new Racer[] {
               new Racer(12, "Jochen", "Rindt", "Austria", 6),
               new Racer(22, "Ayrton", "Senna", "Brazil", 41) });
            racers.AddRange(racers2);
            racers.RemoveRange(0, 2);
            Console.WriteLine( racers.FindIndex(r => r.FirstName == "Mario"));
            foreach (var test in racers)
            {
                Console.WriteLine(test.ToString());
            }
            Console.ReadKey();
        }
示例#2
0
 public void RaiseRacerParsed(Racer r)
 {
     if (null != RacerParsed)
     {
         RacerParsed(this, new RacerParsedEventArgs(r));
     }
 }
示例#3
0
        static void Main()
        {
            var graham = new Racer(7, "Graham", "Hill", "UK", 14);
            var emerson = new Racer(13, "Emerson", "Fittipaldi", "Brazil", 14);
            var mario = new Racer(16, "Mario", "Andretti", "USA", 12);

            var racers = new List<Racer>(20) { graham, emerson, mario };

            racers.Add(new Racer(24, "Michael", "Schumacher", "Germany", 91));
            racers.Add(new Racer(27, "Mika", "Hakkinen", "Finland", 20));
            racers.Add(new Racer(17, "Jack", "ss", "Austria", 22));

            racers.AddRange(new Racer[] {
               new Racer(14, "Niki", "Lauda", "Austria", 25),
               new Racer(21, "Alain", "Prost", "France", 51)});

            var racers2 = new List<Racer>(new Racer[] {
               new Racer(12, "Jochen", "Rindt", "Austria", 6),
               new Racer(14, "Jack", "dd", "Austria", 63),
               new Racer(22, "Ayrton", "Senna", "Brazil", 41) });

            //这个比较实用
            racers.ForEach(r=>Console.WriteLine("{0:A}",r));
            racers.ForEach(r => Console.WriteLine("{0}", r.FirstName));
            racers.ForEach(ActionHandler);
            //排序
            Console.WriteLine("-----------Order---------");
            racers.Sort(new RacerComparer(CompareType.Country));
            racers.ForEach(ActionHandler);
            Console.WriteLine("-----------OverLoad Order---------");
            racers.Sort((r1, r2) => r2.Wins.CompareTo(r1.Wins));
            racers.ForEach(r=>Console.WriteLine("{0}",r.Wins));
            Console.ReadKey();

        }
        static void Main()
        {
            var graham = new Racer(7, "Graham", "Hill", "UK", 14);
            var emerson = new Racer(13, "Emerson", "Fittipaldi", "Brazil", 14);
            var mario = new Racer(16, "Mario", "Andretti", "USA", 12);

            var racers = new List<Racer>(20) { graham, emerson, mario };

            racers.Add(new Racer(24, "Michael", "Schumacher", "Germany", 91));
            racers.Add(new Racer(27, "Mika", "Hakkinen", "Finland", 20));

            racers.AddRange(new Racer[] {
               new Racer(14, "Niki", "Lauda", "Austria", 25),
               new Racer(21, "Alain", "Prost", "France", 51)});

            // insert elements

            racers.Insert(3, new Racer(6, "Phil", "Hill", "USA", 3));

            // accessing elements

            for (int i = 0; i < racers.Count; i++)
            {
                WriteLine(racers[i]);
            }

            foreach (var r in racers)
            {
                WriteLine(r);
            }

            // searching
            int index1 = racers.IndexOf(mario);
            int index2 = racers.FindIndex(new FindCountry("Finland").FindCountryPredicate);
            int index3 = racers.FindIndex(r => r.Country == "Finland");
            Racer racer = racers.Find(r => r.FirstName == "Niki");
            List<Racer> bigWinners = racers.FindAll(r => r.Wins > 20);
            foreach (Racer r in bigWinners)
            {
                WriteLine($"{r:A}");
            }

            WriteLine();


            // remove elements

            if (!racers.Remove(graham))
            {
                WriteLine("object not found in collection");
            }



            var racers2 = new List<Racer>(new Racer[] {
               new Racer(12, "Jochen", "Rindt", "Austria", 6),
               new Racer(22, "Ayrton", "Senna", "Brazil", 41) });
        }
示例#5
0
 public ExportRacer(Racer racer)
 {
     Bib = racer.Bib;
     Name = racer.Name;
     Category = racer.Category;
     TeamName = racer.TeamName;
     Time = racer.Time;
     Gender = racer.Gender;
 }
示例#6
0
 public CameraWrapper(Racer racer)
 {
     stage = CameraStage.ShipSelect;
     this.racer = racer;
     properties = new SharedCameraProperties(Viewports.fullViewport);
     revolveCamera = new RevolveCamera(ref properties);
     currentCamera = revolveCamera;
     #if WINDOWS
     mouseCamera = new MouseCamera(ref properties, getShipPosition, getShipOrientation);
     #endif
 }
示例#7
0
        //List
        public static void AddRacers()
        {
            Racer graham = new Racer(7, "Graham", "Hill", "UK", 14);
            Racer emerson = new Racer(13, "Emerson", "Fittipaldi", "Brazil", 14);
            Racer mario = new Racer(16, "Mario", "Andretti", "USA", 12);

            racers.Add(new Racer(24, "Michael", "Schumacher", "Germany", 91));
            racers.Add(new Racer(27, "Mika", "Hakkinen", "Finland", 20));

            racers.AddRange(new Racer[]{
                new Racer(14,"Niki","Lauda","Austria",25),
                new Racer(27,"Alain","Porst","France",51)});
            racers.Insert(2, new Racer(10, "lilei", "hanmeimei", "China", 2));
        }
示例#8
0
        //Should also take 'useKeyboard' Boolean
        public RacingControls(Racer myRacer, IInputManager inputManager)
        {
            //playerIndex = index;//Player index should be able to be 'any' or 'keyboard' too
            padIndex = PlayerIndex.One;

            setChosenInput(inputManager);

            racer = myRacer;
            tapNo = 0;
            lastTaps = new decimal[4];
            tapWeights = new decimal[4] {1,.3m,.1m,.05m};
            racer.beatQueue.isLevellingDown = false;
            racer.beatQueue.isLevellingUp = false;
            sequenceNumber = 0;
            vibrateNumber = 0;
            //vibrateSequence = true;
        }
        private String ToLatexSnippet(Racer r, bool isFirst)
        {
            StringBuilder snippet = new StringBuilder(" & ");
            if (!isFirst)
            {
                snippet.Append(" & ");
            }

            snippet.Append(r.Name);
            snippet.Append(" & ");
            snippet.Append(r.Bib);
            snippet.Append(" & ");
            snippet.Append(r.Time + "\\,s & "); // add small space between time and unit
            if (!isFirst)
            {
                snippet.Append("\\\\ \n");
            }
            return snippet.ToString();
        }
示例#10
0
        public void addRacer(Racer racer)
        {
            if (!hasTeam(racer.TeamName))
            {
                if (IsMixed)
                {
                    Teams.Add(new MixedTeam(racer.TeamName)); 
                }

                else
                {
                    Teams.Add(new Team(racer.TeamName));
                }
            }

            Team team = getTeamByName(racer.TeamName);
            team.addRacer(racer);
            team.TrophyTime += racer.Time;
        }
    public Checkpoint LastCheckpoint(Racer r)
    {
        int index = -1;

        for (int i = 0; i < allCheckpoints.Count; i++)
        {
            if (allCheckpoints[i].BeenHere(r))
            {
                index++;
            }
            else
            {
                break;
            }
        }
        if (index == -1)
        {
            index = allCheckpoints.Count - 1;
        }
        return(allCheckpoints[index]);
    }
示例#12
0
        //Load the Racers
        public Racer[] LoadRacers(PictureBox pbSonic, PictureBox pbMinato, PictureBox pbMonkey, PictureBox pbCt)
        {
            racer[0] = new Racer {
                Length = 0, Img = pbSonic, Name = "Sonic"
            };
            racer[0].Img.Image = Properties.Resources.sonicStand;
            racer[1]           = new Racer {
                Length = 0, Img = pbMinato, Name = "Minato"
            };
            racer[1].Img.Image = Properties.Resources.minato;
            racer[2]           = new Racer {
                Length = 0, Img = pbMonkey, Name = "Monkey"
            };
            racer[2].Img.Image = Properties.Resources.monkey;
            racer[3]           = new Racer {
                Length = 0, Img = pbCt, Name = "Counter-Terrorist"
            };
            racer[3].Img.Image = Properties.Resources.ctGun;

            return(racer);
        }
示例#13
0
        static void Main()
        {
            var graham = new Racer(7, "Graham", "Hill", "UK", 14);
            var emerson = new Racer(13, "Emerson", "Fittipaldi", "Brazil", 14);
            var mario = new Racer(16, "Mario", "Andretti", "USA", 12);

            var racers = new List<Racer>(20) { graham, emerson, mario };

            racers.Add(new Racer(24, "Michael", "Schumacher", "Germany", 91));
            racers.Add(new Racer(27, "Mika", "Hakkinen", "Finland", 20));

            racers.AddRange(new Racer[] {
               new Racer(14, "Niki", "Lauda", "Austria", 25),
               new Racer(21, "Alain", "Prost", "France", 51)});

            var racers2 = new List<Racer>(new Racer[] {
               new Racer(12, "Jochen", "Rindt", "Austria", 6),
               new Racer(22, "Ayrton", "Senna", "Brazil", 41) });

            racers.Sort((r1, r2) => r2.Wins.CompareTo(r1.Wins));
        }
示例#14
0
        /// <summary>
        /// Versenyző adatainak módosítása
        /// </summary>
        /// <param name="teamName">A csapat neve</param>
        /// <param name="oldRacerName">A versenyző régi neve</param>
        /// <param name="racerName">A versenyző új neve</param>
        /// <param name="racerAge">A versenyző új neve</param>
        /// <param name="racerSalary">A versenyző költsége</param>
        public void updateRacerInTeam(string teamName, string oldRacerName, string racerName, string racerAge, string racerSalary)
        {
            int racerAgeNumber = 0;

            if (!int.TryParse(racerAge, out racerAgeNumber))
            {
                throw new ControllerException("A megadott életkor nem megfelelő alakú szám!");
            }
            int racerSalaryNumber = 0;

            if (!int.TryParse(racerSalary, out racerSalaryNumber))
            {
                throw new ControllerException("A megadott fizetés nem megfelelő alakú szám!");
            }
            if (teamService.existRacer(racerName, racerAgeNumber))
            {
                throw new ControllerException("Már létezik " + racerName + " nevű versenyző, aki " + racerAge + " éves.");
            }
            try
            {
                int racerId = teamService.getRacerId(teamName, oldRacerName);
                if (racerId > 0)
                {
                    Racer newRacer = new Racer(racerId, racerName, racerAgeNumber, racerSalaryNumber);
                    teamService.updateReacerInTeam(teamName, oldRacerName, newRacer);
                }
                else
                {
                    throw new ControllerException("A megadott versenyőjnek nem találom az azonosítáját");
                }
            }
            catch (TeamServiceExeption tse)
            {
                throw new ControllerException(tse.Message);
            }
            catch (RacerException re)
            {
                throw new ControllerException(re.Message);
            }
        }
        public async Task showRacerAsync(int i = -1)
        {
            Racer r;

            if (i < 0)
            {
                r = Racer.get_racer(Context.Message.Author.Id, Context.Guild.Id);
            }
            else
            {
                r = Racer.get_racer(i);
            }

            if (r == null)
            {
                await ReplyAsync(Context.User.Mention + ", you don't have a current pilot or this pilot doesn't exist in the database.");

                return;
            }

            await Context.Channel.SendMessageAsync("", false, r.embed(i, Context), null);
        }
        public async Task UpdateAbilityAsync(int ID, int v = -1)
        {
            var r = Racer.get_racer(Context.Message.Author.Id, Context.Guild.Id);

            if (r == null)
            {
                await ReplyAsync("No pilot found for you. Use `zg!createpilot` to make one");

                return;
            }

            if (r.inGame)
            {
                await ReplyAsync("You can't modify your pilot while racing!");

                return;
            }


            Racer.replace_racer(r);

            await ReplyAsync(Context.User.Mention + ", Ability changed to ");
        }
示例#17
0
 private void LoadRacers()
 {
     racers[0] = new Racer {
         length = 0, myPB = pbRacer1, name = "CSharp"
     };
     racers[0].myPB.BackgroundImage = Resources.csharpLogoResize;
     racers[1] = new Racer {
         length = 0, myPB = pbRacer2, name = "Java"
     };
     racers[1].myPB.BackgroundImage = Resources.javaLogoResize;
     racers[2] = new Racer {
         length = 0, myPB = pbRacer3, name = "Php"
     };
     racers[2].myPB.BackgroundImage = Resources.phpLogoResize;
     racers[3] = new Racer {
         length = 0, myPB = pbRacer4, name = "Python"
     };
     racers[3].myPB.BackgroundImage = Resources.pythonLogoResize;
     for (int i = 0; i < racers.Length; i++)
     {
         cbxRacers.Items.Add(racers[i].name);
     }
 }
示例#18
0
        private async void stopBtm_Clicked(object sender, EventArgs e)
        {
            if (_selectedRacer == null || _selectedRacer.status == Status.StandyBy.ToString() ||
                _selectedRacer.status == Status.Finished.ToString())
            {
                return;
            }

            if (placement >= _raceGroups[prevHeat].Count)
            {
                placement = 0;
            }

            _selectedRacer.status = Status.Finished.ToString();
            _selectedRacer.setPlacement(_round, placement);
            _selectedRacer.setRoundFinish(_round, true);
            await _connection.UpdateAsync(_selectedRacer);

            _raceGroups           = getRaceGroups();
            ViewHeats.ItemsSource = _raceGroups;
            placement++;
            _selectedRacer = null;
        }
示例#19
0
文件: GameForm.cs 项目: DS061/DSED-05
 /// <summary>
 /// Loads Racers.
 /// </summary>
 private void LoadRacers()
 {
     racers[0] = new Racer {
         Length = 0, PB = pbRacer1, Name = "BMW"
     };
     racers[0].PB.BackgroundImage = Resources.bmw_logo;
     racers[1] = new Racer {
         Length = 0, PB = pbRacer2, Name = "Mercedes"
     };
     racers[1].PB.BackgroundImage = Resources.mercedes_logo;
     racers[2] = new Racer {
         Length = 0, PB = pbRacer3, Name = "Audi"
     };
     racers[2].PB.BackgroundImage = Resources.audi_logo;
     racers[3] = new Racer {
         Length = 0, PB = pbRacer4, Name = "Porsche"
     };
     racers[3].PB.BackgroundImage = Resources.porsche_logo;
     for (int i = 0; i < racers.Length; i++)
     {
         cbxRacers.Items.Add(racers[i].Name);
     }
 }
        public async Task updateRacerAsync(params string[] inputs)
        {
            var r = Racer.get_racer(Context.Message.Author.Id, Context.Guild.Id);

            if (r == null)
            {
                await ReplyAsync("You don't have a pilot! Please use `zg!createpilot` instead");

                return;
            }
            var string_to_value = helpers.parseInputs(inputs);

            if (!r.update(string_to_value, out string error))
            {
                await ReplyAsync(Context.User.Mention + ". Racer creation failed with error message: " + error);

                return;
            }

            Racer.update_racer(r);

            await ReplyAsync(Context.User.Mention + ", you've updated your pilot. Use `zg!pilot` to see your changes.");
        }
示例#21
0
        private void listBoxRacer_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (listBoxRacer.SelectedIndex < 0)
            {
                return;
            }
            string teamName  = listBoxTeam.SelectedItem.ToString();
            string racerName = listBoxRacer.SelectedItem.ToString();

            try
            {
                Racer selectedRacer = controller.searchRacerByName(teamName, racerName);
                if (selectedRacer != null)
                {
                    textBoxRacerName.Text   = selectedRacer.getName();
                    textBoxRacerAge.Text    = selectedRacer.getAge().ToString();
                    textBoxRacerSalary.Text = selectedRacer.getSalary().ToString();
                }
            }
            catch (ControllerException ce)
            {
            }
        }
示例#22
0
        public ViewModel()
        {
            currentRace           = new Race();
            currentRace.RaceTitle = "TestRace";
            DateTime todayPlusOne = DateTime.Today.AddDays(1);

            currentRace.StartDate_Time  = todayPlusOne;
            currentRace.RaceDescription = "This is crazy.";


            Racer tempRacer = new Racer();

            tempRacer.FirstName = "Alex";
            tempRacer.LastName  = "Thayn";
            tempRacer.Gender    = Racer.GenderType.Male;
            tempRacer.Age       = 25;

            currentRace.racers.Add(tempRacer);

            AddRacerCommand = new RelayCommand(AddRacer);

            currentRacer = new Racer();
        }
    private void SetOrder(List <Racer> finished)
    {
        List <Racer> left     = new List <Racer>(racers);
        List <Racer> newOrder = new List <Racer>(finished);

        while (left.Count != 0)
        {
            Racer highest = left[0];
            for (int i = 0; i < left.Count; i++)
            {
                if (left[i].GetScore() > highest.GetScore())
                {
                    highest = left[i];
                }
            }
            newOrder.Add(highest);
            left.Remove(highest);
        }
        if (newOrder.Count == racers.Count)
        {
            racers = newOrder;
        }
    }
    public bool CheckLastCheckpoint(Racer mR, Checkpoint cP)
    {
        int index = allCheckpoints.IndexOf(cP);

        if (index - 1 >= 0)
        {
            index--;
            if (allCheckpoints[index].finish || allCheckpoints[index].BeenHere(mR))
            {
                return(true);
            }
        }
        else
        {
            index = allCheckpoints.Count - 1;
            if (allCheckpoints[index].finish || allCheckpoints[index].BeenHere(mR))
            {
                return(true);
            }
        }

        return(false);
    }
示例#25
0
 private void OnTriggerStay(Collider other)
 {
     if (other.gameObject.tag == "Car" && !cooldown)
     {
         Racer r = other.GetComponentInChildren <Racer>();
         if (r.myItem == null)
         {
             if (test == null)
             {
                 r.NewItem(Item_Manager.instance.GetItem());
                 box.enabled = false;
                 cooldown    = true;
                 StartCoroutine(Cooldown());
             }
             else
             {
                 r.NewItem(test);
                 box.enabled = false;
                 cooldown    = true;
                 StartCoroutine(Cooldown());
             }
         }
     }
 }
示例#26
0
        public IHttpActionResult Patch([FromODataUri] int key, Delta <Racer> patch)
        {
            Validate(patch.GetEntity());

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            Racer racer = db.RacerSet.Find(key);

            if (racer == null)
            {
                return(NotFound());
            }

            patch.Patch(racer);

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!RacerExists(key))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(Updated(racer));
        }
示例#27
0
文件: Program.cs 项目: Qawdaya/Qaw
        static void Main(string[] args)
        {
            var graham  = new Racer(7, "Graham", "Hill", "UK", 14);
            var emerson = new Racer(13, "Emerson", "Fittipaldi", "Brazil", 14);
            var mario   = new Racer(16, "Mario", "Andretti", "USA", 12);

            var racers = new List <Racer>(20)
            {
                graham, emerson, mario
            };

            racers.Add(new Racer(24, "Michael", "Schumacher", "Germany", 91));
            racers.Add(new Racer(27, "Mika", "Hakkinen", "Finland", 20));

            racers.AddRange(new Racer[] {
                new Racer(14, "Niki", "Lauda", "Austria", 25),
                new Racer(21, "Alain", "Prost", "France", 51)
            });

            var racers2 = new List <Racer>(new Racer[] {
                new Racer(12, "Jochen", "Rindt", "Austria", 6),
                new Racer(22, "Ayrton", "Senna", "Brazil", 41)
            });
        }
示例#28
0
    void NetworkUpdate()
    {
        ServerPlayer sp = FindServerPlayer(Network.player);         //Find own player

        if (sp != null)
        {
            Racer r = sp.racer;
            if (r != null)
            {
                networkView.RPC("UpdatePlayerBall", RPCMode.Others, Network.player,
                                r.rigidbody.position, r.rigidbody.rotation, r.rigidbody.velocity, r.rigidbody.angularVelocity);
            }
        }
        //Update AIBalls if server
        if (Network.isServer && aiBalls != null)
        {
            for (int i = 0; i < aiBalls.Length; i++)
            {
                Racer r = aiBalls[i];
                networkView.RPC("UpdateAIBall", RPCMode.Others, i,
                                r.transform.position, r.rigidbody.rotation, r.rigidbody.velocity, r.rigidbody.angularVelocity);
            }
        }
    }
示例#29
0
 private bool TryGetRacer(string id, out Racer racer)
 {
     racer = Race.Racers.FirstOrDefault(r => r.Id.Equals(id));
     return(racer != null);
 }
示例#30
0
        public async Task createNewDeckAsync(params string[] inputs)
        {
            var r = Racer.get_racer(Context.Message.Author.Id, Context.Guild.Id);

            if (r == null)
            {
                await ReplyAsync("You don't have a pilot! Please use `zg!createpilot` instead");

                return;
            }
            var          input_dict = helpers.parseInputs(inputs);
            int          carID;
            CardLegality legality;

            if (!input_dict.ContainsKey("carid"))
            {
                await ReplyAsync(Context.User.Mention + ", you didn't include the mandatory key `carid` in your input.");

                return;
            }
            if (!int.TryParse(input_dict["carid"], out carID))
            {
                await ReplyAsync(Context.User.Mention + ", the `carid` wasn't a valid integer");

                return;
            }
            var car = Car.get_Car(carID);

            if (car == null)
            {
                await ReplyAsync(Context.User.Mention + ", the provided `carid: " + carID + "` does not exist.");

                return;
            }
            if (!input_dict.ContainsKey("legality"))
            {
                await ReplyAsync(Context.User.Mention + ", you didn't include mandatory key `legality` in your input.");

                return;
            }
            legality = Card.stringToCardLegality(input_dict["legality"]);
            if (legality == CardLegality.INVALID)
            {
                await ReplyAsync(Context.User.Mention + ", you didn't provide a valid legality input. `red`, `blue`, or `yellow`");

                return;
            }
            if (r.carToDeckLegalityToDeckID.ContainsKey(carID))
            {
                if (r.carToDeckLegalityToDeckID[carID].ContainsKey(legality))
                {
                    await ReplyAsync(Context.User.Mention + ", you can't edit a deck using this command. Try `zg!updatedeck`");

                    return;
                }
            }
            Deck d;

            if (!Deck.fromDictionary(input_dict, car, r, out string error, out d))
            {
                if (d != null)
                {
                    await ReplyAsync(Context.User.Mention + ", failed to make deck with error: " + error, false, d.embed());

                    return;
                }
                else
                {
                    await ReplyAsync(Context.User.Mention + ", failed to make deck with error: " + error);

                    return;
                }
            }
            d.player_discord_id = Context.User.Id;
            d.server_discord_id = Context.Guild.Id;
            Deck.insert_deck(d);
            var deck = Deck.get_deck(d.Title);

            if (r.carToDeckLegalityToDeckID.ContainsKey(carID))
            {
                r.carToDeckLegalityToDeckID[carID].Add(legality, deck.ID);
            }
            else
            {
                var dict = new Dictionary <CardLegality, long>();
                dict.Add(legality, deck.ID);
                r.carToDeckLegalityToDeckID.Add(carID, dict);
            }
            Racer.update_racer(r);
            await ReplyAsync(Context.User.Mention + ", made deck as shown below. To update use `zg!updatedeck id=" + deck.ID + " [other updates]`", false, deck.embed());
        }
示例#31
0
 public RacingControls(Racer myRacer)
     : this(myRacer, new PadInputManager(PlayerIndex.One))
 {
     //Use first Controler as default.
 }
示例#32
0
 public bool CollidesWith(Racer racer)
 {
     return(false);
 }
        private readonly SpatialHash <Racer> spatialFromRaces    = new SpatialHash <Racer>(5f); // size of Races x 2

        // Spatial hashing might be the fastest way
        // it can match O(n^2) in worst case - all racers in the same spatial cell - not desirable
        // best O(n)
        // Also further improvement is to use ECS systems to query for Alive and check their position with hashed Position
        // Problem with ecs - no Dictionary/list or reference typed values.
        private void UpdateRacers(float deltaTimeS, List <Racer> racers)
        {
            // assume dictionary it is empty
            // dictionary can also be placed here ,but it is better when we do not generate garbage
            // assume Racer is a class and not a struct! (struct behaves differently in Dictionaries inside Unity env.)

            // Fill in the dictionary racersAndState
            int   Count   = racers.Count;
            bool  isAlive = false;
            Racer racer1  = null;

            // each frame clear and fill
            spatialFromRaces.Clear();
            // Racer update takes milliseconds
            float deltaTimeMs = deltaTimeS * 1000.0f;

            for (int i = 0; i < Count; i++)
            {
                racer1  = racers[i];
                isAlive = racer1.IsAlive();
                racersAndState.Add(racer1, isAlive);
                // Updates the racers that are alive
                if (isAlive)
                {
                    //Racer update takes milliseconds
                    racers[i].Update(deltaTimeMs);

                    // fill in only the alive
                    spatialFromRaces.Insert(racer1.Position, racer1);
                }
            }

            // Solution with Bag Problem ( removing dimension/squashing space) :
            // To further improve it  - we can use a sort O(n*log(n)) on the racing line - make a line from the racer ( position +- with/height)
            //  (0 is start + ( position +- with/height) - 100 finishing line) ( make it 1 dimensional)
            // traverse sorted array of rectangles and check with the min distance if any of them collides with the  - O(n)
            // this way we can achieve O(n*log(n)) .
            // See https://www.geeksforgeeks.org/top-algorithms-and-data-structures-for-competitive-programming/#algo1

            // Solution with Octree :
            // Requires contant update on Octree
            // Check each racer in with all of the racers from his Octant and it's neighbor's Octant  O (n * (8 + 6 + 1) ) === O(n)

            // Spatial hashing might be the fastest way

            // Collides
            // instead of whole Racer - we can use index of Racer
            Racer racer2   = null;
            int   counter2 = 0;

            for (int racerIndex1 = 0; racerIndex1 < Count; racerIndex1++)
            {
                racer1 = racers[racerIndex1];

                var listOthers = spatialFromRaces.QueryPosition(racer1.Position);
                counter2 = listOthers.Count;

                // maybe skip  if we are already processed - need to test
                for (int racerIndex2 = 0; racerIndex2 < counter2; racerIndex2++)
                {
                    racer2 = racers[racerIndex2];
                    // main issue here - CollidesWith() - the less it is called the better
                    if (racer1.IsCollidable() && racer2.IsCollidable() && racer1.CollidesWith(racer2))
                    {
                        OnRacerExplodes(racer1);
                        // OnRacerExplodes(racer2); // need to test if it has the same behavior
                        racersAndState[racer1] = false;
                        racersAndState[racer2] = false;
                    }
                }

                // Solution with simpler loop
                // O(n^2) --> O( n *(n -1)/2)
                // already less than halfed of what it was.

                // additionally first check if the racer1 is dead - will also help a little but may change the behavior
                // other racers may not explode even when they appear to collide with it
                // if (racersAndState[racer1]) //need to test if it is the same behavior
                // also check if racer1.IsCollidable() - it can be not collidable when Destroyed
                // {
                //     for (int racerIndex2 = racerIndex1; racerIndex2 < Count; racerIndex2++)
                //     {
                //         racer2 = racers[racerIndex2];

                //         // main issue here - CollidesWith() - the less it is called the better
                //         if (racer1.IsCollidable() && racer2.IsCollidable() && racer1.CollidesWith(racer2))
                //         {
                //             OnRacerExplodes(racer1);
                //             // OnRacerExplodes(racer2); // need to test if it is the same behavior
                //             racersAndState[racer1] = false;
                //             racersAndState[racer2] = false;
                //         }
                //     }
                // }
            }

            // Gets the racers that are still alive
            // Get rid of all the exploded racers
            // GC can spike(
            racers.Clear();

            // Builds the list of remaining racers
            // foreach is not ideal, but will be sufficient
            foreach (var item in racersAndState.Keys)
            {
                if (racersAndState[item])
                {
                    racers.Add(item);
                    // Racers update can be placed here - only alive one will be updated
                    // racers.Update(deltaTimeMs);
                }
            }

            // clear up the memory
            // Garbage(  Ideally if this would not needed if it was implemented on a stack
            racersAndState.Clear();

            // Another solution -
            // With the help of Octree - Each Racer internally will keep track of the cars nearby
            // this way there will be no need in the unified dictionary of any sort and we would not
            // need to worry about the garbage genereted. Just simple method - check if collides.
        }
示例#34
0
    private RacerData GetRacerData(Racer racer)
    {
        foreach (RacerData data in racersData)
            if (data.racer == racer)
                return data;

        return null;
    }
 public override void makeAction(Racer racer)
 {
     racer.Die();
 }
示例#36
0
 private void SetRacerPos(Racer racer)
 {
     Vector3 pos = k_firstRacerPos + k_racerOffset * (float)(racer.ControllerIndex - 1);
     racer.transform.localPosition = pos;
 }
示例#37
0
 public RacerParsedEventArgs(Racer racer)
 {
     Racer = racer;
 }
        public Race GetNextRace()
        {
            // Is the Heat completed?
            if (RaceDataStore.PrelimHeatCompleted)
            {
                throw new NoMoreRacersException();
            }

            // Create a new Race object
            Race nextRace = new Race();

            // Do we have an active Race?
            if (_activeRace == null)
            {
                // Assign a new active race object
                _activeRace = new Race();

                // Load the on deck racers
                _activeRace.OnDeckLane1 = RaceDataStore.LanePool.Lane1Stack.Dequeue();
                _activeRace.OnDeckLane2 = RaceDataStore.LanePool.Lane2Stack.Dequeue();
                _activeRace.OnDeckLane3 = RaceDataStore.LanePool.Lane3Stack.Dequeue();
                _activeRace.OnDeckLane4 = RaceDataStore.LanePool.Lane4Stack.Dequeue();
            }

            // Copy the current on deck racers to the lanes
            nextRace.Lane1Racer = _activeRace.OnDeckLane1;
            nextRace.Lane2Racer = _activeRace.OnDeckLane2;
            nextRace.Lane3Racer = _activeRace.OnDeckLane3;
            nextRace.Lane4Racer = _activeRace.OnDeckLane4;

            // Do we have any more racers?
            if (RaceDataStore.LanePool.Lane1Stack.Count > 0)
            {
                // Get the next racers from our lane pool queues
                nextRace.OnDeckLane1 = RaceDataStore.LanePool.Lane1Stack.Dequeue();
                nextRace.OnDeckLane2 = RaceDataStore.LanePool.Lane2Stack.Dequeue();
                nextRace.OnDeckLane3 = RaceDataStore.LanePool.Lane3Stack.Dequeue();
                nextRace.OnDeckLane4 = RaceDataStore.LanePool.Lane4Stack.Dequeue();
            }
            else
            {
                // Build a default racer object
                Racer tempRacer = new Racer(string.Empty, string.Empty);
                tempRacer.PinewoodCar.Number = "last race of heat";

                nextRace.OnDeckLane1 = nextRace.OnDeckLane2 = nextRace.OnDeckLane3 = nextRace.OnDeckLane4 = null;

                // There are no more racers so mark the Heat as complete
                RaceDataStore.PrelimHeatCompleted = true;
            }

            // Assign this to our Active Race member variable
            _activeRace = nextRace;

            return nextRace;
        }
        /// <summary>
        /// Add new racer to the race
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolStripButtonAddRacer_Click(object sender, EventArgs e)
        {
            int racerCount = _racerList.Count;

            // Create a new racer
            Racer racer = new Racer("Racer", racerCount.ToString());

            // Add this new racer to our List
            _racerList.Add(racer);
            this.racerBindingSource.Add(racer);

            // Reload our list view
            this.LoadListView();
        }
        private List<Racer> AddNewRacer(int howMany)
        {
            List<Racer> racerList = new List<Racer>();

            for (int i = 0; i < howMany; i++)
            {
                Racer racer = new Racer("Racer", i.ToString());
                racerList.Add(racer);
            }

            return racerList;
        }
示例#41
0
    public void FinishedLap(Racer racer) {
        RacerData data = GetRacerData(racer);

        data.round++;

        if(data.round >= 2)
        {
            EndRace();
            return;
        }
    }
示例#42
0
 public override void makeAction(Racer racer)
 {
     racer.GetComponent <Animator>().SetTrigger("Fall");
     racer.GetComponent <Animator>().applyRootMotion = false;
     _fallDelayCreator.Delay(racer.Die, fallTime);
 }
示例#43
0
 public bool FindCountryPredicate(Racer racer) =>
 racer?.Country == _country;
示例#44
0
 void Start()
 {
     racer = GetComponent <Racer>();
 }
示例#45
0
 //List.ForEach()
 //Action 无返回类型的委托,参数是Racer类型
 public static void ActionHandler(Racer obj)
 {
     Console.WriteLine("Country:{0}, LastName:{1}",obj.Country,obj.LastName);
 }
示例#46
0
    /// <summary>
    /// Racer has crossed the finish line (or has otherwise finished)
    /// </summary>
    /// <param name="racer">Racer.</param>
    private void FinishRacer(Racer racer)
    {
		if (!m_finishers.Contains (racer)) 
		{
			m_finishers.Add (racer);
			racer.FinishedRace (m_finishers.Count);
		}
    }
 private void OnRacerExplodes(Racer who)
 {
     // explode
     who.IsNotAlive();
 }
示例#48
0
 public RacerData(Racer racer)
 {
     this.racer = racer;
 }
示例#49
0
        private void Form1_Load(object sender, EventArgs e)
        {
            List <Racer> racers = Formulal.GetChampions() as List <Racer>;
            ///选取来自巴西的所有世界冠军
            var res = from racer in racers
                      where racer.Country == "Brazil"
                      orderby racer.Wins descending
                      select racer.FirstName + " " + racer.LastName + "  " + racer.Country;

            this.listBox1.DataSource = Enumerable.ToList <string>(res);
            Racer race = new Racer("Jochen", "Rindt", "Austria", 60, 6, new int[] { 1970 }, new string[] { "Lotus" });

            ///找出赢得至少15场比赛的巴西和奥地利赛车手
            ///
            res = from racer in racers
                  where racer.Wins >= 15 && (racer.Country == "Brazil" || racer.Country == "Austria")
                  orderby racer.Wins descending
                  select racer.FirstName + " " + racer.LastName + "  " + racer.Country;

            this.listBox1.DataSource = Enumerable.ToList <string>(res);
            ///复合from子句
            res = from racer in racers
                  from car in racer.Cars
                  where car == "Ferrari"
                  orderby racer.Wins descending
                  select racer.FirstName + " " + racer.LastName + "  " + racer.Country;

            this.listBox1.DataSource = Enumerable.ToList <string>(res);


            //分组
            var res1 = (from racer in racers
                        group racer by racer.Country into g
                        select g).ToList();
            string res1111 = "";

            foreach (IGrouping <string, Racer> coun in res1)
            {
                res1111 += Environment.NewLine + coun.Key + ":";
                int flag = 0;
                foreach (Racer r in coun.AsEnumerable <Racer>())
                {
                    if (flag == 0)
                    {
                        res1111 += string.Format("{0:20}", r.FirstName);
                    }
                    else
                    {
                        res1111 += Environment.NewLine + string.Format("{0:40}", r.FirstName);
                    }
                    flag++;
                }
            }
            this.richTextBox1.Text = res1111;

            //组链接
            var racer11 = Formulal.GetChampionships()
                          .SelectMany(r => new List <RacerInfo>()
            {
                new RacerInfo()
                {
                    Year      = r.Year,
                    Position  = 1,
                    FirstName = r.First.Substring(0, r.First.IndexOf(" ")),
                    LastName  = r.First.Substring(r.First.IndexOf(" ") + 1),
                },
                new RacerInfo()
                {
                    Year      = r.Year,
                    Position  = 2,
                    FirstName = r.Second.Substring(0, r.Second.IndexOf(" ")),
                    LastName  = r.Second.Substring(r.Second.IndexOf(" ") + 1),
                },
                new RacerInfo()
                {
                    Year      = r.Year,
                    Position  = 3,
                    FirstName = r.Third.Substring(0, r.Third.IndexOf(" ")),
                    LastName  = r.Third.Substring(r.Third.IndexOf(" ") + 1),
                }
            });
        }
示例#50
0
 public RacingControls(Racer myRacer)
     : this(myRacer, new PadInputManager(PlayerIndex.One))
 {
     //Use first Controler as default.
 }
示例#51
0
 public Position(Racer racer)
 {
     Racer = racer;
     Laps  = -1; // Race starts before the finish line.
     Angle = 360;
 }
示例#52
0
 //List
 public static bool FindCoutryFinland(Racer racer)
 {
     if (racer == null)
         throw new ArgumentException("Racer Null");
     return racer.Country == "Finland";
 }
示例#53
0
 public void GenerationTest()
 {
     var map   = new Map(9);
     var racer = new Racer(new HexCoordinates(0, 0, 0), 100, map);
     var path  = racer.BuildPath(new HexCoordinates(1, 0, -1), new HexCoordinates(5, -4, -1));
 }
 public bool FindCountryPredicate(Racer racer) => racer?.Country == _country;
示例#55
0
        public void calculateResults()
        {
            results = new string[Race.currentRacers.Count];

            foreach (Racer racer in Race.currentRacers)
                if (racer.raceTiming.finalRaceTime == long.MaxValue)
                    racer.raceTiming.finalRaceTimeString = "DNF";

            if (!Race.currentRaceType.getRaceType().Equals(RaceType.PointsRace))
            {
                //List<HighScoreEntry> tempRes = HighScore.getHighScores(MapManager.currentMap, 1);
                raceType = HighScoreType.PointMode;
                for (int i = 0; i < Race.humanRacers.Count(); i++)
                {
                    long racersFastersTime = (long)(Race.humanRacers[i].raceTiming.fastestLap.TotalMilliseconds * 1000);
                    if ( (racersFastersTime > 1 ) && racersFastersTime < time)//Needs a sanity check, as fastestLap is zero if a lap is not completed?
                    {
                        time = racersFastersTime;
                        index = Race.humanRacers[i].racingControls.padIndex;
                    }
                }

                List<HighScoreEntry> tempRes = HighScore.getHighScores(MapManager.currentMap.currentMapName, 0);

                // REMOVED FOR DEMO
                // NEEDS TO BE FIXED
                // TODO: CASE 71
                //if(time < tempRes[9].value){

                //    keyboardShown = false;
                //    if(!LiveServices.GuideIsVisible()) /*CHECK HIGHSCORE*/
                //    {
                //        while( !keyboardShown )
                //        try
                //        {
                //            Guide.BeginShowKeyboardInput(index, "Player " + (index.ToString()) + " has set a new lap record", "Please enter your name", "", keyboardCallback, (object)"dontcare");
                //        }
                //        catch
                //        {
                //            keyboardShown = true;
                //            // create a class bool, initialize it to false, then set it to true here so you know you need to try again because it didn't work the first time,
                //            // probably because the Guide became visible between when you checked LiveServices.GuideIsVisible() and when you called Guide.BeginShowKeyboardInput
                //        }
                //        //ENTER NAME AND TIME INTO HIGH SCORES
                //    }
                //}
            }

            //POINTS RACE

            //SAVE

            if (Race.currentRaceType.getRaceType().Equals(RaceType.LappedRace))
            {
                results = Race.currentRacers.OrderByDescending(r => r.raceTiming.finalRaceTime).Reverse().Select(r => r.raceTiming.getFinalTotalTime()).ToArray();
                players = Race.currentRacers.OrderByDescending(r => r.raceTiming.finalRaceTime).Reverse().Select(r => r.racerID.ToString()).ToArray();
                resultsCalc = true;
            }
            else if ( Race.currentRaceType.getRaceType().Equals(RaceType.EliminiationRace))
            {
                foreach (Racer racer in Race.currentRacers)
                {
                    if (racer.raceTiming.isLastToBeEliminated == false)
                        eliminationWinner = racer;
                }
            }
        }
示例#56
0
 /// <summary>
 /// An input interface to a virtual controller which acts as an AI racer.
 /// </summary>
 /// <param name="parent">
 /// The racer which this input system will be controlling.
 /// </param>
 public AiInputManager(Racer parent)
 {
     lastState = currentState = new GamePadState();
     this.parent = parent;
 }