php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
Alt 22.04.2011, 16:22  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Es geht ja nur darum, wieviel Spielzeit in einer bestimmten Spanne Realzeit vergeht... völlig egal, wie hoch oder niedrig man diese Beziehung definiert. "Echtzeit" heisst doch nichts anderes, als die Spielzeit synchron mit der Realtzeit laufen zu lassen... in Strategiespielen vergehen aber in 5 Minuten Realzeit vielleicht 3 Monate Spielzeit.

Zitat:
Der Hausbau als Gegen-Beispiel - dauert eine halbe Stunde, alle fünf Minuten wächst Eigenschaft X um einen Punkt.
Du unterteilst auch nur 30 Minuten in 5 Minuten Schritte und legst fest, das in 6 5-Minutenrunden eine Gebäudestufe gebaut wird - nichts anderes habe ich auch getan, nur in einem anderen Verhältnis.

Zitat:
Wozu um alles in der Welt würde ich das jetzt in 1800 „Runden“ zerkrümeln wollen, ergibt doch kaum einen Sinn.
Weil man in der Zwischenzeit noch andere Dinge erledigen kann (z.B. quasi-Echtzeit mit seinen Truppen gegeneinander antreten).

Zitat:
Wenn ein Nutzer zum Zeitpunkt Start+4:59 zugreift, dann ist die erste Baustufe noch nicht abgeschlossen, ab Start+5:00 ist sie es.
Und für alle anderen, zwischen den „Bauabschnitten“ liegenden Zugriffspunkte sieht es genauso aus.
Und in der Zwischenzeit sagst du ihm 5 Minuten lang "Fortschritt bei 80%"?
Nein, du nimmst wieder die eingetragene Realzeit und rechnest genau aus, wieviel ganz aktuell zum Zeitpunkt des Zugriffs bereits fertig ist.. und der Benutzer refreshed seine Anzeige auch, um Fortschritt zu sehen.

Zitat:
Das kann zum Zugriffszeitpunkt ermittelt/berechnet werden - dazu muss aber ganz sicher nicht die eigentliche Aktion Hausbau explizit in 1800 einzelne „Schritte“ zerbröselt werden.
Richtig, aber man muss es wieder auf Spielzeit umrechnen, denn im Spiel heisst es nicht "Forschung abgeschlossen in x Sekunden", sondern in "Forschung abgeschlossen in x Monaten (Spielzeit)", um auch ein bischen beim Realismus zu bleiben, den ein Spiel mitbringen sollte.

Setz das Wort "Runde" einfach als virtuelle Definition von einer bestimmten Realzeitspanne, und lass das dann die Basiseinheit sein für alle Berechnungen der Spiele Engine... die neue Sekunde sozusagen.

Sid Meier's Civilisation ist ein das Parade Beispiel für Echtzeitstrategie, dort kann man die virtuelle Zeit entweder rasen lassen (pro Sekunde Realzeit vergeht 1 Jahr Spielzeit), man kann aber auch das Tempo selber drosseln, das Realzeit und Spielzeit 1:1 synchron laufen... dann hat man alle Zeit der Welt, seine Einstellungen vorzunehmen und wieder "vorzuspulen" um zu sehen, was so passiert. Und so durchlebt man einen ganzen Zivilisationszyklus in wenigen Wochen (von der Steinzeit ins Atomzeitalter)...
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 22.04.2011, 16:31  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zusatz: Worum es mir eigentlich geht ist, das man eine Definition zu treffen hat. Das bei Egoshootern wirklich "Runden" abgearbeitet werden ist natürlich Quatsch, dort laufen Realzeit und Spielzeit immer synchron - aber im Detail ist so etwas absolut wichtig, will man z.B. physikalische Gegenheiten im Computer simulieren:
Ein Schuss wird abgefeuert zum Zeitpunkt X von einer Position A. Richtung und Geschwindigkeit der Kugel sind bedeutend. Ziel B befindet sich aber in Bewegung von Position B, mit einer eigenen Geschwindkeit und Richtung. Man kann ausrechnen, ob die Kugel das Ziel trifft oder nicht, kennt man alle Variablen... und im Computer kennt man diese und kann, entgegen zur Realtiät, diese Variablen beeinflussen. Der Programmierer legt fest, wie schnell die Kugel fliegt, wie schnell sich eine Person in "seiner" Welt bewegen kann. Und sein Programm - seine Welt - folgt seinen programmierten Regeln (Physik).
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 22.04.2011, 16:48  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von lstegelitz Beitrag anzeigen
Du unterteilst auch nur 30 Minuten in 5 Minuten Schritte und legst fest, das in 6 5-Minutenrunden eine Gebäudestufe gebaut wird - nichts anderes habe ich auch getan, nur in einem anderen Verhältnis.
Eben - und um dieses Verhältnis geht es mir, und darum, dass nicht für alle Aktionen die Unterteilung gleich sein muss.

