Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Kämpfe bei Browsergames mit verschiedenen Einheiten (https://www.delphipraxis.net/57643-%5Bphp%5D-kaempfe-bei-browsergames-mit-verschiedenen-einheiten.html)

Master_RC 24. Nov 2005 15:23


[PHP] Kämpfe bei Browsergames mit verschiedenen Einheiten
 
hi leutz!

Ich möcht mit PHP nun ein Spiel anfangen und stehe gleich bei einer Frage:

Wie kann ich es machen, dass ich einen Kampf mit verschiedenen Einheiten/Einheitenklassen simuliere/generiere?

Also ein Spieler hat halt X EinheitenA, Y EinheitenB und der andere Spieler hat halt Z EinheitenC

Wie rechne ich das dann aus?
Am besten wäre es natürlich, wenn man das so machen könnte, dass jede Einheit eigene Lebenspunke hat
(Meinetwegen kann man sie nach einem Kampf heilen/reparieren)

Weiß jemand, wie ich das anstellen könnte?

sniper_w 24. Nov 2005 15:29

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Mit php ein Spiel entwickeln...da kommst du nicht weit. PHP wird "server side" ausgeführt. Besser wäre ein Java-Spiel...

Master_RC 24. Nov 2005 15:32

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Nunja, mir gefällt eben PHP und die Spieleentwicklung :D
Die Community wünscht sich außerdem ein eigenes Spiel ^^

Trotzdem hätte ich gerne eine Antwort zum Thema :(

(Dass ich nicht allzu weit komm, ist mir klar ;) )

Dj_Base 24. Nov 2005 18:41

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Hi!

Du könntest für jede Einheit Lebenspunkte, Angriffspunkte & Vertedigungspunkte.
Dann lässt du die Einheiten angreifen, ziehst von den Angriffspunkten die VP des Opfers ab, und lässt den Rest dann von seinen LP abziehen.

Das ist jetzt aber sehr einfach gestrickt! :-D

Du kannst noch Trefferwahrscheinlichkeit bzw. Trefferskill/Waffenskill, Verteidigungwarscheinlichkeit bzw. Ausweichen/Parieren hinzufügen usw.

Du siehst schon, eine sehr komplexe Sache :)

Nun denn, hoffe, konnte dir helfen bzw. dich ein wenig anregen,
Cya,
Dj_Base

Tubos 24. Nov 2005 19:05

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Zitat:

Mit php ein Spiel entwickeln...da kommst du nicht weit. PHP wird "server side" ausgeführt. Besser wäre ein Java-Spiel...
Er sagte Browsergame. HTML-basierte Browsergames werden sehr wohl mit PHP entwickelt. http://de.wikipedia.org/wiki/Browsergame
Interaktive Singleplayer-Minispiele können i.A. natürlich nicht in PHP geschrieben werden.

sniper_w 24. Nov 2005 19:49

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Zitat:

Interaktive Singleplayer-Minispiele können i.A. natürlich nicht in PHP geschrieben werden.
Wenn ich "Spiel" höre, denke ich "interaktiv"...oder habe ich etwas falsch begriffen. :zwinker:

Tubos 24. Nov 2005 19:59

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Stimmt. Blöde Formulierung.
"Echtzeit" passt besser, stimmt aber auch nicht ganz :P

Airblader 24. Nov 2005 21:16

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Generell gilt eig.:
Je mehr Faktoren, desto größer die Streuung der Möglichkeiten.

Allerdings sollte es natürlich für Benutzer nich ersichtlich sein.
O.g. Punkte wie Stärke, Trefferwahrsch., ... sind ein guter Ansatz, du musst eben nur viel rumtesten,
dass man gute Ergebnisse bekommt.
Multiplikatoren & Zufall spielen dabei eben eine große Rolle.

Kleines Beispiel:
Es gibt Krieger mit den Eigenschaften Waffenstärke, Kampfstärke & Treffsicherheit.

SpielerA's Einheit besteht aus 10 Kriegern, die von SpielerB aus 11.

Nun kannst du einfach die Gesamtstärke eines Kriegers berechnen und als Summe der einzelnen Krieger zusammenfassen:

Code:
für jeden krieger tu
  Einheitsstärke += ((Waffenstärke + (Kampfstärke * Random )) * Treffsicherheit);
