Zufall mit PHP

  • Themenstarter Themenstarter koronyl
  • Beginndatum Beginndatum
K

koronyl

Hi,
wie ihr wisst schreib ich ja gerade, oder Versuch es zumindest, ein Browsergame zu Programieren...
Geld und Gebaeude sind abgehackt, aber jetzt stehe ich wieder vor einem Problem...
Bei der Angriffsfunktion habe ich es mir so gedacht, also erstmal ganz einfach, jeder hat Truppen mit jeweils einer bestimmten Angriffsstärke.
zB.
Spieler1.
hat 10 Soldaten jeweils 10 Angriff also insgesamt 100 Angriiff
hat 10 Panzer jeweils 30 Angriff also insgesamt 300 Angriiff
Gesamt: 400
Spieler2.
hat 15 Panzer jeweils 30 Angriff also insgesamt 450 Angriiff
hat 15 Soldaten jeweils 10 Angriff also insgesamt 150 Angriiff
Gesamt:
600

Spieler 1 verliert aber Spieler zwei soll Truppen verlieren nach Zufall, also nicht das Spieler2 dann noch 5 Soldaten und 5 Panzer hat sondern vielleicht das er noch 2 Soldaten und 4 Panzer aber auch nur so das es auch mit der Anzahl der Soldaten hinkommt...
Und wenn Spieler zwei keine Panzer hat dann aber Soldaten gehen noch mehr Soldaten drauf

Hoffe ihr versteht was ich meine
 
Also, ich verstehe Dein Problem nicht wirklich, aber vielleicht ist die Funktion rand() schon einmal ein Ansatz?
 
Ich will damit sagen das es Zufall ist ob ein Panzer oder 3 Soldaten drauf gehen..
die Funktion rand() kenn ich bereits aber mit der geht es nach meinem Wissen nicht
 
Ich glaube hier kommst du nur mit einer eigenhändig aufgestellten Gleichung weiter, welche je nach Stärke, Verteidigung etc. der einzelnen Einheiten und deren Menge berechnet, wie viele Einheiten noch da sein könnten und das Ganze dann mit der Funktion rand() kombinierst.
 
Ja normalerweise stecken lange komplexe Berechnungen hinter so einem System.
Warum geht rand() nicht?

PHP:
$kill = rand(0,1);
if($kill == 0) {
	$soldaten_anz=-3;
} else {
	$panzer_anz--;
}
 
Ich würde die Gruppen in ein Array packen.

Für den Angreifer hast du dann ein Array mit 2 Werten und für den Verteidiger auch. Danach kannst du dann zufällig eine Gruppe aus jedem Array entnehmen, diese gegeneinander kämpfen lassen und dann die Verluste berechnen.

So kann es mal sein, dass Soldaten gegen Soldaten kämpfen oder Soldaten gegen Panzer oder aber Panzer gegen Panzer.

Ist natürlich nur eine Möglichkeit. Weiterhin könntest du zum Beispiel erst Infanterie und dann Attilerie gegeneinander kämpfen lassen oder deine Einheiten mit einer Reichweite versehen und sie dann virtuell aufeinander zumaschieren lassen und sobald etwas in Reichweite ist wird geschossen.

Wie du siehst gibt es viele Möglichkeiten und die Möglichkeit von Steusi gehört natürlich auch dazu. Ist alles eine Frage wie komplex man das ganze machen will.
 
Na ganz einfach mit array_rand().
Die Idee mit dem Array finde ich auch sehr gut! Aber wenn du mit Zufallsvariablen arbeiten möchtest, nimm bitte mehrere zufallsvariablen. Damit auch wirklich ein Ergebnis erschein, was du willst. Momentan wäre die Abweichung sehr grioß und es könnte dumme zufälle geben, das einer alle Panzer verliert aber alle Soldaten überleben, das ist dann ärgerlich.
 
Mit Rand() kannst du zum Beispiel die Stärke noch ein bisschen zufälliger machen.

Also zum Beispiel wird für jede Einheit berechnet wie sie gerade drauf ist und je nachdem wird entweder Stärke abgezogen oder Stärke hinzugefügt. Allerdings würde ich das ganze mit Prozent berechnen.

Also zum Beispiel 45% Chance stärker zu werden und 45% Chance schwächer zu werden und vielleicht noch 10% Chance gleich zu bleiben.

Und dann schaust du wie du den Wert veränderst, zum Beispiel:
80% Chance für 3% Änderung
10% Chance für 5% Änderung
5% Chance für 7% Änderung
3 % Chance für 9% Änderung
1% Chance für 15% Änderung

So kann es mal vorkommen dass zum Beispiel ein Soldat sehr stark ist, aber auch dass er sehr schwach ist, aber die meisten Änderungen werden bei so 3-5% liegen und somit beeinflusst du das Ergebnis nicht zu stark (dadurch kann kein Soldat 5000 Panzer zerstören)

Edit:
Muss zuhause mal schauen ob ich noch irgendwo ein altes Kampfscript rumfliegen habe, dass kann ich dir dann zur Verfügung stellen, dass war auch sehr einfach aufgebaut.
 
Wenns schon so komplex wird dann kann man auch direkt mit Klassen anfangen finde ich.
Und dazu noch zwei X-Y-Variablen, die die Position auf dem Schlachtfeld angibt und damit auch noch zusätzlich arbeiten. (Je weiter weg desto weniger Schaden / Treffer)
Dadrüber hinaus kann man auch eine Art KI draus machen, die sich den nächstgelegenen Gegner sucht und draufschießt oder jemanden der ihn anvisiert.
Ersteres kann man noch komplexer stricken, letzteres geht noch und ist einfach machbar.

Aber warum so rumspinnen, wenn der Benutzer eh nur Zahlen als Ergebnis sieht und nicht die Schlacht selbst? :p

Da reicht der einfachste Hau-Drauf-Mach-Kaputt-Alle-auf-einen-Algorithmus mit total einfachen Zufallswerten, solang das Spiel in Entwicklung ist.
 
Zurück