• Aktualisierte Forenregeln

    Eine kleine Änderung hat es im Bereich Forenregeln unter Abschnitt 2 gegeben, wo wir nun explizit darauf verweisen, dass Forenkommentare in unserer Heftrubrik Leserbriefe landen können.

    Forenregeln


    Vielen Dank

Browsergame entwickeln-aber wie?

Reder

Spiele-Kenner/in
Registriert
06.12.2004
Beiträge
4.862
Reaktionspunkte
8
Hallo
ich und ein Kumpel von mir wollen ein Browsergame machen. Es wird ein Fußballbrowsergame nach unseren Vorstellungen die folgend sind:

Ligasystem ( 1. Liga, 2.Liga, 3. Liga, 4. Liga)
Pokalsystem
Einstellbare Trainingsmethoden
Finanzen ( Stadionbau, Kartenpreise, Sponsoren, Gehälter, Stadionumfeld)
Transfermarkt ( Wir wollen die Transfers überwachen nicht das ne Mannschaft nur Spieler verkauft an eine bestimmte Mannschaft)

Das ganze wollen wir nach und nach aufbauen ( mehr hinzufügen) Das ganze soll halt nicht Super duper wie der FM von EA werden.
Wir spielen den 2minman und finden das System gut aber wollen unser eignes Ding machen mit unseren Ideen und es soll kein Abgekupfertes Spiel werden.

Was für Programme brauchen?
Wir sind Neulinge auf dem Gebiet und wollen klein anfangen und sind lernwillig :-D ;-)


Würde mich über Antworten freuen =)
 
Reder am 23.06.2007 23:05 schrieb:
Hallo
ich und ein Kumpel von mir wollen ein Browsergame machen. Es wird ein Fußballbrowsergame nach unseren Vorstellungen die folgend sind:

Ligasystem ( 1. Liga, 2.Liga, 3. Liga, 4. Liga)
Pokalsystem
Einstellbare Trainingsmethoden
Finanzen ( Stadionbau, Kartenpreise, Sponsoren, Gehälter, Stadionumfeld)
Transfermarkt ( Wir wollen die Transfers überwachen nicht das ne Mannschaft nur Spieler verkauft an eine bestimmte Mannschaft)

Das ganze wollen wir nach und nach aufbauen ( mehr hinzufügen) Das ganze soll halt nicht Super duper wie der FM von EA werden.
Wir spielen den 2minman und finden das System gut aber wollen unser eignes Ding machen mit unseren Ideen und es soll kein Abgekupfertes Spiel werden.

Was für Programme brauchen?
Wir sind Neulinge auf dem Gebiet und wollen klein anfangen und sind lernwillig :-D ;-)


Würde mich über Antworten freuen =)

Also ihr seid Neulinge in dem Berich sagst du!!!!!!
Und dann direkt mit sowas anfangen!!!! Viel Spaß!!! :-D
Macht es zum Beispiel mit Visual Basic oder Delphi!!!!
 
In gewisser Weise muss ich Riddick Recht geben. Für Programmiereinsteiger ist ein Browsergame ein sehr ambitioniertes Projekt, da hier genau mehrere Fallstricke gleichzeitig zusammenkommen:
* die eigentliche Programmlogik und Verwaltung des Spiels
* die Client/Server-Struktur eines Browsergames (Stichwort Netzwerkcode)
und
* die Programmsicherheit (Stichwort Manipulationsschutz).
Das ist keinesfalls trivial, und man sollte sich vor Augen führen, dass schon in "relativ einfachen" Browsergames wie OGame oder Horizon schon etliche Zehntausend Zeilen Code stecken.

Mein Rat wäre erst mit etwas Kleinem (und damit meine ich wirklich Kleinem) anzufangen, va wenn man nicht die notwendigen Programmierkenntnisse mitbringt. Also sowas in Richtung "Snakes" Klone oder eine ganz einfache "Worms" Kopie. Der Grund ist ganz einfach: wenn man ein zu schwieriges Projekt angeht, kann es SEHR leicht zu Frustreaktionen kommen wenn was nicht klappt, und man verliert sehr schnell die Lust/das Interesse daran.

Ich würd einfach empfehlen sich mal auf Coding4Fun umzuschauen. Da gibt's - mMn - sehr gute Tutorials und Trainingseinheiten, mit denen man ein paar Grundlagen zum Thema Spiele beigebracht bekommt. Auch kann man sich die entsprechenden Versionen von Visual Studio (VB oder C#) kostenlos ziehen.