(Einheitsstärke = Gesamtstärke der Einheit ; Waffen-/Kampfstärke, Treffsicherheit jeweils vom aktuellen Krieger in der Schleife)

Dann kannst du z.B. das Verhätlnis SpielerA zu SpielerB ausrechnen und machst einen Zufallsgenerator, bei dem dieses Verhältnis als Chance gilt (damit man als unterlegener Spieler trotzdem eine Chance auf den Sieg hat).

Das wäre z.B. eine kleine Grundidee.

air

Master_RC 26. Nov 2005 21:28

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Nun gut, soweit verstanden :)

Aber wie mache ich das denn überhaupt, dass ich weiß, welche Einheiten drangenommen werden?

Also wie soll ich dann den SQL durchführen?
Bzw. dann eben die Schleife...

Binärbaum 26. Nov 2005 21:57

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Zitat:

Zitat von Master_RC
Nun gut, soweit verstanden :)

Aber wie mache ich das denn überhaupt, dass ich weiß, welche Einheiten drangenommen werden?

Also wie soll ich dann den SQL durchführen?
Bzw. dann eben die Schleife...

Die SQL-Abfragen hängen immer von der Struktur der Datenbank/ Tabelle ab.
Also solltest du dir erstmal einige grundlegende Gedanken darüber machen, wie du z.B. solche Sachen wie die Anzahl der Einheiten, die ein Spieler zum Kampf schickt, in der Datenbank abgelegt werden. (Und überhaupt darüber, was man alles in der Datenbank speichern muss.) Danach kann man auch die entsprechenden SQL-Befehle erstellen. ;)

MfG
Binärbaum

faux 26. Nov 2005 22:01

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Ich hab auch mal eins programmiert und habs so gemacht:
In der Tabelle wo die Ressourcen drinnen stehen, steht auch ein UNIX-Timestamp. Und zwar der, zu dem die Daten das letzte Mal aktualisiert wurden. Dann rechne ich mit die Sekunden aus, die nachzurechnen sind, und fertig. Dann kann man schon rechnen.
So kann man das im Prinzip mit jedem Zeitlichbedingten Faktor machen.

Grüße
Faux

Master_RC 26. Nov 2005 22:03

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
k, leutz :D

Also das Ganze soll so aussehen:

Es gibt eine eigene Tabelle für Einheiten (hui...)

Meinetwegen:
id, name, owner, gruppe, ...

tja, jetzt wäre es richtig schön, wenn man auf einer seite (meinetwegen auf der man den angriff starten kann) per Haken bei den Einheiten anwählen kann, wer in den Krieg ziehen soll.
(Checkbox, weil ich es machen will, dass jede Einheit individuell sein kann :) )

So...
meine Probleme:
Wie löse ich das mit den Haken - bzw. wie mache ich dazu eine SQL-Abfrage?

und wie gehts dann weiter ^^

Ich hätte das gerne so:

Ich einer Tabelle wird abgespeichert, welche Kämpfe noch bevorstehen und wie lange es noch dauert, bis die schlacht anfängt.
=> Im Mittelalter dauerte es auch, bis man zum Schlachtfeld kam ;)

So...
jetzt wenn ein Spieler meinetwegen eine neue Seite öffnet - oder sich ein Spieler neu einloggt - dann soll überprüft werden, welche Schlachten bereits überfällig sind und diese eben dann simuliert.

//EDIT:
-------------------------
Zitat:

Zitat von faux
Ich hab auch mal eins programmiert und habs so gemacht:
In der Tabelle wo die Ressourcen drinnen stehen, steht auch ein UNIX-Timestamp. Und zwar der, zu dem die Daten das letzte Mal aktualisiert wurden. Dann rechne ich mit die Sekunden aus, die nachzurechnen sind, und fertig. Dann kann man schon rechnen.
So kann man das im Prinzip mit jedem Zeitlichbedingten Faktor machen.

Grüße
Faux

