6 Stimmen

Einfachere / effizientere Methode des verschachtelten if ... else Flusses?

Ich arbeite derzeit an einem Emulationsserver für ein Flash-Client-basiertes Spiel, das ein "Haustiersystem" hat, und ich habe mich gefragt, ob es einen einfacheren Weg gibt, um die Stufe bestimmter Haustiere zu überprüfen.

Aktueller Code:

public int Level
{
    get
    {
        if (Expirience > 100) // Level 2
        {
            if (Expirience > 200) // Level 3
            {
                if (Expirience > 400) // Level 4 - Unsure of Goal
                {
                    if (Expirience > 600) // Level 5 - Unsure of Goal
                    {
                        if (Expirience > 1000) // Level 6
                        {
                            if (Expirience > 1300) // Level 7
                            {
                                if (Expirience > 1800) // Level 8
                                {
                                    if (Expirience > 2400) // Level 9
                                    {
                                        if (Expirience > 3200) // Level 10
                                        {
                                            if (Expirience > 4300) // Level 11
                                            {
                                                if (Expirience > 7200) // Level 12 - Unsure of Goal
                                                {
                                                    if (Expirience > 8500) // Level 13 - Unsure of Goal
                                                    {
                                                        if (Expirience > 10100) // Level 14
                                                        {
                                                            if (Expirience > 13300) // Level 15
                                                            {
                                                                if (Expirience > 17500) // Level 16
                                                                {
                                                                    if (Expirience > 23000) // Level 17
                                                                    {
                                                                        return 17; // Bored
                                                                    }
                                                                    return 16;
                                                                }
                                                                return 15;
                                                            }
                                                            return 14;
                                                        }
                                                        return 13;
                                                    }
                                                    return 12;
                                                }
                                                return 11;
                                            }
                                            return 10;
                                        }
                                        return 9;
                                    }
                                    return 8;
                                }
                                return 7;
                            }
                            return 6;
                        }
                        return 5;
                    }
                    return 4;
                }
                return 3;
            }
            return 2;
        } 
        return 1;
    }
}

Ja, ich bin mir bewusst, dass ich Experience falsch geschrieben habe, ich hatte den Fehler in einer früheren Funktion gemacht und war nicht dazu gekommen, alles zu aktualisieren.

2voto

Neil N Punkte 24394

Ich würde Mark Byers Antwort noch einen Schritt weiter gehen. Da es etwas verwirrend ist (ich würde vergessen, welcher int was ist), mache ich stattdessen eine sortierte Liste von

SortedList<UserLevel>

Auf diese Weise können Sie nicht nur eine bestimmte Anzahl von Erfahrungspunkten für jede Stufe festlegen, sondern auch einen Namen, z. B. "Uber Elite Super Level", und vielleicht sogar eine eigene Begrüßungsnachricht für jede Stufe.

2voto

David Punkte 2775

Wenn der Erfahrungsalgorithmus auf eine Funktion reduziert werden kann, sollte er eine funktionale Berechnung verwenden, d.h.:

return (Expirience/200); // if each level was 200 xp etc

Allerdings scheinen Ihre verschachtelten if's oben nicht auf jede Funktionskurve zuzutreffen, es gibt den Operator ?

return
 (Expirience > 23000) ? 17 :
 (Expirience > 17500) ? 16 :
 (Expirience > 13300) ? 15 : 
 .. etc ..
 (Expirience > 100) ? 2 : 1;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X