Und definitiv erstmal mit lokalen Programmen anfangen, also nix über Netzwerk o.ä. Das sind auch nur unendliche Frustquellen (ich sprech da aus Erfahrung... :S ) die ne Menge Nerven kosten können. ;)
 
Es stimmt zwar was meine beiden Vorredner gesagt haben, dass ein Browsergame nicht gerade der beste Einstieg ist, aber ich finde wenn man ein Ziel vor Augen hat das einen richtig interessiert dann lernt man viele Dinge schneller und besser (Gegenbsp: Rate die Zahl zwischen 1 und 10 find ich jetzt nicht so spannend um programmieren zu lernen)

Was ihr braucht ist jemand der euch erklärt was ihr machen müsst, welche Dinge ihr euch dazu aneignen müsst und wo ihr Infos dazu findet.
"Alles" was ihr (erklärt) braucht ist:
- Eingerichteten Webspace mit der Möglichkeit Programme auszuführen (evt cronjobs)
- Erklärung einer Programmiersprache inkl Seiten wo man diese leicht/an Bsps lernen kann, Hilfe bei den ersten Schritten (evt erstellen der Umgebung die gleich die Spielerinteraktion macht)
- Interaktion Spieler <-> Programm (login, kaufen, verkaufen, trainieren etc recht leicht z.B. die get Methode und C; Ausgabe über HTML)
- Speicherung/Aufbau der Spielerdaten
- Aufruf/Aufbau des eigentlichen Programms (also des Programms das die neue Runde berechnet)

Die Idee das Spiel öffentlich zu machen solltet ihr vielleicht erstmal weit nach hinten schieben, wenn .. na ja sagen wir lieber falls ihr eine spielbare Version habt könnt ihr euch auch mit der Sicherheit des Systems beschäftigen.

Also wie gesagt sucht euch jemand (oder mehrere) der sich mit den Dingen oben auskennt (Freunde, Bekannten, Verwandte) und viel Zeit hat sie euch zu erklären/euch zu helfen und ich sehe da durchaus Chance für eine Realisierung. Sollte ihr niemand finden, dann wird das ganze wesentlich schwieriger und ihr werdet um ein Selbststudium der Themen Programmieren (HTML, C!?), CGI (z.B.) und Datenbanken nicht herumkommen.

sers
Wk
 
Wookie23 am 26.06.2007 13:33 schrieb:
[...] Programmieren (HTML, C!?), CGI (z.B.) und Datenbanken [...]
Und genau deswegen würd ich für so ein Projekt bei "rudimentären" Grundkenntnissen nicht C/C++ nehmen. C/C++ ist eh so ein Kapitel für sich das ich am liebsten ganz schnell irgendwo versenken würde wo es niemand jemals wieder rausholen kann.

Das fängt bei Zeigern an, geht über die Präprozessoranweisungen, bis hin zur manuellen Speicherverwaltung (new und delete, anyone?). MMn ist Java oder C# (oder irgendeine andere .NET Sprache) um Längen besser geeignet, allein wegen der managed environment und der daraus resultierenden geringeren Fehleranfälligkeit gegen Pufferüberläufe und falsche Verzeigerungen.
 
Ra-Tiel am 26.06.2007 22:24 schrieb:
C/C++ ist eh so ein Kapitel für sich das ich am liebsten ganz schnell irgendwo versenken würde wo es niemand jemals wieder rausholen kann.
Irgendwer würde es sicher wiederfinden ^^

Ra-Tiel am 26.06.2007 22:24 schrieb:
Das fängt bei Zeigern an, geht über die Präprozessoranweisungen, bis hin zur manuellen Speicherverwaltung (new und delete, anyone?).
Es stimmt zwar das oben genannte Sachen recht kompliziert sind, aber auch das man sie für ein Browsergame kaum braucht. Ok man braucht vielleicht Zeiger um Werte zu vertauschen und das Präproz #include, aber (z.B.) durch Vorgabe einer maximalen Anzahl Spieler pro Team/insgesamt kann man vermutlich sogar die Speicherreserveriung umgehen .. (auf jeden fall in einer ersten Version)
 
Wookie23 am 27.06.2007 10:57 schrieb:
Irgendwer würde es sicher wiederfinden ^^
Das befürchte ich leider auch. ^^

