2017-02-06 1 views
-1

Während dies die Einheit betrifft, ist es eher eine allgemeine Programmierfrage.Gibt es eine Möglichkeit, die Elemente in einer Liste zu unterscheiden?

So kann ich keine Tupel verwenden, und ich musste mehrere Float-Werte zurückgeben. Diese sind wie Schadensbuffs. Also muss der Bogenschütze der Kavallerie zusätzlichen Schaden zufügen, dieser Schaden ist x. Mein Code (umständlich obwohl es ist) kann es besser sagen:

private List<float> DetermineCounter() 
{ 
    CounterData cd = new CounterData(); 

    List<float> counterList = new List<float>(); 

    if (gameObject.tag == "Hoplite") 
    { 
     float archer = cd.counterArcher = 10.0f; 
     float peltast = cd.counterPeltast =5.0f; 
     float slinger = cd.counterSlinger = 20.0f; 

     List<float> counterData = new List<float>(); 
     counterData.Add(archer); 
     counterData.Add(peltast); 
     counterData.Add(slinger); 

     counterData = counterList; 


    } 

    if (gameObject.tag == "Peltast") 
    { 
     float archer = cd.counterArcher = 5.0f; 
     float slinger = cd.counterSlinger = 5.0f; 

     List<float> counterData = new List<float>(); 
     counterData.Add(archer); 
     counterData.Add(slinger); 

     counterData = counterList; 

    } 

    if (gameObject.tag == "Archer") 
    { 
     float cavalry = cd.counterCavalry = 15.0f; 
     float slinger = cd.counterSlinger = 10.0f; 

     List<float> counterData = new List<float>(); 
     counterData.Add(cavalry); 
     counterData.Add(slinger); 

     counterData = counterList; 

    } 

    if (gameObject.tag == "Cavalry") 
    { 
     float hoplite = cd.counterHoplite = 20.0f; 
     float peltast = cd.counterPeltast = 10.0f; 

     List<float> counterData = new List<float>(); 
     counterData.Add(hoplite); 
     counterData.Add(peltast); 

     counterData = counterList; 

    } 
    return counterList; 

} 

So es gibt 2 oder 3 Werte, je nachdem, welches Objekt Ich habe das Skript auf. Wenn es also ein Bogenschütze ist, auf dem ich das Skript habe, dann gibt es die Werte 15 und 10 zurück. Mein Problem ist, dass dies nicht irgendwelche Werte sind, sondern etwas Bestimmtes. 15 bezieht sich auf den zusätzlichen Schadensfaktor gegen die Kavallerie, und diese Information ist wichtig.

Also, wenn ich eine Foreach für die Liste verwenden, gibt es keine Möglichkeit zu bestimmen, was jeder Wert entspricht. Ich habe mich gefragt, ob es eine Möglichkeit gibt, das zu beheben?

+0

Eine Lösung, die eine neue Klasse zu machen wäre, dass würde mögliche Rückgabewerte enthalten und ein Objekt dieser Klasse anstelle einer Liste zurückgeben. –

+0

Warum gibst du kein Objekt vom Typ Damage oder etwas ähnliches zurück? – NicoRiff

+0

Aus Leerlauf Neugier, warum können Sie keine Tupel verwenden? – Abion47

Antwort

1

Sie können Wörterbuch verwenden für das zurückgegebene Ergebnis und den Zugang notwendigen Daten von Schlüssel wie folgt aus:

Dictionary<string, float> result = DetermineCounter(); 
float hoplite = result["hoplite"]; 
+0

Sie sind ein Lebensretter, danke . – user3752329

0

I ref Parameter übergeben würde:

private void DetermineCounter(ref float archer, ref float peltast, ref float slinger, ref float cavalry. ref float hoplat) 
{ 
    if (gameObject.tag == "Hoplite") 
    { 
     archer = 10.0f; 
     peltast = 5.0f; 
     slinger = 20.0f; 
    } 
    else if (gameObject.tag == "Peltast") 
    { 
     archer = 5.0f; 
     slinger = 5.0f; 
    } 
    else if (gameObject.tag == "Archer") 
    { 
     cavalry = 15.0f; 
     slinger = 10.0f; 
    } 
    else if (gameObject.tag == "Cavalry") 
    { 
     hoplite = 20.0f; 
     peltast = 10.0f; 
    } 
} 
Verwandte Themen