Tut mir Leid, verstehe den Zusammenhang nicht :(

Binärbaum 26. Nov 2005 22:22

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Zitat:

Zitat von Master_RC
//EDIT:
-------------------------
Zitat:

Zitat von faux
Ich hab auch mal eins programmiert und habs so gemacht:
In der Tabelle wo die Ressourcen drinnen stehen, steht auch ein UNIX-Timestamp. Und zwar der, zu dem die Daten das letzte Mal aktualisiert wurden. Dann rechne ich mit die Sekunden aus, die nachzurechnen sind, und fertig. Dann kann man schon rechnen.
So kann man das im Prinzip mit jedem Zeitlichbedingten Faktor machen.

Grüße
Faux

Tut mir Leid, verstehe den Zusammenhang nicht :(

Das liegt vielleicht daran, dass faux die Ressourcenverwaltung meinte und nicht das Kampfsystem, um das es dir ja erstmal geht. Insofern ist die Aussage erstmal nicht so wichtig, zumindest solange es in deinem Browserspiel keine Ressourcen gibt. ;)

Master_RC 26. Nov 2005 22:32

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Axo, ja :)

Ja, ja, so ein Ressourcensystem hab ich schon gemacht ;)
Natürlich noch etwas ausgeschweifter, aber trotzdem danke für den hinweis ;)

Bitte zurück zum Thema :)

Taladan 26. Nov 2005 22:46

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Empfehlenswert wäre da nicht feste Werte auf Angriff oder Parade. Hatte mal vor einiger zeit was ähnliches Geplant. In meinen Test haben feste Werte plus modi doch recht wahrscheinliche Ende. Hier wäre ein anderer Modi (aus P&P RP abgeschaut), was das ganze doch unwahrscheinlicher macht, das ein kleiner einen großen umhaut aber trotzdem möglich läßt.

Alle werte sollten irgendwo zwischen 5-20 liegen (nicht zu hoch greifen, da an sonnsten die Rechnerei später fast außerdimensionale Zustände bekommen könnte).

Select * from Einheiten where Position=(eine position, falls Weltenbasierend oder Person, falls Personenbezogen)

Nu die Einheitenwerte eine aus eigener tabelle auslesen, hier besten jede Einheit eine eigene position (ich empfehle einzelne einheiten, da massen wieder ähm zu plump sind).

Zum Kampf:

Beispiel:

3 Krieger vs. 2 Monster

AT= 6 8
PA= 3 5
LeP= 6 9
TP= 1W3 2w4
RS = 3 1
Attacken: 1 1
Parade 1 1
Ini 3 5

So zu den Werten AT=Attacke PA= Parade LeP = Lebenpunkte, TP 1W3 bedeutet das dieser bei treffer 1x einen Schaden von 1-3 macht, das monster jedoch 2x von 1-4 (effektiv möglich 2-8).

Kampfscript würde ungefähr so aussehen (Kampf-Gruppierung aufstellen)
1x 1 Krieger vs 1 Monster
1x 2 Krieger vs 1 Monster

oder User-Defined
1x 3 Krieger vs 1 Monster
1x - vs 1 Monster
(was bedeutet, das das monster einen der drei monster angreift, aber einfachhalber immer den selben)

Jeder Krieger hat 1 Attacke und 1 Parade pro Runde.

Allgemeines Kampfscript:

Begin:
Die Figur mit den höchsten iniwert hat den ersten schlag (Hier kann man noch einen Randomwert von 1W6 einrichten, der jede Runde neu ausgewürfelt wird)

Attacken:
Random(20) < AT = daneben
Ranodm(20) > AT = getroffen

Paraden:
Random(20) < PA Abgewehrt
Random(20) > PA getroffen

Treffer:
Krieger: LeP - (Random(3) - RS(des Gegners))
Monster: LeP - (2xRandom(4) - RS(des Gegner))

Jeder darf so häufig angreifen wie er Attacken hat pro runde, selbe gilt für die auch Verteidigung, welche jedoch nur bei einer geglücken Attacke verbraucht wird (verfällt dann aber am Ende der Runde).
Bei 3K vs 1M bedeutet dies, das, wenn alle treffen, das monster nur den ersten schlag abweren könnte.
Nach jeder Runde muß sich jeder Kampfteilnehmer neu Orientieren, um evtl neuen gegner zu bestimmen.

3 vs 1M und - vs 1M
1 Runde
Monster1 greift Krieger 2 an. 9 = Daneben.
Monster2 greift Krieger 1 an. 12 = Daneben.
Krieger1 greift Monster1 an. 10 = Daneben.
Krieger2 greift Monster1 an. 2 = Getroffen.
Monster1 versucht zu parieren. 2 = Ausgewichen
Krieger3 greift Monster1 an. 14 = Daneben.