Wookie23 am 27.06.2007 10:57 schrieb:
Es stimmt zwar das oben genannte Sachen recht kompliziert sind, aber auch das man sie für ein Browsergame kaum braucht. Ok man braucht vielleicht Zeiger um Werte zu vertauschen und das Präproz #include, aber (z.B.) durch Vorgabe einer maximalen Anzahl Spieler pro Team/insgesamt kann man vermutlich sogar die Speicherreserveriung umgehen .. (auf jeden fall in einer ersten Version)
Das mit Zeigern und Präprozessoranweisungen könnte vermutlich sogar hinhauen, aber bei der Speicherverwaltung hab ich doch arge Bedenken.

Es reicht ja schon in irgendeiner Schleife (for, while, ...) ein neues Objekt zu erzeugen und zu vergessen das vor Ende der Schleife zu entfernen, schon hast du ein derbes Speicherleck produziert das dem Server fett ans Schienbein tritt. Und das ist ja nicht unbedingt auf triviale Weise zu finden, da es ja fehlerfrei kompiliert.

Auch bleibt das Problem von Pufferüberläufen bestehen, wenn du die Standardsprachmittel einsetzt und nicht noch extra exzessive Typ- und Größenprüfungen einbaust. Wenn du da nicht aufpasst und auch nur eine Exception durchgeht kann dir das das ganze Game flachlegen.

Weiterhin finde ich dass man mit C/C++ keinen sauberen Programmierstil lernt, genau weil man so viel rummurksen kann (Stichwort Zeigerarithmetik und Typcasts). Das kann auch wieder zu Speicherlecks und anderen Problemen führen, vor allem wenn der Programmierer so "kreativ" wird und eine Speicherreservierung als int castet...
Code:
int m = (int)malloc(500);
:B

Im Gegensatz zu .NET und Java besteht auch bei C/C++ keinerlei Möglichkeit den Code von automatisierten Tools auf Speicherlecks und Performancekrücken abklopfen zu lassen - zumindest hab ich noch kein Tool dafür gesehen (auch wenn das hier wohl eher unwahrscheinlich ist dass es passiert - diese Tools können ne ganze Stange Geld kosten ^^). Aber das zeigt auch wieder mMn das Problem, dass in C/C++ der Programmierer an viel zu vielen Stellen selber Hand anlegen muss wo er es eigentlich gar nicht mehr machen sollte.

Wo ich schonmal am meckern bin ( :D ) ... auch das Argument, dass man nur in C/C++ hardwarenah (also zB Gerätereiber) programmieren kann, ist nur ein Gerücht. Es gibt genug Beispiele (zB JX, JNode, oder Singularity) die zeigen, dass man Treiber auch mit Java oder C# schreiben kann.

Performance ist auch kein Grund mehr. Vor etlichen Jahrzehnten als Großrechner 4mb RAM und 16MHz hatten war es natürlich notwendig zu optimieren wo es bloß ging - vor allem weil die Compiler noch alles andere als fortschrittlich waren. Aber heutzutage sind die Rechner so leistungsfähig, dass es i.d.R keinen spürbaren Unterschied machen wird ob ein kleines Programm in C++ oder in C# geschrieben wurde.

Große Projekte (so gut wie alle umfangreichen und grafikintensiven Spiel zum Beispiel) wird man aber (leider?) immer noch weiterhin in C++ programmieren, einfach weil diese Sprache dafür am verbreitetsten ist. Die Belohnung dafür sind halt dann Sachen wie der Speicherbug und die Speicherlecks bei Gothic 3... ;)

Außerdem gibt es Compiler die in der Lage sind die .NET MSIL oder den Java Bytecode in nativen x86 Maschinencode zu kompilieren - damit geht der Geschwindigkeitsvorteil von C++ dann wirklich in den Keller.

(Wobei mich mal wirklich interessieren würde, ob man ein größeres Projekt mit zB C# und einem entsprechenden Compiler MSIL -> Maschinencode realisieren könnte. :-o )

Um mal wieder auf das Thema zurückzukommen... PHP wär natürlich auch noch eine Option. Der OP kann sich ja mal diese PHP-Tutorialliste zu diesem Thema durchschauen. Vielleicht sagt euch ja PHP mehr zu. :)
 