Zitat:
Weil man in der Zwischenzeit noch andere Dinge erledigen kann (z.B. quasi-Echtzeit mit seinen Truppen gegeneinander antreten).
Wer sich wo und in welchen Zeitintervallen getimed die Köpfe einschlägt, interessiert den Hausbau aber erst mal weniger.

Zitat:
Und in der Zwischenzeit sagst du ihm 5 Minuten lang "Fortschritt bei 80%"?
Wenn die Aktion Hausbau so definiert ist, wie ich sie im Beispiel definiert habe - ja, ganz genau, weil alles andere sonst gelogen wäre.

Zitat:
Richtig, aber man muss es wieder auf Spielzeit umrechnen, denn im Spiel heisst es nicht "Forschung abgeschlossen in x Sekunden", sondern in "Forschung abgeschlossen in x Monaten (Spielzeit)", um auch ein bischen beim Realismus zu bleiben, den ein Spiel mitbringen sollte.
Wenn für die Aktion Hausbau definiert ist, dass sie in einzelnen Stufen erfolgt, deren Fertigstellung jeweils eine bestimmte Zeitspanne dauert - dann wird das auch so und nicht anders angezeigt.

Dass du die eine oder andere Definition des Fortschrittes einer Aktion für „realistischer“ halten magst, hat mit der grundsätzlichen Technik überhaupt nichts zu tun.

In der Realität wird der Bauherr auch nicht für jeden auf der Baustelle eingeschlagenen Nagel den „Fertigstellungs-Status“ des Hauses um 0,0[...]001% erhöhen.
Nein, im Gegenteil - es werden bestimmte „Milestones“ definiert, und deren Erreichen wird im voraus zeitlich geplant und im Nachhinein mit dieser Planung abgeglichen.

Zitat:
Setz das Wort "Runde" einfach als virtuelle Definition von einer bestimmten Realzeitspanne, und lass das dann die Basiseinheit sein für alle Berechnungen der Spiele Engine... die neue Sekunde sozusagen.
Es ergibt trotzdem wenig Sinn, für einen Hausbau einen Fortschritt in Prozent auf Sekundenbasis zu definieren, wenn du so darauf bedacht bist, „realistisch“ zu bleiben, siehe oben.

Einen Fortschritt in Prozent rein zu Informationszwecken kann man ggf. zusätzlich angeben - aber eine gestaffelte Punktevergabe hat trotzdem ihre Berechtigung.
Ein komplett fertig gestelltes Hausdach bietet vielleicht einen bestimmten Schutzfaktor bei einem Angriff. Aber zu sagen, ein „zu 73,125% fertiggestelltes Haus“ bietet auch einen Schutzfaktor von 73,125% o.ä. ist kaum „realistisch“, sondern ganz trockene und langweilige Mathematik.


Aber, noch mal: Das sind eher Überlegungen hinsichtlich der Regeln bzw. Spielphilosophie - für die Implementierung haben die weniger Relevanz, wenn man so vorgeht, dass man Zeitintervalle im System hinterlegen kann, in denen etwas bestimmtes fertiggestellt/abgeschlossen wird.
Den Umfang dieses Zeitintervalls im Einzelfall für bestimmte Aktionen auf der kleinsten Basiseinheit „Sekunde“ zu setzen, ist möglich und denkbar. Aber es muss nicht pauschal für alle Aktionen so sein.
Zitat:
Sid Meier's Civilisation ist ein das Parade Beispiel für Echtzeitstrategie, dort kann man die virtuelle Zeit entweder rasen lassen (pro Sekunde Realzeit vergeht 1 Jahr Spielzeit), man kann aber auch das Tempo selber drosseln, das Realzeit und Spielzeit 1:1 synchron laufen... dann hat man alle Zeit der Welt, seine Einstellungen vorzunehmen und wieder "vorzuspulen" um zu sehen, was so passiert.
Für einen single player mode ist das OK.
Bei multi player muss der Zeitmaßstab aber für alle der gleiche sein, sonst haut das nicht hin.