2 Runde:
Monster1 greift Krieger 2 an. 3 Getroffen.
Krieger 2 versucht zu parieren. 12 - Nicht pariert
Krieger 2 erhält 3 Schadenspunkte. (1w4 = 2 2w4=4 zusammen 6 - RS 3= Schaden 3)
Krieger1 greift Monster1 an. 10 = Daneben.
Krieger2 greift Monster1 an. 2 = Getroffen.
Monster1 erhält 2 Schadenspunkte. (1w3 = 3 - RS 1= Schaden 1)
Krieger3 greift Monster1 an. 4 = Getroffen.
Monster1 bekommt durch seine starke rüstung keinen schaden (1w3 =1 - rs 1 = schaden 0)

usw.
Irgrendwann ist einer hin und der Sieger muß sich einen verbleibenen Gegner suchen.
Evtl kann man hier neben Gold auch Erfahrungspunkte verteilen und so die Sieger aufsteigen lassen. Wodurch sie in höheren Stufen dann stärker zuschlagen oder besser Parieren, mehr attacken haben usw.

Natürlich kann man viel Modifizieren. So kann einer eine andere Waffe tragen (anderer Schaden) oder Kampfreflexe bekommen (höhrer Iniwert) oder besser mit der Waffe umgehen können, per Talent (Höhere AT Wert). Patzer, Kampfmanöver, Zauber usw. können vieles verändern.

Wie man das macht.
Um in Delphi Worten zu sprechen. Um bei obrigen Beispiel zu bleiben, mußt für jeden Teinnehmer ein eigenes Objekt erstellen. Nicht zu vergessen, das einige werte Statisch sind (AT, PA) andere Varibel (LeP und INI), daher brauchen letzte natürlich zwei zeilen (z.b., max. LEP und akt. LeP)
Dann noch eine INI Tabelle (Wann darf Object handeln) und eine Zieltabelle (Welches Object wen angreift). Evtl kommt noch eine Entfernungstabelle hinzu, was alles wieder komplierter machen kann. Dann kann man auch gleich Waffenreichweite usw. hinzufügen (ups ich schweife ab)
In einen Browsergame empfehle ich dir, nicht mehr als zwei Spieler einen Kampf machen zu lassen. da dies doch sehr viel (häufig nutzlosen) Skripting zu folge hat (davon abgesehen, das du dafür sogen mußt, das die spieler gleiche chancen haben bis hin zum Con-Verlußt).

Für weiteren Ideen stehe ich gern zur verfügung.

Gruß dat Tala

PS: Bevor du fragst. Außer auf dem Papier existiert mein Spiel mangels Zeit nicht.

Master_RC 26. Nov 2005 23:12

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
boah, das ist jettz ein bisschen viel auf einmal :shock:
ich werds mal abspeichern und in ruhe durchgehen...

Natürlich werden nur max. 2 Spieler bei einem Kampf teilnehmen ;)

Ist aber ne recht coole Idee und so wie ich das sehe aus schön erweiterbar :)

Jetzt nur mehr eins:
Wie genau lese ich das nun aus der DB aus?
Ich hätte das schon gerne mit den Checkboxen bei Einheiten :)

Also was ausgelesen werden muss:
Checkboxen - welche Einheiten sollen mit?
und
Wie soll ich auslesen, welche Einheiten in einer Schlacht sind?

IDEE:
Ich starte einen Angriff:
Auswahl per Checkboxen (öh... wie geth das? ^^)
Dann werden die ids der Einheiten (auto_increment - id) in eien DB gespeichert.
Die DB "schlachten" könnte folgendermaßen aussehen:
id int(x) [um per Admin eine Schlacht rauszulöschen]
angreifer int(x) [id des Spieler, der angreift]
verteidiger int(x) [id des Verteidigers eben]
einheiten string(x) [alle ids der angreifenden Einheiten - Bsp.: "1,4,22,24,31,5"]

So...
wenn nun eine Schlacht stattfindet, wird einfach überprüft, welche Einheiten des Verteidigers grade eben zum Verteidigen bereit sind und die Einheiten des Angreifers werden halt so ausgelesen, dass ´einheiten´ exploded wird, etc...