Ich bin mir nicht sicher aber ich glaube auf heutigen Systemen werden "vergessene" Objekte automatisch aus dem Speicher entfernt. Und mein Ansatz würde eh darin bestehen, ganz auf Speicherreservierungen zu verzichten und lieber groß dimensionierte Arrays zu verwenden (100 Buchstabe für Teamname reicht ja), aber du hast recht man muss in C/C++ mit den char* aufpassen (obwohl man vielleicht auch einfach die String nehmen kann/nehmen sollte).

Hier ist halt die Frage will man das Programmieren möglich gut (im Sinne von gutes Verständnis vom Programmieren und wie man die Dinge richtig macht (Namenskonventionen, richtig kommentieren)) lernen oder will man nur was programmieren (und sich evt erst später genauer damit befassen) ..

.. lassen wir die Diskussion lieber und warten ob Reder sich nochmal dazu äußert was jetzt rausgekommen ist/was er jetzt zu tun gedenkt.
 
Wookie23 am 29.06.2007 13:54 schrieb:
Ich bin mir nicht sicher aber ich glaube auf heutigen Systemen werden "vergessene" Objekte automatisch aus dem Speicher entfernt.
Das Problem ist: wie soll das Betriebssystem feststellen, wann ein Objekt wirklich vergessen wurde, oder einfach nur im Augenblick nicht benötigt wird? Der Punkt ist eben, dass reines C/C++ keinen Garbage Collector mitbringt, also reservierten Speicher von alleine nicht freigeben kann.

Das Betriebssystem kann halt die verwendeten Pages des Programms in die Swap-Partition bzw das Pagefile verschieben, wenn auf diese lange kein Zugriff erfolgte, aber mehr geht nicht, da sonst das OS ja versehentlich ungespeicherte Daten des Programms wegschmeißen könnte.

Klar, wenn das Programm dann beendet wird räumt das OS schon allen verwendeten Speicher wieder auf. Aber vorher sieht es da halt echt mager aus. Deswegen auch mein Plädoyer für eine Sprache mit einer verwalteten Umgebung wie Java oder .NET, wo das Aufräumen von Objekten automatisch passiert und nicht dem Programmierer überlassen werden muss.

Wookie23 am 29.06.2007 13:54 schrieb:
Und mein Ansatz würde eh darin bestehen, ganz auf Speicherreservierungen zu verzichten und lieber groß dimensionierte Arrays zu verwenden (100 Buchstabe für Teamname reicht ja), aber du hast recht man muss in C/C++ mit den char* aufpassen (obwohl man vielleicht auch einfach die String nehmen kann/nehmen sollte).
Bei festen Arrays hast du aber das Problem von Pufferüberläufen. Unter C/C++ muss ja ein character Array immer mit "\\0" enden. Wenn man da nicht aufpasst und zB die Längenprüfung falsch oder gar nicht implementiert, knallt es gewaltig sobald einer einen Namen mit genau 100 Zeichen eingibt (weil ja "\\0" nicht mehr ins Array passt).

Strings sind schon viel besser, das stimmt allerdings. :)

Wookie23 am 29.06.2007 13:54 schrieb:
Hier ist halt die Frage will man das Programmieren möglich gut (im Sinne von gutes Verständnis vom Programmieren und wie man die Dinge richtig macht (Namenskonventionen, richtig kommentieren)) lernen oder will man nur was programmieren (und sich evt erst später genauer damit befassen) ..
Mein Dozent bei dem ich Programmieren gehört hab hat immer gesagt: "VHIT geht nur bei kleinen Programmen die sehr einfache Strukturen haben. Bei allem was größer als vielleicht 200 Zeilen ist, geht das schief."

VHIT = Vom Hirn Ins Terminal. ;)

Daher würd ich schon vorschlagen die Sache etwas strukturierter anzugehen, und auch erst ein paar Trockenübungen zu machen was Datenstrukturen, Programmdialoge, usw angeht bevor auch nur eine Zeile gecodet wird.

Wookie23 am 29.06.2007 13:54 schrieb:
.. lassen wir die Diskussion lieber und warten ob Reder sich nochmal dazu äußert was jetzt rausgekommen ist/was er jetzt zu tun gedenkt.
Jo. Prinzipiell ist das schon zu machen, ist halt nur eine Frage des Aufwands.

Man sollte auch die Technologie die man verwendet genau anschauen:

