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:^^
-
: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 demmfg
-
: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 demDas 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ärkeEin 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ärkeAha, 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ärkeAha, 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: angriffwenn panzerung==angriff, ist die wirkung halbiert.
die wirkung ist erst ==0, wenn panzerung>=angriff*angrifffü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...?
-
imho wird das in wc3 so gehandhabt:
Eine Einheit hat eine bestimmte Rüstungsstärke. Sagen wir mal 1-20.
Dann steht dran, dass die Rüstung eine bestimmte Schadensreduzierung (bei 1 z.b. 4%, bei 10 z.b. 50%). Wenn wir bei 20 100% reduzierung machen, haben wir ein problem, weshalb wc3 bei 100% schadensreduzierung (auch wenn das dransteht) IMHO in wirklichkeit intern 100% leben hinzuzählt, dieses "neue Leben" sieht der spieler nicht, aber dein Programm kann damit easy den zugeführten schaden abziehen und das dann auf das "eigentliche Leben" anteilmäßig übertragen. Dann gibts es noch verschiedene Rüstungs/Angriffsklassen etc, wo bestimmte Angriffe auf bestimmte Rüstungen nicht 100% schaden machen sondern 150%, 200% oder auch nur 50%.