Berechnung von Hiscorepunkten

      Berechnung von Hiscorepunkten

      Hallo,

      ich wollte mal fragen ob jemand eine gute Idee hat wie man Hiscore-Punkte berechnen könnten.
      Ich hab mir da auch schon Gedanken gemacht und irgendwie müssten dafür wohl folgende Faktoren Einfluss nehmen:

      - Anzahl Spieler
      - Stärke der einzelnen Spieler
      - Anzahl Kills pro Runde
      - ggf. Wer wen gekillt hat (Stärkenunterschied)


      Ich würde da gerne eine Tennisähnliche Rangliste bauen, bei der auch nach Abhängigkeit der Spielstärken
      die Punkte verteilt werden.

      Du hast schon recht, dass eine "Points(opponent)"-Funktion am passendsten waere. Man addiert dann am Ende einer Runde alle Punkte die gegen die anderen Spieler errungen wurden.

      In der Points()-Funktion wird dann entsprechend individuell vorgegangen:
      - wie oft hat der Spieler "opponent" bereits in allen Spielen ("total") getoetet: playerX_OpponentY_total_kills
      - wie oft hat der Spieler "opponent" bereits in dieser "Session" getoetet: playerX_OpponentY_session_kills
      - hat Spieler "opponent" getoetet? +X Punkte (die X bezieht "irgendwie" playerX_OpponentY_session_kills / total_kills mit ein

      Zusaetzlich zu den "individuellen" Punkten gibt es noch "Rundenpunkte":
      - Ist Anzahl Kills durch den Spieler > 1/Spieleranzahl (entspricht "jeder killt einen anderen") bekommt man Bonipunkte
      - ist Anzahl Kills ... / Spieleranzahl > 0.5, Boni fuer "Drecksarbeit erledigen" (Ausnahme: 2 Spieler)
      - ist Anzahl Kills ... / Spieleranzahl > 0.75, Boni fuer "Auftragsbomber"
      - entweder: Bonipunkte fuer "Hattricks" (mehrere Siege in Folge geben Boni) - oder aber Abschwaechung bei Siegen in Folge (um den Abstand eines "Meisters" nicht ins Unermessliche laufen zu lassen): Erreichte_Rundenpunkte = Erreichte_Rundenpunkte * 0.9^Siege_In_Folge)


      Du musst vorher wissen, ob ein sehr guter Spieler "abgeschwaecht" wird (aus Motivationsgruenden fuer die anderen Spieler) oder ob du "stark ist stark" durchziehen willst - oder gar hofieren (3 Siege in Folge = Bonuspunkte, jeder 10. Kill gibt Extrapunkte ...).


      Ein erster Ansatz ist aber auf alle Faelle, eine "Spieler1-Spieler2"-Staerke zu ermitteln. Sprich, wie stark spielt ein Spieler gegen einen anderen (jetzt mal die Gruppendynamik aussenvorgelassen - also "A ist nur gut gegen B, wenn C und E und M mitspielen").
      Anhand dieser Einzelstaerken kannst Du bei einem Spiel ausrechnen, wie gut ein Spieler "insgesamt" ist (Spieler1-Spieler2 + Spieler1-Spieler3 + ... geteilt durch (Spieleranzahl-1)). Damit haettest Du am Ende einen einfachen Multiplikator fuer eventuell verteilte Punkte.
      Ein Spieler, der eine Spielstaerke < 1.0 haette (sprich, gegen jeden anderen verloren hat) waere dann entsprechend behandelbar (Punkte = Punkte * (1.0/Gesamtspielstaerke_SpielerX))


      Auch wenn es dann noch "undurchsichtiger" wird. Du kannst den Effekt abschwaechen in dem Du nicht linear anwachsen laesst, sondern exponentiell, oder logistisch (erst schnell, dann langsamer). Auch ein "0.x ^ Menge" schwaecht schoen ab (verglichen mit "y * Menge").


      Entschuldige die verschiedene Variablennamensgebung, ich bin eigentlich fuer lowerCamelCase und UpperCamelCase - nur liest sich das nicht immer gut im Fliesstext.


      bye
      Ron
      Noch einmal kurz zu den Individuellen "SpielerX-SpielerY"-Staerken:

      Eventuell waere es gut, nur die letzten X Spiele zu bewerten. Ein "Anfaenger" hat sonst ewig seine Jugendsuenden in der Punkteberechnung mitgeschleppt. Obwohl er nun nach "20" Spielen (10 gewonnene heute, 10 verlorene vor einer Woche - und 100 Spiele zwischendurch an einem anderen PC) schon alle anderen besiegt, reduzieren die ersten 10 verlorenen Spiele seine Punkte noch immer sehr stark.


      Diese "Spielerstaerke" kann man uebrigens auch fuer "Handicaps" nutzen. Sie koennten dann die Chance auf Krankheiten erhoehen, oder fuer Spezialereignisse herangezogen werden ("Unser Auftragsbomber Ron bekommt die naechsten 10 Runden eine kuerzere Lunte").


      bye
      Ron
      Naja, die Kurzfassung ist:

      - entwickle einen Faktor der ausdrueckt, wie stark Spieler A gegen Spieler B spielt. Er enthaelt unter anderem:
      - - "Toetungen in dieser 'Session'" (ein "Run" ist vielleicht weniger wert, als wenn man an jedem beliebigen Tag diesen Spieler besiegt)
      - - "Toetungen bisher"
      - - "Toetungen im Endspiel" (wenn nur noch 2 Spieler aktiv sind - gerade im "Volles Haus"-Getuemmel ist es ja einfacher einen zu erwischen)

      Mit Hilfe dieses Faktors kannst Du dann einfach verteilte Punkte abschwaechen oder verstaerken:
      - fuer jeden Kill gibt es X Punkte
      - diese X Punkte werden mit der "Spielstaerke bezueglich erwischtem Spieler" multipliziert

      Aehnlich geht man dann noch mit Dingen wie "Hattricks" (3 Siege in Folge, 3x als erster ausgeschieden, ...) um.


      Man kann sowas auch prima "Stueck fuer Stueck" implementieren. Du faengst einfach mit einer Spielstaerke-Spieler-A-zu-B von "1.0" an. Das waere dann so, als wenn es keinen Einfluss haette ("X Punkte pro Kill").


      Nachteil der ganzen Sache: es ist fuer den Spieler sehr schwierig zu durchschauen, wieso er wie viele Punkte bekommt. Ein "2 Punkte pro Kill", "5 pro Sieg" ... usw. ist da viel einfacher. Zwar nicht unbedingt "fairer", aber einfacher. Und bei Bombzone handelt es sich um keine WiSim die von Komplexitaet profitiert. Einfacher Spieleinstieg, einfache Statistiken, einfache Highscore. Denke also, dass meine Gedankengaenge zum Thema nicht sonderlich foerderlich sind. Vielleicht doch einfach einfach halten?



      bye
      Ron