Zitat:
Zusatz: Worum es mir eigentlich geht ist, das man eine Definition zu treffen hat.
Dann scheinen wir uns ja einig zu sein, trotz Verständigungsschwierigkeiten

Eine „Basiseinheit“ sollte es geben. Aber die stellt eben auch nur die Basis dar, und muss deshalb nicht für alles die kleinste Unterteilung darstellen.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 22.04.2011, 16:55  
Quu
Benutzer
 
Benutzerbild von Quu
 
Registriert seit: 01.04.2011
Beiträge: 32
PHP-Kenntnisse:
Fortgeschritten
Quu befindet sich auf einem aufstrebenden Ast
Standard

Habt ihr meinen Beitrag auf der letzten Seite überhaupt bemerkt?
__________________
"Das Unendliche ist weit, vor allem gegen Ende" - Alphonse Allais
Quu ist offline   Mit Zitat antworten
Alt 22.04.2011, 17:18  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von Quu Beitrag anzeigen
Habt ihr meinen Beitrag auf der letzten Seite überhaupt bemerkt?
Du meinst den, in dem du dich darüber beklagst, dass die meisten „ich will ein Browsergame programmieren“-Threads in Foren wenig gehaltvolles bieten, weil den Fragern noch die Grundlagenkenntnisse und darüber hinausgehenden Erfahrungen fehlen, um selber entsprechende Konzepte entwickeln zu können ...?

Nein, den habe ich nicht übersehen. Nur wo da jetzt der Unterschied zwischen dem, was du kritisierst, und dem, was du selber hier zeigst, liegen soll - das müsstest du mir bitte noch mal erklären.

Zitat:
Abgesehen davon hab ich jetzt verstanden, dass es rundenbasiert ist, aber wie bringt mich das weiter?
Keine Ahnung.
Von so unspezifischen Fragen erwarte ich generell kaum, dass sie jemanden weiter bringen

Zu deiner ursprünglichen Frage, nach Events und deren Abhängigkeiten, kamen doch schon mehrere direkt darauf bezogene Beiträge.
Was für ein Fazit du bisher aus diesen ziehen kannst, und welche Fragen ggf. noch offen sind - das musst doch in erster Linie du selber wissen.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 22.04.2011, 18:31  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zitat:
Das heisst, wenn ich das auf dem Rundenkonzept aufbauen würde, hätte ich bei einem Angriff anstatt einer Bewegungsrechnung & Kampfrechnung am Ende auch noch 1800 Zwischenschritte. Das will mir jetzt von dem Rechenaufwand her nicht wirklich gefallen.
Abgesehen davon hab ich jetzt verstanden, dass es rundenbasiert ist, aber wie bringt mich das weiter?
Insofern, als das du dein ursprüngliches Synchronisationsproblem nur auf diese Weise gelöst bekommst (indem dir bewusst wird, was Realzeit und Spielzeit bedeuten). Alle Aktionen eines Benutzers innerhalb eines bestimmten Zeitfensters können sich nur auf den Status zu diesem Zeitfenster beziehen. Eine Aktion, die zu spät eintrifft (Status hat sich zwischenzeitlich geändert), ist ungültig und wird verworfen.
Zitat:
Zitat von Quu Beitrag anzeigen
Wenn ich das ganze mit mehreren Datensätzen mache bekomme ich aber insofern Probleme als dass ich wenn ich eine Einheitenliste habe, dann angegriffen werde bei der alten Liste das Zeug update, ich bei der Neuen dasaber nicht getan habe dann aufeinmal alle Einheiten wieder da sind.
Genau darum geht es. Spieler A sieht noch eine Information, die längst veraltet sein könnte. Das darf nicht passieren, daher muss Spieler A im Falle eines Angriffs durch Spieler B benachrichtigt werden und die Chance bekommen zu reagieren. Man kann nicht einfach einen Spieler übergehen und am Anfang des nächsten Zuges sagen "Tut mir leid, deine Truppen wurden beim Angriff von Spieler B zwischenzeitlich vernichtet, ich hab nur vergessen dir zu sagen, das er angegriffen hat"

Das Spiel als solches muss also einer zeitlichen Synchronisierung folgen (das Leben geht weiter), Ereignisse können ausserplanmässig eintreten, müssen aber in den Zeitrahmen eingefügt werden. Beteiligte des Ereignisses müssen darüber informiert werden (Client-Update), so das jeder sich auf die neue Situation einstellen kann. Aktionen können nur anhand der aktuellen Situation ausgeführt werden, die Übrprüfung der Gültigkeit bleibt aber dem Server überlassen. Er ist "Gott" sozusagen und muss jedem sagen, was Sache ist