Kann das so klappen oder hat jemand was besseres?

//EDIT:
Am Rande: Kennt jemand ein Opensource-Spiel, das diesen "Idealen" sntspricht? Wenn ja, kann man ja was rausgucken :stupid:

Binärbaum 27. Nov 2005 02:39

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Zitat:

Zitat von Master_RC
IDEE:
Ich starte einen Angriff:
Auswahl per Checkboxen (öh... wie geth das? ^^)
Dann werden die ids der Einheiten (auto_increment - id) in eien DB gespeichert.
Die DB "schlachten" könnte folgendermaßen aussehen:
id int(x) [um per Admin eine Schlacht rauszulöschen]
angreifer int(x) [id des Spieler, der angreift]
verteidiger int(x) [id des Verteidigers eben]
einheiten string(x) [alle ids der angreifenden Einheiten - Bsp.: "1,4,22,24,31,5"]

So...
wenn nun eine Schlacht stattfindet, wird einfach überprüft, welche Einheiten des Verteidigers grade eben zum Verteidigen bereit sind und die Einheiten des Angreifers werden halt so ausgelesen, dass ´einheiten´ exploded wird, etc...

Kann das so klappen oder hat jemand was besseres?

Der "explodierte" String gefällt mir nicht so recht. Man kann es zwar so machen, aber das optimale ist es nicht, da man den String jedesmal zerlegen muss uns somit die Datenbank-Abfragen erschwert werden. Statt dem String einheiten könnte man zwei zusätzliche Spalten nehmen, in denen IDs gespeichert werden:
int angriffID
int verteidigungID

Dann macht man eine zusätzliche Tabelle, nennen wir sie mal "Look-Up-Table", mit zwei Spalten:
int angriffID
int einheit

Der erste Wert entspricht der Spalte angriffID oder verteidigungID aus der Tabelle "schlachten". Der zweite Wert (einheit) ist eine eindeutige Nummer (ID) für eine bestimmte Einheit (die genauen Angriffswerte der Einheit könnten dann z.B. in einer weiteren Tabelle gespeichert sein).
Ein Ausschnitt daraus könnte wie folgt aussehen:
Code:
angriffID   einheit
1            1
1            4
1            22
1            24
1            31
1            5
2            7
2            9
...         ...
Somit weiß man dann, dass z.B. die Einheiten mit der ID 1,4,22,24,31,5 zum gleichen Angriff/Angriffsziel gehen.

Somit bekommt man z.B. über
SQL-Code:
SELECT * FROM look_up_table WHERE angriffID=x
alle Einheiten-IDs für den Angriff mit der Nummer x.
Nehmen wir also an, der obige Tabellenausschnitt stelle alle bisherigen Einträge dar, und ein Beispieldatensatz aus der Tabelle "schlachten" wäre
Code:
id angreifer verteidiger angriffID verteidigungID
77  23        45          1         2
Demzufolge hätte der Spieler mit der ID 23 den Spieler 45 angegriffen. Die angreifenden Einheiten sind unter der AngriffsID 1 zusammengefasst, laut zweiter Tabelle sind das also die Einheiten 1,4,22,24,31 und 5. Die verteidigenden Einheiten des anderen Spielers, zusammengefasst unter der verteidigungsID 2, sind die Einheiten 7 und 9.

Das wär's erstmal dazu. ;)

MfG
Binärbaum

Master_RC 27. Nov 2005 12:15

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Boah, du hast mich genau verstanden :)

Mir selbst hat der Explode auch nit gefallen, abe rich wär zu der Uhrzeit auf nichts anderes gekommen ^^'

So...
jetzt eigentlich nur mehr die letzten beiden Fragen:

1. Wie finde ich eine einmalige Schlachten-ID, die ich dann auch für die Einheiten in der look_up nehmen kann?