PHP
(+) läuft auf so gut wie allen Servern
(+) große Anzahl Bibliotheken für die verschiedensten Funktionalitäten.
(+) "relativ" sicher was Typen angeht, da Variablen dynamisch typisiert werden, dh es wird bei jeder Änderung geschaut ob der Inhalt zum aktuellen Typ passt, und wenn nicht wird einfach der Typ verändert
(-) Nachteil ist eben dass es außer ein paar wenigen Projekten keine IDE gibt welche einem unter die Arme greifen könnte, und man mehr oder weniger auf den ASCII-Editor seiner Wahl beschränkt ist

Java
(+) breites Spektrum an Möglichkeiten durch große Anzahl an Packages
(+) sehr gute Interoperabilität mit anderen Anwendungen (Servlets, JSPs)
(+) mit Eclipse gute IDE, allerdings nicht ganz so einsteigerfreundlich
(-) auf eine Sprache beschränkt
(-) manche Operationen relativ umständlich im Vergleich zu PHP/ASP.NET

ASP.NET
(+) sehr einfach Gestaltung des HTML Parts dank grafischem Editor
(+) man kann mehr oder weniger die Programmiersprache seiner Wahl verwenden
(+) sehr gute IDE mit Hilfsfunktionen und Funktionen die auch Anfängern den Einstieg einfacher machen (-> IntelliText)
(-) läuft nur auf Windows Servern richtig

CGI-BIN
(+) es kann jede beliebige Programmiersprache verwendet werden die Programme mit Standardein-/ausgabe erzeugt
(-) sehr umständlich zu warten, da alle HTML Pages zeilenweise erzeugt werden
 
Ra-Tiel am 29.06.2007 14:28 schrieb:
Das Betriebssystem kann halt die verwendeten Pages des Programms in die Swap-Partition bzw das Pagefile verschieben, wenn auf diese lange kein Zugriff erfolgte, aber mehr geht nicht, da sonst das OS ja versehentlich ungespeicherte Daten des Programms wegschmeißen könnte.

Klar, wenn das Programm dann beendet wird räumt das OS schon allen verwendeten Speicher wieder auf. Aber vorher sieht es da halt echt mager aus. Deswegen auch mein Plädoyer für eine Sprache mit einer verwalteten Umgebung wie Java oder .NET, wo das Aufräumen von Objekten automatisch passiert und nicht dem Programmierer überlassen werden muss.
Ah da liegt unser Problem: Bei den meisten (fast) Kostenlos-Hostern darf man eh nicht durchgängig ein Programm laufen lassen, also wird man (z.B. mit cronjobs) das Programm immer wieder aufrufen müssen .. und somit löst sich das Problem von schlechter Speicherprogrammierung fast in Luft auf ;) (bin die ganze Zeit schon von wiederholten Programmaufrufen ausgegangen ..)

Ra-Tiel am 29.06.2007 14:28 schrieb:
es gewaltig sobald einer einen Namen mit genau 100 Zeichen eingibt (weil ja "\\\\0" nicht mehr ins Array passt).
schon mal versucht in eine Textbox mit maximal 99 Zeichen 100 Zeichen einzugeben :D Man muss natürlich irgendwann mal darauf achte, dass die festen Größen nicht überschritten werden .. oder halt die Größen dann erhöhen.
 
Ich kann dir für Browsergames einfach PHP in Kombination mit MySQL empfehlen. Ich habe schon 1 BG selber geschrieben und eines modifiziert....das ist an sich nicht das PRoblem. Nur ist ein Fußballmanager ein richtig heftiges Vorhaben! Gerade für Anfänger ist das doch etwas übertrieben. Du solltest dir erstmal kleine Projekte suchen, um zu gucken, was das Ganze für ein Aufwand ist. Da kannst du dich (gerade wenn ihr nur zu zweit seit) auf mindestens 1 Jahr Entwicklungszeit einstellen, wenn alle die von dir angesprochenen Punkte realisiert werden sollen...
Aber ein Browsergame zum Erlernen finde ich garnicht so abwegig. "Learning by doing" war schon immer mein Philosophie. ;-)
 