@ChrisB:
Zitat:
Dann scheinen wir uns ja einig zu sein, trotz Verständigungsschwierigkeiten
Ja, der Meinung bin ich auch nachdem ich deinen Post gelesen hatte.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 24.04.2011, 13:09  
Erfahrener Benutzer
 
Registriert seit: 03.08.2010
Beiträge: 300
PHP-Kenntnisse:
Fortgeschritten
Asterixus sorgt für eine eindrucksvolle AtmosphäreAsterixus sorgt für eine eindrucksvolle Atmosphäre
Asterixus eine Nachricht über Skype™ schicken
Standard

Die Diskussion ob Echtzeit oder nicht ist irrelevant. Wichtig ist nur der Zeitpunkt eines Events.

Wenn du nicht die Möglichkeit hast ein Programm im Hintergrund laufen zu lassen, dass die Events zum punktgenauen Zeitpunkt auszuführen, wirst du die Events bei jedem User-Seitenaufruf (+ eventuelle Cronjobs) berechnen müssen.

In der ersten Version meines Browsergame hat es eine Tabelle "events" gegeben.
In der wurden alle Möglichen "Events" eingefügt.

Code:
table events:
  event_id
  event_type
  type_event_id
  time
  done
Bei jedem Aufruf wurden erstmal alle Events, die bis zum aktuellen Zeitpunkt ausgeführt werden mussten und noch nicht ausgeführt wurden, chronologisch geordnet selektiert.

Neben der `events`-Tabelle gab es noch `troop_movement_events`, `building_events`, `merchant_events` usw.
Jede dieser Tabellen entsprach einem event_type aus der Haupt-Event-Tabelle und der type_event_id war hier mit der Event-Tabelle verbunden.

Es wurde nicht analysiert, welche Daten in Verbindung mit welchen anderen Daten standen, es wurden für alle aktuell berechneten Events die nötigen Daten jedes Mal berechnet. Das klingt zwar serverlastig, ist es aber bei < 830 Events pro Minuten überhaupt nicht.

Worauf auf jeden Fall aufgepasst werden muss sind Transaktionen. Wenn ein Problem auftritt, sofort Exception throwen und Fehlerbehandlung machen + rollback. Ist in 6 Monaten Laufzeit bei 230 aktiven Benutzern nur dreimal (einmal war's meine Schuld) aufgetreten, aber es rettet Leben, bzw. in dem Fall Truppen
Asterixus ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] jquery fullcalendar events nach oben verschieben Thorus JavaScript, Ajax und mehr 2 24.01.2011 11:38
Scriptsuche Anmeldetool für Events JK_89 Scriptbörse 1 23.12.2010 13:03
MySQL Events automatisch starten Todeshügel Datenbanken 2 10.11.2010 17:40
Select Feld: Reihenfolge ändern und auswerten monk JavaScript, Ajax und mehr 3 17.02.2010 20:05
Reihenfolge der Tabellen-Spalten durch User wählbar? RoDa PHP Tipps 2006 4 18.06.2006 16:40
Falsche Reihenfolge Chrescht PHP Tipps 2006 7 26.01.2006 18:15
[Erledigt] Daten aus MySQL in einer zufälligen Reihenfolge ausgeben PHP-Fortgeschrittene 2 31.07.2005 12:42
[Brainstorming] Userdefinierte Reihenfolge PHP Tipps 2005-2 14 06.07.2005 18:31
sortierverfahren mit selbst festgelegter reihenfolge PHP Tipps 2004-2 2 18.12.2004 03:04
templates werden in der falschen reihenfolge angezeigt PHP-Fortgeschrittene 5 29.10.2004 04:16
template blöcke werden in falscher Reihenfolge angezeigt PHP Tipps 2004 4 28.10.2004 16:42
template blöcke werden in falscher reihenfolge angezeigt! PHP Tipps 2004 0 26.10.2004 17:39
[Erledigt] Bestimmte Zahlen in zufälliger Reihenfolge ausgeben PHP Tipps 2004 12 15.09.2004 20:04
[Erledigt] Reihenfolge des Resultset bei Verwendung von ..WHERE a IN () Datenbanken 3 29.07.2004 16:02
post reihenfolge im apboard ew2 (v2.02) PHP Tipps 2004 2 01.07.2004 09:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
wieviel zeit vergeht von der ausschreibung bis zur ersten einstellung, jquery reihenfolge von events beeinflussen?

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:34 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum