Exemple #1
0
        public void addButton()
        {
            //nb = nombre de boutons à spawn en même temps
            int nb = 1;
            //On sélectionne un nombre entre 0 et 100...
            float probaNombreSpawn = (float)(rand.Next(10000)) / 100.0f;

            //... on a 0.5% de chance d'avoir 4 touches en même temps...
            if (probaNombreSpawn > 99.5f)
            {
                nb = 4;
            }
            //... 5% d'en avoir 3...
            else if (probaNombreSpawn > 94.5f)
            {
                nb = 3;
            }
            //... 7% d'en avoir 2...
            else if (probaNombreSpawn > 84.5f)
            {
                nb = 2;
            }
            //... 87.5% d'en avoir 1 (on ne met pas la valeur car elle est déjà à 1).

            //On fait un tableau avec les numéros des colonnes possibles
            List <int> position = new List <int>()
            {
                0, 1, 2, 3
            };

            //On ajoute nb boutons
            for (int i = 0; i < nb; i++)
            {
                //On selectionne une colonne au hasard
                int column = position[rand.Next(position.Count)];
                //On crée le bouton
                SpriteButton button = new SpriteButton(column);
                buttons.Add(button);
                //On enlève la colonne de la liste des colonnes dispo
                position.Remove(column);
            }
        }
Exemple #2
0
        public void update(float delta)
        {
            //On ajoute delta aux chronos
            lastSpawnTime += delta;
            lastChange    += delta;
            float timeRatio = (SpriteButton.speed / SpriteButton.baseSpeed);

            if (lastSpawnTime * timeRatio > spawnTime)
            {
                //On doit ajouter un bouton
                addButton();
                lastSpawnTime = 0;
            }

            if (lastChange * timeRatio > changeTime)
            {
                //On doit changer le temps entre chaque spawn de bouton
                //On sélectionne un nombre au hasard entre 0.30 et 0.33 secondes
                spawnTime = Math.Max((float)rand.Next(200) / 1000.0f, 0.33f);
                //On change la durée de la phase avant le prochain changement
                changeTime = (float)rand.Next(10000) / 1000.0f;
                lastChange = 0;
            }

            //On regarde si les touches sont appuyées quand le bouton est proche de la fin
            Keys[] inputs = new Keys[] { Keys.D, Keys.F, Keys.J, Keys.K };
            //Les boutons les plus proches sont ceux qui sont les premiers dans la liste
            //On vérifie les 4 premier boutons au cas où on en aurait 4 en même temps
            List <SpriteButton> premiersBoutons = new List <SpriteButton>();
            float lastY = 0;

            for (int i = 0; i < Math.Min(4, buttons.Count); i++)
            {
                if (i == 0)
                {
                    lastY = buttons[i].position.Y;
                    premiersBoutons.Add(buttons[i]);
                }

                if (buttons[i].position.Y == lastY)
                {
                    premiersBoutons.Add(buttons[i]);
                }
            }

            for (int j = 0; j < inputs.Count(); j++)
            {
                //Si la touche est appuyée à l'instant on regarde
                if (Keyboard.GetState().IsKeyDown(inputs[j]) && !lastState.IsKeyDown(inputs[j]))
                {
                    for (int i = 0; i < premiersBoutons.Count(); i++)
                    {
                        if (premiersBoutons[i].column == j)
                        {
                            float distance = OTRGame.getInstance().getHeight() - (premiersBoutons[i].position.Y + premiersBoutons[i].texture.Height + 156);
                            //On a appuyé sur la touche correspondante au bouton, on vérifie si il est proche (- de 150px)
                            if (distance < 150)
                            {
                                //Il est proche. On calcule le score que l'on obtient.
                                int scoreTouche = Math.Abs(50 * ((int)(distance % 3) + 1));
                                score += scoreTouche;

                                fails = (fails <= 0) ? 0 : fails - 1;

                                buttons.Remove(premiersBoutons[i]);
                                break;
                            }
                        }
                    }
                }
            }


            //On met à jour les boutons et on vérifie que les boutons ne descendent pas trop bas, sinon on les détruits
            for (int i = buttons.Count - 1; i >= 0; i--)
            {
                SpriteButton button = buttons[i];
                button.update(delta);

                if ((button.position.Y) > (OTRGame.getInstance().getHeight() - 156))
                {
                    buttons.Remove(button);
                    fails++;

                    if (fails >= maxFails)
                    {
                        OTRGame.getInstance().setScreen(new PerduScreen(score));
                    }
                }
            }

            //On met à jour les effets des touches
            foreach (SpriteLight light in lightSprites)
            {
                light.update(delta);
            }

            //On change la vitesse du niveau si on vient d'appuyer sur F3 (baisser vitesse) ou F4 (augmenter vitesse)
            float pallier = (50.0f);

            if (Keyboard.GetState().IsKeyDown(Keys.F3) && !lastState.IsKeyDown(Keys.F3))
            {
                if (SpriteButton.speed <= (50.0f))
                {
                    SpriteButton.speed = (50.0f);
                }
                else
                {
                    SpriteButton.speed -= pallier;
                }
            }
            else if (Keyboard.GetState().IsKeyDown(Keys.F4) && !lastState.IsKeyDown(Keys.F4))
            {
                SpriteButton.speed += pallier;
            }

            lastState = Keyboard.GetState();
        }