Leben(+Panzerung) -> Schadenberechnung



  • hi

    ich habe erstmals zwei Variablen definiert:

    int hp_full = 100; //Leben
    int pz_full = 150; //Panzerung
    

    Aber ich brauche ja auch eine Formel, die das Leben, das noch übrig geblieben ist ausgibt.
    Nur als Beispiel:

    Skorpion greift mich an.
    Ich:(100HP, 150PZ)
    Skorpion:(40ATK)
    Wieviel Leben hab ich dann noch,wenn man auch noch die Panzerung dazuzählt, das sie als "Schutz" zählt?

    So wenn das erstmals geklärt wurde, bräuchte ich noch eine letzte Hilfe 😃
    Und zwar bei dem,dass man extra Schaden zunimmt,wenn der Gegner +4% Stärke von einem Item bsp. Ring besitzt.
    Als Beispiel hier, habe ich eine Formel von "Gothic 2" aus einem anderen Forum:
    code:--------------------------------------------------------------------------------

    GS = angerichteter Gesamtschaden
    WS = Waffenschaden
    ST = Stärke ( Schadensbonus)
    RS = Rüstungsschutz des Gegners
    
    Formel für Volltreffer 
    GS = WS + ST - RS, GS >= 5
    
    Formel für normalen Treffer 
    GS = ( WS + ST - RS - 1 ) / 10, GS >= 5
    
    Durchschnittlicher Schaden pro Schlag
    P = Wahrscheinlichkeit für Volltreffer ( Talentwert 1H oder 2H )
    
    GS = [ WS + ST - RS ] * P + [ ( WS + ST - RS - 1 ) / 10 ] * ( 1 - P )
    
    ( Werte in [] >= 5, 0 <= P <= 1 )
    

    --------------------------------------------------------------------------------

    Ich hoffe,dass ihr mich versteht, was ich damit meine 😉
    Mit freundlichen Grüßen :dAnIeL:™ ^^


  • Mod

    :Daniel: schrieb:

    Ich hoffe,dass ihr mich versteht, was ich damit meine 😉

    Was genau möchtest du haben? Eine Schadens-Formel musst du dir entweder selbst ausdenken (die gehört ja zu den von dir festgelegten Spielregeln) oder von einem anderen Spiel übernehmen. Was spricht gegen die Formel von Gothic 2?



  • Christoph schrieb:

    :Daniel: schrieb:

    Ich hoffe,dass ihr mich versteht, was ich damit meine 😉

    Was genau möchtest du haben? Eine Schadens-Formel musst du dir entweder selbst ausdenken (die gehört ja zu den von dir festgelegten Spielregeln) oder von einem anderen Spiel übernehmen. Was spricht gegen die Formel von Gothic 2?

    hi Christoph

    Also Mathematik werde ich wohl nie verstehen^^
    Aber ich würde nur gerne wissen,wie man auf die Formeln kommt und wie ca. die Formeln meiner beiden Fragen lauten würde,aber nur so ungefähr,dann mach ich mir eine Vorstellung von dem 😉

    mfg


  • Mod

    :Daniel: schrieb:

    Christoph schrieb:

    :Daniel: schrieb:

    Ich hoffe,dass ihr mich versteht, was ich damit meine 😉

    Was genau möchtest du haben? Eine Schadens-Formel musst du dir entweder selbst ausdenken (die gehört ja zu den von dir festgelegten Spielregeln) oder von einem anderen Spiel übernehmen. Was spricht gegen die Formel von Gothic 2?

    hi Christoph

    Also Mathematik werde ich wohl nie verstehen^^
    Aber ich würde nur gerne wissen,wie man auf die Formeln kommt und wie ca. die Formeln meiner beiden Fragen lauten würde,aber nur so ungefähr,dann mach ich mir eine Vorstellung von dem 😉

    Das lässt sich so allgemein schwer beantworten, weil das halt von den Regeln deines Spiels abhängt. Eine einfache Methode ist z.B. Schadenspunkte auszurechnen, die immer zuerst auf die Panzerung gehen. Erst wenn die Panzerung 0 ist, geht der Schaden auf die Gesundheitspunkte. Wenn du also "Gesundheit: 100, Panzerung: 50" hast und 90 Schadenspunkte erhältst, hast du danach "Gesundheit: 60, Panzerung: 0".

    Um die Schadenspunkte auszurechnen kannst du die Formel benutzen, die du in deinem ersten Posting hattest. Du musst nur die verlangten Werte einsetzen, also Waffenstärke, gegnerischer Rüstungsschutz, etc.;"GS" ist dann dein Ergebnis.



  • Christoph schrieb:

    Das lässt sich so allgemein schwer beantworten, weil das halt von den Regeln deines Spiels abhängt. Eine einfache Methode ist z.B. Schadenspunkte auszurechnen, die immer zuerst auf die Panzerung gehen. Erst wenn die Panzerung 0 ist, geht der Schaden auf die Gesundheitspunkte. Wenn du also "Gesundheit: 100, Panzerung: 50" hast und 90 Schadenspunkte erhältst, hast du danach "Gesundheit: 60, Panzerung: 0".

    So macht das aber wenig Sinn, da wären ja Panzerung und Gesunheit das gleiche. Wenn dann muss die Panzerung erhalten bleiben, damit auch beim nächsten Angriff wieder abgezogen wird.

    Eine mögliche Formel wäre also z.B.:
    Gesundheit(neu) = Gesundheit(alt) + Panzerung - Angriffsstärke

    Ein Beispiel:
    Du hast 100 Gesundheit und 10 Panzerung und wirst von jemandem mit 20 Angriffsstärke angegriffen.
    Gesundheit(neu) = 100 + 10 - 20 = 90
    Ohne Panzerung hättest du nur noch 80 Gesundheit.



  • MeineMeiung schrieb:

    Eine mögliche Formel wäre also z.B.:
    Gesundheit(neu) = Gesundheit(alt) + Panzerung - Angriffsstärke

    Aha, und wenn der Gegner weniger Angriffskraft hat als man Panzerung besitzt, dann wird man geheilt. 😃



  • Jester schrieb:

    Aha, und wenn der Gegner weniger Angriffskraft hat als man Panzerung besitzt, dann wird man geheilt. 😃

    zu diesem behufe führen die meisten recken ein wenig ungeziefer im schambereich mit.



  • Jester schrieb:

    MeineMeiung schrieb:

    Eine mögliche Formel wäre also z.B.:
    Gesundheit(neu) = Gesundheit(alt) + Panzerung - Angriffsstärke

    Aha, und wenn der Gegner weniger Angriffskraft hat als man Panzerung besitzt, dann wird man geheilt. 😃

    Daran hab ich jetzt gar nicht gedacht. Den Fall Angriffsstärke <= Panzerung muss man natürlich vorher abfangen, damit kein Schaden gemacht wird oder vielleicht nicht einmal angegriffen werden kann.



  • Eine Rüstung macht einen doch nicht gesünder. 🙄 Sie schützt vor angriffen.

    volkard schrieb:

    zu diesem behufe führen die meisten recken ein wenig ungeziefer im schambereich mit.

    Das macht die Berechnung schwieriger.



  • MeineMeiung schrieb:

    Christoph schrieb:

    Das lässt sich so allgemein schwer beantworten, weil das halt von den Regeln deines Spiels abhängt. Eine einfache Methode ist z.B. Schadenspunkte auszurechnen, die immer zuerst auf die Panzerung gehen. Erst wenn die Panzerung 0 ist, geht der Schaden auf die Gesundheitspunkte. Wenn du also "Gesundheit: 100, Panzerung: 50" hast und 90 Schadenspunkte erhältst, hast du danach "Gesundheit: 60, Panzerung: 0".

    So macht das aber wenig Sinn, da wären ja Panzerung und Gesunheit das gleiche.

    Nicht zwingend. Ein Unterschied koennte darin bestehen, dass man das eine heilen kann, das andere nicht (siehe z.B. die Protoss-Schilde in Starcraft)



  • Es könnte ja auch so gehen:

    int gs = (pz_full <= 0 ? hp_full - wolf_atk : pz_full - wolf_atk, hp_full - wolf_atk);
    

    oder so:

    int gs =(pz_full <= 0 ? hp_full - orc_atk : pz_full - orc_atk && hp_full - orc_atk);
    

    Aber worin liegt da der Unterschied? ^^
    Sollte doch eh das gleiche sein, oder etwa nicht 😕



  • && und , berechnen was anderes.
    außerdem wird , erst nach ?: ausgewertet.
    und warum so kompliziert und nicht einfach mit if und in einer funktion berechnet?



  • [quote="volkard"]&& und , berechnen was anderes.
    quote]

    Stimmen beide nicht?
    Wenn nicht, welches von beiden stimmt?

    volkard schrieb:

    und warum so kompliziert und nicht einfach mit if und in einer funktion berechnet?

    das ist ja sowas wie ne if, komplizierter aber kürzer 😃
    Außerdem ist es in ner Funktion,hab ich nur rausgenommen^^



  • In Quake kannst du je nach höhe der Rüstung Schaden abwehren:

    damage = attack - ( (2/3 / max_armor) * armor * attack )
    hp_new = hp_old - damage
    armor_new = armor_old - (damage * 1/3)
    

    MfG SideWinder



  • :Daniel: schrieb:

    das ist ja sowas wie ne if, komplizierter aber kürzer 😃
    Außerdem ist es in ner Funktion,hab ich nur rausgenommen^^

    viel spaß beim gamecoden.

    keine ahnung, was dein code machen soll.
    vielleicht sowas?

    int berechneSchaden(int ruestung,int panzerung,int angriff){
       int schaden=angriff-ruestung;
       if(schaden<=0)
          schaden=0;
       return schaden;
    }
    


  • ich finds eigentlich bloed, wenn man durch entsprechende panzerung manche mobs total unschaedlich machen kann (direkter abzug von deren angriffsstaerke). besser find ichs, wenn sich die panzerung auf trefferwk oder von mir aus auch auf aua nur reduzierend auswirken kann. so dass man bei unendlich panzerung sicher waere quasi. so etwa aua = angriffstaerke * exp(-panzerung) oder so. natuerlich noch alles schoen mit geeigneten koeffizienten spicken.

    volkard: die tiefsinnigkeit deines ungezieferkommentars hat mich sehr zum lachen gebracht, jedoch ist zu bedenken, dass sich dies meist UNTER der panzerung befindet, und somit nicht die von dir gewuenschte wirkung zeigen wird. hoechstens bei zauberern die sich durch selbstverzauberung panzern. 😉



  • PeterTheMaster schrieb:

    ich finds eigentlich bloed, wenn man durch entsprechende panzerung manche mobs total unschaedlich machen kann (direkter abzug von deren angriffsstaerke). besser find ichs, wenn sich die panzerung auf trefferwk oder von mir aus auch auf aua nur reduzierend auswirken kann. so dass man bei unendlich panzerung sicher waere quasi. so etwa aua = angriffstaerke * exp(-panzerung) oder so. natuerlich noch alles schoen mit geeigneten koeffizienten spicken.

    jup. da haste recht.
    exp(-panzerung) ist aber auch ein starkes stück (selbst mit guten koeffizienten).

    vielleicht
    int panzerfaktor=panzerung/angriff+1;
    int wirkung=angriff/panzerfaktor;

    das ergäbe dann

    panzerung	1	2	3	4	5	10	20	30	40	50	100	200	300	400	500	1000
    1	0	2	3	4	5	10	20	30	40	50	100	200	300	400	500	1000
    2	0	1	3	4	5	10	20	30	40	50	100	200	300	400	500	1000
    3	0	1	1	4	5	10	20	30	40	50	100	200	300	400	500	1000
    4	0	0	1	2	5	10	20	30	40	50	100	200	300	400	500	1000
    5	0	0	1	2	2	10	20	30	40	50	100	200	300	400	500	1000
    10	0	0	0	1	1	5	20	30	40	50	100	200	300	400	500	1000
    20	0	0	0	0	1	3	10	30	40	50	100	200	300	400	500	1000
    30	0	0	0	0	0	2	10	15	40	50	100	200	300	400	500	1000
    40	0	0	0	0	0	2	6	15	20	50	100	200	300	400	500	1000
    50	0	0	0	0	0	1	6	15	20	25	100	200	300	400	500	1000
    100	0	0	0	0	0	0	3	7	13	16	50	200	300	400	500	1000
    200	0	0	0	0	0	0	1	4	6	10	33	100	300	400	500	1000
    300	0	0	0	0	0	0	1	2	5	7	25	100	150	400	500	1000
    400	0	0	0	0	0	0	0	2	3	5	20	66	150	200	500	1000
    500	0	0	0	0	0	0	0	1	3	4	16	66	150	200	250	1000
    1000	0	0	0	0	0	0	0	0	1	2	9	33	75	133	166	500
    

    von oben nach unten: panzerung
    von links nach rechts: angriff

    wenn panzerung==angriff, ist die wirkung halbiert.
    die wirkung ist erst ==0, wenn panzerung>=angriff*angriff

    für exp() hab ich aber nen feinen ort.
    einkaufspreis(ding)>=exp(ding.panzerung)



  • PeterTheMaster schrieb:

    jedoch ist zu bedenken, dass sich dies meist UNTER der panzerung befindet, und somit nicht die von dir gewuenschte wirkung zeigen wird. hoechstens bei zauberern die sich durch selbstverzauberung panzern. 😉

    ich kenne nur engines, die dahingehend vereinfachen und nur unterscheiden, ob der angriff magisch oder nichtmagisch ist, und bei nichtmagischen angriffen die rüstung miteinberechnen. genanntes ungeziefer ist nichtmagisch. der u-trick ist also eindeutig cheaten im sinne von "ausnutzen von bugs".

    bitte keinen tiefgang vermuten, das posting existiert nur wegen des wortspiels.



  • und ich dachte das ungeziefer soll wegen seines geringen angriffswerts staendig die gesundheit auftanken...

    durch die runderei gibts haessliche spruenge und angriff^2/panzerung erscheint mir auch nicht intuitiv sinnvoll. da schalt ich lieber noch ein ln 😉 oder sonstwas beliebig langsam aber streng monoton wachsendes vor die panzerung in meiner formel und bestehe weiter auf koeffizienten. aber ueber glaubensfragen soll man nicht streiten.

    edit: das mit dem preis ist wirklich gut.



  • Und was hat das jetzt alles mit Mathematik zu tun...? 😃


Log in to reply