Wookie23 am 30.06.2007 10:59 schrieb:
Ah da liegt unser Problem: Bei den meisten (fast) Kostenlos-Hostern darf man eh nicht durchgängig ein Programm laufen lassen, also wird man (z.B. mit cronjobs) das Programm immer wieder aufrufen müssen .. und somit löst sich das Problem von schlechter Speicherprogrammierung fast in Luft auf ;) (bin die ganze Zeit schon von wiederholten Programmaufrufen ausgegangen ..) [...]
Da hast du natürlich recht. Allerdings ist das trotzdem mMn kein richtiges Argument. Wenn man die Speicherverwaltung schlecht implementiert kann's halt dann gut sein dass der Server in die Knie geht sobald mehr als 20 User eingeloggt sind - und das ist ja auch nicht Sinn der Sache. ;)

Weiterhin kommt es drauf an wie sich Reder und Co das Spiel vorgestellt haben. Gerade beim "Training" kann ich mir schon vorstellen dass das so ähnlich läuft wie bei diesen SciFi-BGs die Bauzeiten, dass also die Zeit läuft egal ob der User angemeldet ist oder nicht. In diesem Fall geht es gar nicht anders als das Programm permenent laufen zu lassen. Wie willst du sonst den Zeitverlauf/Trainingsfortschritt berechnen?
 
Ra-Tiel am 30.06.2007 12:05 schrieb:
Wookie23 am 30.06.2007 10:59 schrieb:
Ah da liegt unser Problem: Bei den meisten (fast) Kostenlos-Hostern darf man eh nicht durchgängig ein Programm laufen lassen, also wird man (z.B. mit cronjobs) das Programm immer wieder aufrufen müssen .. und somit löst sich das Problem von schlechter Speicherprogrammierung fast in Luft auf ;) (bin die ganze Zeit schon von wiederholten Programmaufrufen ausgegangen ..) [...]
Da hast du natürlich recht. Allerdings ist das trotzdem mMn kein richtiges Argument. Wenn man die Speicherverwaltung schlecht implementiert kann's halt dann gut sein dass der Server in die Knie geht sobald mehr als 20 User eingeloggt sind - und das ist ja auch nicht Sinn der Sache. ;)

Weiterhin kommt es drauf an wie sich Reder und Co das Spiel vorgestellt haben. Gerade beim "Training" kann ich mir schon vorstellen dass das so ähnlich läuft wie bei diesen SciFi-BGs die Bauzeiten, dass also die Zeit läuft egal ob der User angemeldet ist oder nicht. In diesem Fall geht es gar nicht anders als das Programm permenent laufen zu lassen. Wie willst du sonst den Zeitverlauf/Trainingsfortschritt berechnen?

Man könnte immer wenn sich ein User einloggt, ein Skript ablaufen lassen, welches die Trainingserfolge für alle User berechnet. Wenn sich niemand einloggt, dann interessieren die Traningserfolge ja auch nicht. Die Zeiten und Daten sind natürlich in einer DB abgelegt. Ist natürlcih bei vielen Usern nicht gerade schnell und Cronjobs wären schon besser. Aber ich hab das auf Servern ohne Cronjobs auch immer so gemacht.
 
Mothman am 30.06.2007 12:16 schrieb:
Man könnte immer wenn sich ein User einloggt, ein Skript ablaufen lassen, welches die Trainingserfolge für alle User berechnet. Wenn sich niemand einloggt, dann interessieren die Traningserfolge ja auch nicht. Die Zeiten und Daten sind natürlich in einer DB abgelegt. Ist natürlcih bei vielen Usern nicht gerade schnell und Cronjobs wären schon besser. Aber ich hab das auf Servern ohne Cronjobs auch immer so gemacht.
Stimmt, daran hab ich gar nicht gedacht. :| Hast ja Recht. :P

Trotzdem finde ich wär ein dauerhaft laufendes Programm die deutliche elegantere Lösung. Auch weil man da dann keinen Stress mit von einander abhängigen Aktionen hat (zB: Spieler im Training -> Spieler soll in einem Spiel dabei sein; aber kein Login mehr zwischen Trainingsende und Spielbegin -> wenn Skript Aktionen in falscher Reihenfolge berechnet knallt es).
 
Ra-Tiel am 30.06.2007 12:46 schrieb:
Mothman am 30.06.2007 12:16 schrieb:
Man könnte immer wenn sich ein User einloggt, ein Skript ablaufen lassen, welches die Trainingserfolge für alle User berechnet. Wenn sich niemand einloggt, dann interessieren die Traningserfolge ja auch nicht. Die Zeiten und Daten sind natürlich in einer DB abgelegt. Ist natürlcih bei vielen Usern nicht gerade schnell und Cronjobs wären schon besser. Aber ich hab das auf Servern ohne Cronjobs auch immer so gemacht.
Stimmt, daran hab ich gar nicht gedacht. :| Hast ja Recht. :P

Trotzdem finde ich wär ein dauerhaft laufendes Programm die deutliche elegantere Lösung. Auch weil man da dann keinen Stress mit von einander abhängigen Aktionen hat (zB: Spieler im Training -> Spieler soll in einem Spiel dabei sein; aber kein Login mehr zwischen Trainingsende und Spielbegin -> wenn Skript Aktionen in falscher Reihenfolge berechnet knallt es).
Ganz einfach, es gibt pro Tag eine Auswertung wo Training, Spiele und Transfers alle berechnet werden. Am besten findet die in der Nacht statt. Bin im Moment auch ein bisserl in diesem Gebiet am rumspielen und bei mir wird das so laufen. Der Nachteil ist, dass die Spiele in hundertstel Sekunden berechnet werden und man nicht eingreifen kann. Allerdings ist der Vrteil, dass man nur einen Cronjob braucht und die Auswertung, den Rest vom Tag verwaltet das Spiel sozusagen nu Daten, nimmt also quais Aufträge auf und gibt Informationen.
 
PForsberg am 30.06.2007 13:47 schrieb:
Ganz einfach, es gibt pro Tag eine Auswertung wo Training, Spiele und Transfers alle berechnet werden. Am besten findet die in der Nacht statt. Bin im Moment auch ein bisserl in diesem Gebiet am rumspielen und bei mir wird das so laufen. Der Nachteil ist, dass die Spiele in hundertstel Sekunden berechnet werden und man nicht eingreifen kann. Allerdings ist der Vrteil, dass man nur einen Cronjob braucht und die Auswertung, den Rest vom Tag verwaltet das Spiel sozusagen nu Daten, nimmt also quais Aufträge auf und gibt Informationen.
Das setzt aber vorraus, dass alle Spiele/Trainingseinheiten/Transfers/usw genau n-Vielfache eines Tages dauern und nur zu genau festgelegten Zeiten durchgeführt werden können. Nach deiner Methode überprüft das Programm einmal in 24h den Status der entsprechenden Aktionen und aktualisiert selbigen.

Daher ist es unmöglich, den Spieler entscheiden zulassen, wann er einen Spieler für wie lange zB ins Training, Urlaub, usw steckt. Nehmen wir mal an, User Bob kommt um 13:57:41 auf die Idee seinem Spieler Carl vor dem Spiel um 18:00:00 eine 3h Massage zu verpassen um seine Motivation/Leistung kurzfristig zu steigern.

Dein Programm prüft den Zustand jetzt aber nur um Mitternacht. Wie soll das gehen? Oder steh ich einfach grad nur aufm Schlauch? :-o

Man könnte es ja auch in 15m Intervalle drücken (wie in manchen anderen Browsergames). Allerdings benachteiligt eine solche Intervallregelung die Leute die nicht mit der Stoppuhr vorm Rechner hocken - wenn du mal den Termin verpasst, hast du gleich wieder 15/30/60 Minuten Leerlauf. :|
 
Ra-Tiel am 30.06.2007 14:03 schrieb:
PForsberg am 30.06.2007 13:47 schrieb:
Ganz einfach, es gibt pro Tag eine Auswertung wo Training, Spiele und Transfers alle berechnet werden. Am besten findet die in der Nacht statt. Bin im Moment auch ein bisserl in diesem Gebiet am rumspielen und bei mir wird das so laufen. Der Nachteil ist, dass die Spiele in hundertstel Sekunden berechnet werden und man nicht eingreifen kann. Allerdings ist der Vrteil, dass man nur einen Cronjob braucht und die Auswertung, den Rest vom Tag verwaltet das Spiel sozusagen nu Daten, nimmt also quais Aufträge auf und gibt Informationen.
Das setzt aber vorraus, dass alle Spiele/Trainingseinheiten/Transfers/usw genau n-Vielfache eines Tages dauern und nur zu genau festgelegten Zeiten durchgeführt werden können. Nach deiner Methode überprüft das Programm einmal in 24h den Status der entsprechenden Aktionen und aktualisiert selbigen.

Daher ist es unmöglich, den Spieler entscheiden zulassen, wann er einen Spieler für wie lange zB ins Training, Urlaub, usw steckt. Nehmen wir mal an, User Bob kommt um 13:57:41 auf die Idee seinem Spieler Carl vor dem Spiel um 18:00:00 eine 3h Massage zu verpassen um seine Motivation/Leistung kurzfristig zu steigern.

Dein Programm prüft den Zustand jetzt aber nur um Mitternacht. Wie soll das gehen? Oder steh ich einfach grad nur aufm Schlauch? :-o

Man könnte es ja auch in 15m Intervalle drücken (wie in manchen anderen Browsergames). Allerdings benachteiligt eine solche Intervallregelung die Leute die nicht mit der Stoppuhr vorm Rechner hocken - wenn du mal den Termin verpasst, hast du gleich wieder 15/30/60 Minuten Leerlauf. :|


Schau dir mal www.2minman.com an. Da spiel ich im Moment und ich finde diese Lösung ist klasse. Man stellt einfach das Training für dne Tag für die gesamte Mannschaft ein und alle zwei Tage ist ein Spieltag. Klar hat man dann für die Spieler individuell keine Einstellungsmöglichkeiten aber das könnte man ja auch einbauen, dass man für jeden einzelnen Spieler das Tagestraining einstellen kann. Das würde dann natürlich nicht so kontinuierlich wie bei ogame etc. laufen, sondenr quasie Rundenbasiert. Aber ich dnkee gerade ein Fußballmanager würde sich für eine Rundenbasierte Strategie super eignen :)
 
Normalerweise wird so ein Spiel ja mit diskreten Zeitschritten gespielt (nennen die meistens Ticks oder so) .. also eine Handlung wird z.B. immer zur vollen Minute ausgeführt oder man speichert halt immer die genau Zeit und rechnet damit. Sicher kommt es darauf an wieviele Leute mitspielen, aber so bis 100 Leute braucht man sich da glaub ich wegen Serverlast keine großen Gedanken machen ..

Falls du ein Programm im Hintergrund laufen lässt musst du auch evt aufpassen, dass sich nicht zwei Prozesse (das Programm selbst und eine durch den User aufgerufes Programm) in die quere kommen. Also zum Beispiel nicht gerade der Transfermarkt neuberechnet wird, während man den Preis für seinen Spieler TriffNix wissen will.
 
Ich weiß nicht, wie groß ihr das ganze plant, habe den Thread jetzt nur überflogen.
Um eine saubere Architektur von Anfang an zu gewährleisten, würde ich eine .NET Hostapplikation im Hintergrund empfehlen, die ihr vom Webfrontend (ASP .NET) nur per .NET API ansprecht - entsprechend implementiert habt ihr in der UI nur die Visualisierung und keinerlei Logik.
In der Hostapplikation trennt ihr noch die Datenzugriffsschicht von der Geschäftslogik und schon habt ihr drei einwandfrei getrennte Layer.

Bei der Implementierung solltet ihr euch als erstes über euer Datenbankmodell einig werden. Wenn das steht, könnt ihr die gesamte Datenzugriffsschicht schreiben, und müsst dabei nur im Hinterkopf behalten, bei welchen Anwendungsfällen ihr in die Datenbank schreibt.

Das schwierigste ist dann der Business Layer, die Geschäftslogik. Hierin finden sich alle Klassen, alle Logik. Dieses Programm läuft dauerhaft und führt Aktionen bei API Aufruf durch, irgendwelche Ticks oder täglich laufenden Jobs machen das nur unnötig kompliziert. Achtet von Anfang an darauf, nichts so zu implementieren, dass ihr tägliche Aufräumjobs oder sowas braucht. Auch Berechnungen irgendwelcher Stati laufen nicht alle Stunde, sondern immer bei API Aufruf.

Vorne dann noch ein ASP .NET Interface dranzukleben, ist dann die wenigste Arbeit, wenn der Business Layer anständig implementiert ist.

Von PHP mit Cronjobs würde ich persönlich abraten. Ist zwar eine Alternative, aber da habt ihr wesentlich mehr Gefrickel und schon recht keine saubere Layertrennung.
C++ oder gar C ist in dem Umfeld imho fehl am Platz. Ohne managed environment programmiert doch heutzutage niemand mehr neue Applikationen. In den Sprachen kann man vielleicht systemnah programmieren, aber ihr wollte ja eine klassische Applikation, die gar nichts mit dem System zu tun hat.
 
Zurück