2. Wie führe ich nun dann den Kampf aus?
Also wie das thematisch funktioniert, hat ja Taladan schon erklärt, aber wie programmiere ich sowas? :gruebel:
Ihr müsst wissen, dass ich zwar schon länger progge (auch Browsergames) aber bisher nur Rollenspiele mit 1v1 Systemen :stupid: Also so ein Strategiespiel ist für mich absolut neues Gelädne :(

Taladan 27. Nov 2005 12:44

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Zitat:

Zitat von Master_RC
1. Wie finde ich eine einmalige Schlachten-ID, die ich dann auch für die Einheiten in der look_up nehmen kann?

Meistens sind DB mit PHP ja MySQL, diese haben ein Auto_Inc feld. Jede Schlacht bekommt eine Kennung. Das wäre in einer weiteren Tabelle fein. Dort kannst du dann auch für später das ergebnis hinpacken. Diese Kennung packst du dann in dein Look-Up-Table. Damit hast du gleich zwei dinge auf einmal. 1. deine Uniquire-ID und zweites eine Art Logbuch. So wollte ich es zumindest machen.

Zitat:

Zitat von Master_RC
2. Wie führe ich nun dann den Kampf aus?
Also wie das thematisch funktioniert, hat ja Taladan schon erklärt, aber wie programmiere ich sowas? :gruebel:
Ihr müsst wissen, dass ich zwar schon länger progge (auch Browsergames) aber bisher nur Rollenspiele mit 1v1 Systemen :stupid: Also so ein Strategiespiel ist für mich absolut neues Gelädne :(

Oh da fallem mir viele Möglichkeiten.
1. Automatiesiert: Die einfachste ist, es automatisiert machen zu lassen (Der Server bestimmt die Handlung). Bedeutet der Spieler erhält am Schluß nur eine Auswertung des Schlachtenverlaufs (wie bei meinen vorherigen Posting). Dieses kann man über Formeln und Proceduren in PHP lösen.
Die anderen Möglichkeiten sind nur möglich, wenn beide Teilnehmer eingeloggt sind. Hier muß man zusätzlich auf evtl Con-Lost achten.
2. Ein Kampfscreen, halbautomatiesiert: Eine Quasigegenüberstellungsanzeige. Hier kann der Spieler den Kampfablauf im vorfeld der Runde bestimmen, was er mit seinen Einheiten macht. Diese werden dann Automatisch im Inizeitraum ausgeführt. Jeder Spieler hat eine bestimmte Zeit seine Befehle für die Runde zu gehen.
3. Ein Kampfscreen, manuell: Eine Art Kampffeld wird beiden Teilnemern angezeigt. Ähnlich einen Schachbrett (wobei hier 6eck-Felder eher die richtige Wahl ist). Abwechselnd darf jeder in seiner Ini-Phase seine Einheitenbefehle bestimmen. (Gehen, Angreifen, Zaubern). Jeder spieler hat eine bestimmte Zeit seine befehle pro Einheit zu geben.

Am leichtesten ist natürlich Nr. 1 zu scripten. Hier gäbe es noch eine Abwandlungsmöglichkeit, das jede Einheit eine art Kampfscript vom Spieler bekommt. Magier z.b. erst starke Zauber, dann Schwache, dann Kämpfen. usw. Ein Kampfscript ist aber fast genau so schwer zu scripten wie Nr.2, daher wähle hier lieber Nr.2
Am schwirigsten ist Nr. 3. Was ich rein über PHP eher als nahezu unmöglich ansehe (nicht so ASP.Net, hier sehe ich es eher als Herausforderung).
Da mich dieses Thema sehr interessiert, kannst du dich auch gern per ICQ an mich wenden.

Gruß Marco

PS: Wer P&P RPG spielt, merkt, das sich fast jedes Computer-Spiel (mit Verstand), sei es Rollenspiel, Ego-Shooter oder Strategie, ein wenig nach diesen oder jenen RPG-Schema orientiert. Allein Wertveränderungen und Geschwindigkeiten (und damit die dahinterliegenden Formeln) werden häufig intern ähnlich gehandelt. Im laufe der Zeit haben sich natürlich andere Wege gebildet, aber die Grundzüge sind fast überall halt ans RPG angelehnt.

Master_RC 27. Nov 2005 12:47

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Ja, schon klar, wie das aussehen soll, das Kampfscript, nur wie soll das in PHP aussehen? Also dass zwei Einheiten mit drei kloppen, etc? (Variante 1)

So...
die Unique-ID per auto_increment ist mir auch klar, nur wie kann ich dann bereits beim Eintragen wissen, wie die lautet? Kann man die irgendwie sogar gleich ebstimmen?

Binärbaum 27. Nov 2005 17:13

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Zitat:

Zitat von Master_RC
So...
die Unique-ID per auto_increment ist mir auch klar, nur wie kann ich dann bereits beim Eintragen wissen, wie die lautet? Kann man die irgendwie sogar gleich ebstimmen?

Das Autoincrement zählt ja einfach nur eins weiter, vom letzten/ höchsten Index an gerechnet. Wenn man also zum letzten Wert eins dazuaddiert, hat man die Autoincrement-ID schon.
Es gibt, glaube ich, sogar eine Funktion, die sowas (oder zumindest etwas ähnliches) macht: mysql_insert_id.

Zitat:

mysql_insert_id() liefert die ID, die bei der letzten INSERT-Operation für ein Feld vom Typ AUTO_INCREMENT vergeben wurde.
MfG
Binärbaum

Taladan 27. Nov 2005 17:48

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Zitat:

Zitat von Master_RC
So...
die Unique-ID per auto_increment ist mir auch klar, nur wie kann ich dann bereits beim Eintragen wissen, wie die lautet? Kann man die irgendwie sogar gleich ebstimmen?

In dem du zwei Tabellen machst.
- Schlacht
- Members

Schlacht
ID (autoInc)
Agressor
Verteidiger
Timestamp (wichtig)

Hier selectest du nach Timestamp, Agressor udn Verteidiger (die du in eienr Variable zum suchen abspeichern solltest). und ließt dann die ID aus.

Memnbers
ID (autoInc)
Schacht_ID
Einheit
Zugehörtigkeit

Zitat:

Zitat von Master_RC
Ja, schon klar, wie das aussehen soll, das Kampfscript, nur wie soll das in PHP aussehen? Also dass zwei Einheiten mit drei kloppen, etc? (Variante 1)

Zwei Möglichkeiten sehe ich. Beide mit viel Aufwand verbunden, da du ein wenig die Objekte nachsimulieren mußt. Probiere das ganze erst einmal als 1vs1 und arbeite dich dann vor. Ich kann in kurzer Zeit unmöglich ein komplettes Script bieten, doch hier ein paar Ansätze.

1. Mehrdimensionale Arrays:
So kann man leicht quasiObjecte erschaffen.
XML-Code:
$array = array ("Angreifer" => array ("AT" => 5, "PA" =>3, "LeP" => 12 usw.)
$array = array ("Verteidiger" => array ("AT" => 5, "PA" =>3, "LeP" => 12 usw.)

Code:
while ($array[Angreifer,3] or $array[Verteidiger,3]) >= 0 {
  dein kampfscript
}
So kannst du Die arrays fast als werte wie objecte verwenden.
Statt arrays kann man auch Classen verwendne und dann OOP programmieren.
Weitere infos über Arrays, Classen und php findest du hier http://www.selfphp.de/funktionrefere...onen/index.php

2. Per DB:
Schwachsinn, aber auch möglich. Eine eigene Tabelle erstellen, wo du die werte Schritt für schritt änderst.

Master_RC 30. Nov 2005 17:55

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
warum bin ich eigentlich nicht selbst drauf gekommen? :?

Sehr vielen Dank!
Ich werds mal genau so probieren, nur noch 1 Problem dazu :-D
Wenn ich so alle Einheiten in nem Array hab, wie ändere ich dann dazu die Einträge in der Datenbank? ^^
Also bei mir sollte dann der Array wie folgt aussehen:
$angreifende_Einheiten = array("Einheit1" => array(....),
"Einheit2"=> array(.....), etc.)

Dabei sollte man auch beachten, dass Einheiten sterben können, also dann aus der DB gelöscht werden sollen...


Mit dieser Frage sollte dann eigentlich das Thema geklärt sein...

Taladan 30. Nov 2005 21:34

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Kurze Antwort da schon viel zu spät umd zu denken ;-).

Wenn der Kampf beendet, also die eine Seite keine Lebenden mehr hat, dann löscht du die einfach per SQL-Delete Befehl, da ja die meisten DB´s SQL fähig sind.
SQL-Code:
Delete * from 'Einheiten' where ID = XYZ
Die ID muß dann auch wieder aus den Array gelesen werden (also ein weiterer Punkt im Array wobei du auch bei PHP >5.0 ein Array of TObject machen kannst). Es gibt ein feines Programm, PhpMyAdmin. Dieses kann dir einen entsprechenden Befehl quasi vordefinieren, den du dann nur noch in dein Programm implementieren und mit den Variablen editieren. Dieses Programm funktioniert nur auf PHP basierende Server mit MySQL als DB. (Was ja die Standartkombie ist)
Zu finden hier
http://www.phpmyadmin.net/home_page/index.php

Master_RC 4. Dez 2005 12:29

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
also gut, ich hab mich mal über den letzten tagen mal wieder dran gesetzt und hab jetzt eigentlich alles bis auf eins:

Wie lege ich nun fest, welche Einheit mit welcher kloppt?
Bzw. wenn 5 gegen 4 kämpfen, dass eine Einheit gegen 2 antritt...

Hab mir da schon viel ausgedacht, was aber immer schief ging... :(

Taladan 4. Dez 2005 15:12

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Ich würde ungefähr so vorgehen.

Als erstes bestimmen, welche Seite die Größere ist. dann die größere Seite nach und nach einen Gegner geben. Wenn die Kleienere am schluss ist, dann wieder von vorne. Damit werden immer die ersten mehrfach angegriffen. Mal einen beispel mit 3:8

3 < 8

Seite 2 vs Seite 1
1 1
2 2
3 3
4 1
5 2
6 3
7 1
8 2

Oder alternativ mit einen zufallsgenerator verteilen. Das bringt auch mehr ähm Kampfrealität.


Gruß

Master_RC 7. Dez 2005 11:48

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Gut, natürlich wäre ein Zufallsgenerator am Einfachsten :)
Aber mein Spiel sollte diesmal mit Qualität glänzen ;)

Also...
Das mit dem "der Reihe nach" mach ich wahrscheinlich mit ner WHILE-Schleifer, oder? :gruebel:

Jetzt ist es natürlich so, dass ich ja ein kleines Ekel bin und natürlich das mit dem Zuffi haben will :mrgreen:

So...
Eigentlich einfach:
Einheit[greiftEnheitenIDan] = random(maxGegneranzahl)

So...
Jetzt überkommt mir, dass es aber ein "unberechenbarer Zufall" ist, also manche Einheit wird nicht angegriffen!
Wie sollte ich das verhindern?


(So... jetzt wäre mir eine Idee gekommen, was jedoch mit der Spielidee zu tun hat: Durch irgendein bestimmtes Ereignis - Geld, "Ausruhen-Option", etc. - könnte man ja bestimmen, ob es Zufall- oder Reihenkampf ist ;) tut jetzt aber nichts zur Sache ^^)

Airblader 7. Dez 2005 12:18

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Du könntest neben MaxAnzahl auch MinAnzahl machen.
Also statt

bla = Random(MaxZahl);

->

bla = Random(MaxZahl + MinZahl) - MinZahl;

air

Master_RC 9. Dez 2005 17:01

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Zitat:

Zitat von Airblader
Du könntest neben MaxAnzahl auch MinAnzahl machen.
Also statt

bla = Random(MaxZahl);

->

bla = Random(MaxZahl + MinZahl) - MinZahl;

air

Da gibts leider immernoch unnütze Einheiten :(

Beispiel: 5 gegen 5

Die Würfel der angreifenden fünf wie folgt bei Random:

2
3
4
4
2

==> 5 und 1 werden nicht angegriffen :(

Taladan 10. Dez 2005 15:10

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Dann setze als erstes 1 vs 1. und erst bei den überzähligen deine Randomschleife

Master_RC 11. Dez 2005 17:58

Re: [PHP] Kämpfe bei Browsergames mit verschiedenen Einheite
 
Zitat:

Zitat von Taladan
Dann setze als erstes 1 vs 1. und erst bei den überzähligen deine Randomschleife

gut, ich schätz mal, dass ich es dann wohl mal so versuchen werde :)

ich schätze auch, dass das aussehen des Einheitenarrays dann so stimmen sollte :

$angreifende_Einheiten = array("Einheit1" => array(....),
"Einheit2"=> array(.....), etc.)

wenn nicht, bitte melden ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz