Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie am besten ein Web-Projekt (Browsergame) angehen?
Cuin
myCSharp.de - Member



Dabei seit:
Beiträge: 92

Themenstarter:

Wie am besten ein Web-Projekt (Browsergame) angehen?

beantworten | zitieren | melden

Hallo Leute,

ich habe für die nächste Zeit vor ein neuartiges Browsergame zu erstellen.
Doch leider fehlen mir hierbei die Ansätze, in was ich mich einarbeiten soll.

Um Antworten wie "Das schaffst du nie" oder "Lern erstmal html" vorzubeugen:
Mir ist bewusst, dass mein Kenntnisstand im moment nicht grade der höchste ist, dass ich für das Projekt 1-2 Jahre einplanen kann, dass auf mich Kosten im 3-4 stelligen Bereich zukommen werden und dass ich mich in einige Themengebiete einarbeiten muss.

Wieso ich das ganze trotzdem machen möchte:

- weil ich mich für C# begeistern habe lassen, und das BG in dieser Sprache schreiben möchte.

- weil mich die Technologie interessiert die dahinter steckt (Server, Datenbanken etc.)

- weil mir generel programmieren spaß macht (programmiere schon seit der 7. Klasse (Basic,rpg-maker etc.))

- und weil es auch im Lebenslauf sinnvoll ist, auf Kenntnisse hinweisen zu können, die man sich nicht im Verlauf des Studium angeeignet hat.


Das BG soll eine art "tabellen-BG" werden, also ohne 3D-technik oder videos. Im prinzip sowas wie die Stämme etc., allerdings mit einem ganz anderen spielprinzip.

Was ich kann:

- C
- C#
- bisschen javascript
- bisschen flash
- fundierte html kenntnisse
- fundierte css kenntnisse

Und jetzt die Frage: habt ihr vllt tipps für mich, wie ich das ganze angehen soll? Also damit ich nicht gleich von anfang an in die falsche richtung gehe bzw. mich in die falschen themengebiete einarbeite. Ich habe schon ein wenig gegoogelt, doch leider sind viele BG's in php geschrieben. Aber das muss doch auch in C# gehen oder? Funktioniert das mit WPF???

Bin für jeden Hilfreichen Tipp oder Verweis auf anderen webseiten dankbar! Sehr hilfreich wären auch aufzählungen, was unbedingt für ein BG erforderlich ist und welche zusatztechnologien man benutzen kann, die in welcher hinsicht auch immer, das BG verbessern können.

[Edit]ok, meine weiteren reserchen ergaben, dass ich das BG am besten mit asp.net, sql und evtl. ajax realisieren werde. ist der Ansatz ok?[/Edit]
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Cuin am .
private Nachricht | Beiträge des Benutzers
Phönix
myCSharp.de - Member



Dabei seit:
Beiträge: 67
Herkunft: Fürth

beantworten | zitieren | melden

Hi Cuin,

wenn du schon grundlegend weist mit welchen Technologien du das machen willst hast du schon den ersten Schritt gemacht. Um ASP.NET wirst du bei C# eh nicht drum herum kommen, außer du machst alles in Silverlight. Ich würde dir raten erst ein mal als Ziel setzen, dass Spiel auf HTML zu bauen, also Basic ASP.NET. Wenn du dann die Idee weitestgehend umgesetzt hast kannst du dann bestehende oder kommende Teile sogar in AJAX oder Silverlight machen. Silverlight eigenet sich hervoragend für Animationen und Effekte im Spiel. Aber wie gesagt erst mal das Spielprinzip an sich bevor du die Animationen machst.

Bei der Datenablage ist meist SQL die bevorzugte Variante. Aber es kann auch sein, dass du je nachdem was das Spiel können soll, vielleicht auch Daten direkt im Filesystem ablegen solltest. Bei der Programmierung solltest du daher entscheiden welchen SQL Server du verwenden willst. Am nächsten liegt natürlich der MS SQL Server aber auch MySQL oder andere sind auch nicht verkehrt.

Am Anfang ist es ganz wichtig das du nicht einfach drauf los programmierst, sondern die Idee erst ein mal schriftlich festhälst. Wenn du dann das Grobe zu Papier gebracht hast, solltest du die Idee dann weiter verfeinern und dir langsam überlegen wie du das Ganze dokumentierst. Bevor du anfängst zu programmieren sollten vom Spiel schon möglichst alle Abläufe, Schnittstellen und Datenablagen bekannst sein. Das heißt du solltest dir im Klaren sein welche Klassen du für welche Daten und Funktionen brauchst bzw. über welchen Schnittstellen die Klassen kommunizieren (Funktionsname mit Parametern).

Ab diesem Zeitpunkt kann man anfangen los zu legen. Natürlich gibt es während der Entwicklung einige Abänderungen am Entwurf aber all zu große sollten es nicht sein, da sonst das ganze Spiel später vielleicht wieder mit mehr Aufwand abgeändert werden muss damit es so funktioniert wie es geplant war. Jeden Schritt den du fertig gestellt hast oder am Entwurf veränderst muss auch hier wieder gut dokumentiert werden.

Wenn es mehrere Leute sein sollten müsst ihr euch gut absprechen und öfters mal zusammen setzen und die nächsten Schritte aufteilen. Änderungen am Entwurf sollten möglichst immer gemeinsam beredet werden da es sonst zu unschönen Momenten kommen kann (harmlos ausgedrückt).

Hier mal noch einen Link zum Wiki wie so ein Ablauf von statten geht:
Softwareentwicklung

Gruß Phoenix
private Nachricht | Beiträge des Benutzers
Cuin
myCSharp.de - Member



Dabei seit:
Beiträge: 92

Themenstarter:

beantworten | zitieren | melden

Hallo Phönix,

erstmal vielen Dank für deine ausführliche und hilfreiche Antwort. Den Ansatz, das Spiel erstmal vollständig auf HTML aufzubauen, find ich gut. Ich werde es vermutlich auch so machen.
Da das Spielprinzip noch nicht ganz ausgereift ist, werde ich wohl zunächst einige Testprogramme schreiben müssen, um überhaupt mal irgendwas im Browser anzeigen zu können.

Was ich mich allerdings jetzt noch frage, ist, wie das mit dem Server und Datenbanken funktioniert. Wie lange kann ich von meinem Laptop mit Internetverbindung an dem Spiel programmieren ohne "online" zugehen, also ohne einen Server zu kaufen bzw. zu mieten?
Wenn ich mit VS 08 programmiere, wird dann dort ein Server simuliert? Die Frage hört sich vielleicht jetzt dumm an, aber mir fehlt hierzu irgenwie noch das grundlegende Verständnis...
private Nachricht | Beiträge des Benutzers
Loomis
myCSharp.de - Member



Dabei seit:
Beiträge: 64

beantworten | zitieren | melden

Du kannst dir einen lokalen Server einrichten (mit XAMPP). Theoretisch bräuchtest du bis zum ersten Release keinen WebServer zu haben. Zudem ist ein localhost immer Online, schneller und sehr einfach zu handhaben. Ich hab aber keine Ahnung was du für Silverlight oder AJAX brauchst, aber für die erste HTML Version reichts.

Eine andere Möglichkeit wäre natürlich kostenloser Webspace (z.B. funpic.de). Davon würd ich aber abraten, ich habe in diesem Bereich noch keinen guten Anbieter gefunden (Der funpic-ftp-Server ist z.B. nach einigen MB Upload minutenlang nicht mehr zu erreichen).
private Nachricht | Beiträge des Benutzers
Cuin
myCSharp.de - Member



Dabei seit:
Beiträge: 92

Themenstarter:

beantworten | zitieren | melden

ok, das hört sich schonmal gut an, dankeschön^^

Sobald ich mit meinen Kenntnissen in ASP.net so weit bin, dass ich loslegen kann, werd ich mir das mit dem lokalen Server dann mal anschauen... aber ich glaube mal irgenwo gehört zu haben, dass man bei VS 08 automatisch einen webserver dabei hat...? kann das sein?

[Edit]Das habe ich grade im Inet gefunden: "Stellen Sie sicher, dass die Internet-Informationsdienste (IIS) installiert sind. Wenn nicht, dann installieren Sie die IIS. Auf diese Weise verfügen Sie über einen lokalen Webserver, der Ihre ASP.NET-Seiten ausführen kann."

Ist diese Information noch aktuell oder schon veraltet???[/Edit]
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Cuin am .
private Nachricht | Beiträge des Benutzers
Dawamaha
myCSharp.de - Member



Dabei seit:
Beiträge: 54

beantworten | zitieren | melden

Zitat von Cuin
aber ich glaube mal irgenwo gehört zu haben, dass man bei VS 08 automatisch einen webserver dabei hat...? kann das sein?
Eigentlich nicht.
Wenn du aber wirklich ASP.NET programmieren willst, dann wirst du mit dem XAMPP-Server ohne zusätzliche Module nicht weit kommen. Am besten du aktivierst dir den IIS-Server (Internet Information Services) auf deinem Rechner, da hast du dann alles dabei. Wie das geht kannst du einfach nachgoogeln!
private Nachricht | Beiträge des Benutzers
Cuin
myCSharp.de - Member



Dabei seit:
Beiträge: 92

Themenstarter:

beantworten | zitieren | melden

Zitat
Eigentlich nicht.

Dann hab ich mich wohl verhört^^ Wäre ja auch zu schön um war zu sein.
Ok, dann werd ich mich wohl noch informieren müssen, wie ich so einen webserver installieren/aktivieren kann... danke für eure antworten.
private Nachricht | Beiträge des Benutzers
Phönix
myCSharp.de - Member



Dabei seit:
Beiträge: 67
Herkunft: Fürth

beantworten | zitieren | melden

Hi Cuin,

also wenn du ASP.NET programmieren willst rate ich dir die kostelose Visual Studio 2010 Webdeveloper Version runter zu laden. Dort kannst du in C# programmieren und viele Editoren wie für CSS oder HTML nutzen. Wenn du bei der Version ein Projekt debuggen willst dann startet automatisch der IIS Development Server der fast genau so wie der IIS funktioniert. Damit kannst du sehr einfach deine Anwendung testen und ASP.NET Seiten in einzelnen Schritten durchlaufen. Nicht zu vergessen bei der Version ist auch automatisch der SQL Server 2008 Express mit dabei. Ich rate dir von XAMPP ab. Das ist eher ein Paket für PHP und MySQL. Wenn du dann später deine Anwendung länger als nur für das Debuggen laufen lassen willst kannst du auf deinem Windows den integrierten IIS nachinstallieren und dort hosten. Beim Visual Studio 2010 drauf achten das es zwei Varianten gibt eine Seite zu erstellen. Einmal als Wenanwendung (über Proejkt zu erstellen) und eine Website (über Website). Ich rate dir eine Webanwendung zu machen, das es bei der Variante zwar eine fertige dll kompiliert, die du nicht ohne dem Projekt ändern kannst, aber wesentlich schneller läuft und weitere kleine Vorteile hat. Bei der Website kannst du jederzeit den Quellcode editieren, aber die Ausführungszeit ist etwas geringer und der Code kann schnell mal ungewollt verändert werden.

Gruß Phoenix
private Nachricht | Beiträge des Benutzers
Tomot
myCSharp.de - Member

Avatar #avatar-2678.jpg


Dabei seit:
Beiträge: 706
Herkunft: Düsseldorf

beantworten | zitieren | melden

Zitat von Dawamaha
Zitat von Cuin
aber ich glaube mal irgenwo gehört zu haben, dass man bei VS 08 automatisch einen webserver dabei hat...? kann das sein?
Eigentlich nicht.

Deine Aussage ist nicht korrekt. Zumindest bei einer normalen Visual Studio Installation ist der Cassini WebServer mit dabei http://de.wikipedia.org/wiki/Cassini-Webserver. Inwiefern dieser im Umfang von den Express-Versionen kann ich nicht beurteilen, lässt sich aber bestimmt irgendwo nachschlagen.

Als Alternative dazu besteht die Möglichkeit dir einen lokalen IIS Server aufzusetzen. Dies geht über Systemsteuerung -> Programme -> Windows Funktionen hinzufügen
Zitat
Du kannst dir einen lokalen Server einrichten (mit XAMPP). Theoretisch bräuchtest du bis zum ersten Release keinen WebServer zu haben. Zudem ist ein localhost immer Online, schneller und sehr einfach zu handhaben.
Wie stellst du dir denn ein Browsergame vor, das unter reinem HTML läuft? Was du auf jeden Fall machen musst, ist dir einen Service schreiben, der für Backgroundaktivitäten verantwortlich ist (z.B. Resourcencounter erhöhen, Truppenbewegungen usw), da dies Aufgabe des Servers und nicht des Clienten geht. Man könnte zwar argumentieren, das man mit reinem HTML irgendwie noch eine Darstellung hinbekommt, aber eine entsprechende Kommunikation mit dem Server wirst du mit purem HTML nicht hinbekommen.

Der o.g. Tipp , das du dir erstmal über den Projektrahmen im klaren seien solltest, bevor du anfängst, nimmst du dir bitte zu Herzen.
Deine Architektur sollte so aussehen, das der Backgroundservice und das Browsergame eine gemeinsame DLL verwenden, um mit gleicher Logik mit der Datenbank zu kommunizieren. Vermeide also im Browsergame und in dem Service zweimal den gleichen Code zu schreiben, das führt nur zu Problemen. Da ist der genannte DLL Ansatz besser.

Mein Vorschlag ist, das du dir erstmal grob überlegst, wie du dir einen Service schreibst, der z.B. irgendwelche Resourcen eines Spielers periodisch erhöhst. Dazu würde ich dir empfehlen entsprechende simple mathematische Funktionen aufzustellen.
mit freundlichen Grüßen,
Tomot

Projekte: www.gesellschaftsspieler-gesucht.de
private Nachricht | Beiträge des Benutzers
Cuin
myCSharp.de - Member



Dabei seit:
Beiträge: 92

Themenstarter:

beantworten | zitieren | melden

Erstmal vielen Dank für eure Tipps. :-)

@Phönix: Da ich im moment noch Student bin, habe ich kostenlosen Zugriff auf einige Microsoft-Produkte. Ich sollte mal ein wenig googeln, welche Version von VS 08 für welche Zwecke gut sind. Man kann ja nämlich (so weit ich weiß) auch mit der "normallen" VS 08 Version eine asp.net- bzw. Webanwendung erstellen oder? Oder unterscheiden sich die Versionen lediglich um einige zusatzfunktionen wie z.B.: Css- oder Htmleditor?

@Tomot:
Zitat
Vermeide also im Browsergame und in dem Service zweimal den gleichen Code zu schreiben, das führt nur zu Problemen. Da ist der genannte DLL Ansatz besser.

Das verstehe ich nicht so ganz. Meinst du damit, dass z.b. die Berechnungen der resourcen immer entweded im Browsergame oder im Service stattfinden soll?

Da kommt mir auch gleich eine Frage auf: Welche Berechnungen kann man im Browsergame laufen lassen und welche sollte man im Server verarbeiten? Gibt es da irgenwelche Ansatzpunkte, oder kann man das beliebig machen?
So wie ich das jetzt verstehe: Wenn ich z.b. ALLES im Server berechnen lassen will, dann entsteht dadurch ein hoher Traffic, da ja der Server die aktuellen Werte vom clienten abholen muss etc.
Wenn ich aber sehr vieles im Clienten berechnen lasse... was hat das für nachteile?

Ok, auf Anhieb würde ich jetzt sagen, dass z.b. die Resourcen des Spielers im Server berechnet werden, da diese ja so oder so in der Datenbank abgelegt werden müssen... die berechnung eines Kampfschadens kann im Clienten berechnet werden, das resulat muss aber danach dem server mitgeteilt werden...

Je mehr Berechnungen ich allerdings dem Clienten überlasse, desto länger braucht man zum laden der einzelnen seiten oder? Verstehe ich das so richtig?
private Nachricht | Beiträge des Benutzers
Phönix
myCSharp.de - Member



Dabei seit:
Beiträge: 67
Herkunft: Fürth

beantworten | zitieren | melden

Hi Cuin,

also wenn du Student bist dann hast du bei deinem MSDN AA Account ja die Visual Studio Versionen mit drin. Du redest aber die ganze Zeit von der 2008er Version. Ich rate dir aber auf die 2010er zu gehen da du dort .NET Framework 4.0 und die neuen Features des 2010er Studio verwenden kannst. Bei den Visual Studio Versionen ist es so, dass die Express Version immer nur eine speziellen Part enthält. Zum Beipsiel C# auf Anwendungsebene (Visual Studio C# Express) und C#/VB auf Webebene (Visual Studio Webdeveloper Express). Aber da du ja auf die Kostenpflichtigen kommst reicht da schon die Professional Version aus (bei 2008 reicht Standard). Die beinhaltet dann schon beides zusammen. Um so höher du dann mit der Version gehst desto mehr Features sind drin (z. B. UML Diagramme in der Ultimate). Und der IIS Server zum Debuggen ist in allen kostenpflichtigen Versionen ebenso enthalten. Dazu gibts bei Wikipedia auch mehr Informationen.

Die Berechnungen für das Spiel rate ich dir soweit wie es geht auf dem Server zu machen, da im Client dafür dann zusätzlich Javascript benötigt wird bzw. der Client den Code abändern kann und somit die Berechnungen verfälschen kann. Auf dem Client (Browser) sollten nur Benutzerinteraktionen wie Clicken, Ziehen usw. und Anzeigen erfolgen (Bilder, Animationen).

Das mit dem Backgroundservice finde ich für den Anfang etwas schwer. Es reicht zu Beginn auch wenn du auf deiner Seite einen Login für den administrativen Bereich machst. Wenn du dann später das Spiel unter die Massen verteilen willst sollte man natürlich den normalen Benutzerzugang und den Adminzugang nicht gerade auf der selben Seite machen.

Gruß Phoenix
private Nachricht | Beiträge des Benutzers
Cuin
myCSharp.de - Member



Dabei seit:
Beiträge: 92

Themenstarter:

beantworten | zitieren | melden

@Phönix: Stimmt eigentlich^^ Ich kann mir ja schon die neue Version runterladen... dann werde ich das wohl als erstes machen :-)
Zitat
Das mit dem Backgroundservice finde ich für den Anfang etwas schwer. Es reicht zu Beginn auch wenn du auf deiner Seite einen Login für den administrativen Bereich machst. Wenn du dann später das Spiel unter die Massen verteilen willst sollte man natürlich den normalen Benutzerzugang und den Adminzugang nicht gerade auf der selben Seite machen.

Das verstehe ich nicht so ganz. Was hat ein Backgroundservice mit einem Login zu tun? Meinst du mit Backgroundservice das hier: http://de.wikipedia.org/wiki/Background_Intelligent_Transfer_Service oder etwas anderes? Ein Adminzugang dient doch lediglich der Spielkontrolle oder? Also beim fertigen Spiel?
private Nachricht | Beiträge des Benutzers
Phönix
myCSharp.de - Member



Dabei seit:
Beiträge: 67
Herkunft: Fürth

beantworten | zitieren | melden

Hi Cuin,

ich glaube ich hab das mit dem Backgroundservice falsch verstanden. Ich dache es ist eine Schnittstelle über die man Administrieren kann. Aber was Tomot meinte ist, dass das Spiel ja jede Sekunde was macht. Sei es Einheiten sammeln lassen oder wandern. Für diese Sachen muss ja natürlich eine Anwendung auf dem Server laufen, die die Spieldaten aus der Datenbank holt, nach entsprechender Zeit verändert und wieder abspeichert. Weil der Browser ist ja nicht immer da und frag den Server jede Sekunde was zu machen ist. Wenn du ein Strategiespiel in Richtung die Stämme machen willst kommst du um sowas natürlich nicht drum herum. Wenn es aber nur ein kleines Browsergame ist was nicht zeitabhängig ist sondern von Runden oder Aktivitäten der Benutzer dann reicht es bei jedem Seitenaufruf die Berechnungen durch zu führen.

Wenn du uns näheres über das Spiel verrätst können wir dir auch mehr Tips geben. Aber musst die Idee auch nicht verraten wenn du willst. Ist ja deine Entscheidung =).

Gruß Phoenix
private Nachricht | Beiträge des Benutzers
Cuin
myCSharp.de - Member



Dabei seit:
Beiträge: 92

Themenstarter:

beantworten | zitieren | melden

Ok, dankeschön^^

Also, vllt bin ich ja ein wenig größenwahnsinnig, denn das Spiel wird ein ziemlich komplexes kampfsystem haben. Es wird darum gehen, die beste Truppenkonstillation herauszufinden. D.h. es wird sehr viele verschiedene Truppenarten geben. Also auf jedenfall ein Strategiespiel... keine wirtschaftssimulation und keine rpg.... Natürlich stehen einem Spieler nicht gleich von anfang an alle Truppen zur verfügung. :-)

Ranglisten etc. sollen einmal pro Stunde aktualisiert werden.

An der Visualisierung des Kampfsystems, sowie am Kampfsystem selber muss ich noch arbeiten. Es wird aber wahrscheinlich so ähnlich wie bei Gondal ablaufen. d.h. rundenbasiertes verteilen der kampfschäden. eine runde soll 1 sekunde dauern... der user kann das kampfgeschehen selber nicht beeinflussen... er kann nur zugucken^^ allerdings kann er vor einem kampf "zahlreiche" optionen einstellen, wie er den Kampf kämpfen will...
Das KS hört sich jetzt vllt n bisschen langweilig an... aber ich will ja nicht gleich alles verraten, sondern lediglich das grobe prinzip offen legen^^

D.h. also, dass jede sekunde (während des kampfes) die Daten an den Server geschickt werden, die Daten manipuliert werden und schließlich zeitnah visualisiert werden (vllt sogar mit kleinen animationen).

außerdem soll es noch items geben... bisher sollen diese jedoch nur außerhalb eines kampfes einsetzbar sein.
eine karte wird es auch geben in der man sich frei bewegen kann... evtl. mit maximalen "schritten" pro tag/stunde etc. Die karte an sich wird gerastert sein und jede zelle mit einem kleinen bildchen versehen (z.b. berge, hügel etc.)
ob und wie spieler angezeigt werde, die sich in unmittelnaher umgebung befinden muss ich mir noch überlegen.

Der Avatar selber kann nicht besonders beeinflusst werden... (nur wenige eigenschaften)...

also der schwerpunkt liegt auf das kampfsystem.

hmm... im moment fällt mir nix mehr ein, was für euch noch interessant sein könnte^^

aja, vllt noch, dass die meisten daten nur bei einem neuladen der seite aktualisiert werden... einige dinge sollten allerdings mit javascript oder so ständig aktualisiert werden.... (z.b. server uhrzeit etc.)
Zitat
Aber was Tomot meinte ist, dass das Spiel ja jede Sekunde was macht. Sei es Einheiten sammeln lassen oder wandern. Für diese Sachen muss ja natürlich eine Anwendung auf dem Server laufen, die die Spieldaten aus der Datenbank holt, nach entsprechender Zeit verändert und wieder abspeichert.

könnte man das spiel evtl. so realisieren, dass, wenn man eine truppenbewegung startet, nur die Zeit gespeichert wird, bei der die truppen ankommen und wenn diese zeit erreicht wird, wird ein event oder so gefeuert, wodurch dann der aktuelle stand berechnet wird? Den während die truppen unterwegs sind, kann man sie eh nicht angreifen...
private Nachricht | Beiträge des Benutzers
m0rius
myCSharp.de - Member

Avatar #avatar-3125.png


Dabei seit:
Beiträge: 1043

beantworten | zitieren | melden

Hallo Cuin,
Zitat von Cuin
könnte man das spiel evtl. so realisieren, dass, wenn man eine truppenbewegung startet, nur die Zeit gespeichert wird, bei der die truppen ankommen und wenn diese zeit erreicht wird, wird ein event oder so gefeuert, wodurch dann der aktuelle stand berechnet wird? Den während die truppen unterwegs sind, kann man sie eh nicht angreifen...
du musst überhaupt kein Event feuern, da du das Ergebnis eines Kampfes erst dann berechnen musst, wenn es jemanden interessiert, beispielsweise wenn ein Spieler den Kampfbericht einsehen möchte oder ein weiterer Kampf danach stattfindet. Willst du einmal pro Stunde die Ranglisten aktualiseren, musst du natürlich alle noch offenen Kampfergebnisse berechnen, um auf dem aktuellen Stand zu sein.

m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
private Nachricht | Beiträge des Benutzers
Phönix
myCSharp.de - Member



Dabei seit:
Beiträge: 67
Herkunft: Fürth

beantworten | zitieren | melden

@Cuin:

Wo hast du dir dann gedacht wird das Event gefeuert? Wenn gerade kein Browser eine Seite anfragt kann auch in deiner ASP.NET Anwendung kein Event behandelt werden, es läuft ja keine Anwendung zu dem Zeitpunkt. Du kannst es nur machen indem du bei jedem Seitenaufruf des Spiels alle Bereiche prüfst ob da was gemacht werden muss (z.B. Truppen sind angekommen und dort hinsetzen). Aber das wird schon ab einigen Usern nicht mehr performant. Da brauchst du im Hintergrund eine Art Warteschleife als Anwendung, die die ganzen Aufgaben die anfallen abarbeitet. Und jede Sekunde eine Aktion ausführen ist für den Server viel zu belastend wenn viele Spieler gleichzeitig was machen. Wenn du ein Echtzeitstrategiespiel machen willst, dann würde ich dir raten einen Netzwerkserver zu bauen (über TCP die Daten übertragen) und den Client als WPF Anwendung oder Windows Forms wenn du nicht so viele Animationen hast. Weil dann kannst du die ganzen belastenden Berechnungen auf jedem einzelnen Client ausführen lassen und nur immer die Ergebnisse mit dem Server abgleichen.

Du merkst schon das dein Vorhaben nicht einfach ist. Deshalb fang einfach an und schaue wie weit du mit welcher Technologie kommst. Wenn es mit ASP.NET nicht mehr realisierbar ist, dann musst du halt dein Spiel auf Server-Client Anwendung umschreiben.

Gruß Phoenix
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3430
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,

ich denke schon, daß es mit ASP.NET machbar ist - vor allem in Verbindung mit AJAX.
Zitat von Phönix
Wenn gerade kein Browser eine Seite anfragt kann auch in deiner ASP.NET Anwendung kein Event behandelt werden, es läuft ja keine Anwendung zu dem Zeitpunkt.
Das ist so nicht ganz richtig. Die ASP-NET-Anwendung wird ja nicht beendet, wenn gerade keine Anfrage läuft. Man könnte also durchaus einen Thread in der Global.asax (Application_Start) starten, der diese Aufgaben übernimmt. Das ist allerdings nicht zu empfehlen, da z.B. bei einem Neustart des Servers die Anwendung erst getriggert werden müsste, damit der Thread losläuft


Ich würde daher auch dazu tendieren, einen Service im Hintergrund laufen zu lassen, der die gesamte Logik und die Umgebungsdaten enthält. Die ASP.NET-Anwendung kann dann bei Benutzeraktivität diesen Dienst steuern, bzw. Daten daraus abrufen.

Gruß, MarsStein
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MarsStein am .
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Phönix
myCSharp.de - Member



Dabei seit:
Beiträge: 67
Herkunft: Fürth

beantworten | zitieren | melden

@MarsStein:

Naja mit AJAX hab ich schon so einige Hacks erlebt die man gemacht hat. Da würde ich bei solchen Sachen nicht gerade raten. Außer man kann sicher stellen das der Nutzer keine andere Seite bastelt und dort mit mit seinem AJAX am Spiel manipulieren kann.

Das mit dem Thread kannte ich noch nicht. Cool das es sowas gibt.

Gruß Phoenix
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Phönix am .
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3430
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo @Phönix,

ich habe ja gesagt daß die Logik in einem getrennten Dienst liegen soll. Das AJAX ist nur komfortabel für die Weboberfläche, also für die Übermittlung von Benutzeraktionen an den Server. Wenn es richtig gemacht wird, ist das genauso viel oder wenig manipulierbar/anfällig wie alles andere, was im Browser läuft (wenn man von den Plugin-basierten Technologien absieht).

Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Cuin
myCSharp.de - Member



Dabei seit:
Beiträge: 92

Themenstarter:

beantworten | zitieren | melden

@MarsStein: Da hast du Recht.... die Daten müssen ja nur neu berechnet werden, wenn sie jemand braucht. Dann werde ich versuchen, das mit nem Service im hintergrund laufen zu lassen... allerdings stellt sich mir da die frage, wo der Service laufen soll? wenn er beim clienten läuft, dann besteht ja die Gefahr, dass die Daten manipuliert werden können oder?

@Phönix: Was heißt den Echtzeitstrategei eigentlich?^^ Es ist eher so, dass man sein Heer aufbaut und dann irgendjemand angreift (entweder Truppenbewegunge die dann irgendwann ankommt oder arena wo der kampf sofort startet) sobald der kampf startet, sieht man nur noch die "kampfanimation" d.h. wie die lebenspunkte runde für runde neuberechnet werden. sagen wir mal ein kampf dauert 12 sekunden, d.h. dann, dass der user 12 sekunden lang nix machen kann, aber die daten trotzdem "in Echtzeit" ausgegeben werden... wie handhabe ich sowas am besten?
Meine idee: kurz vor dem kampf werden alle nötigen Daten zum clienten geschickt, dann wird der kampf gestartet und alle werte runde für runde neu berechnet und ausgegeben und danach die daten dem server zugeschickt??? das wird wohl nicht ganz klappen vermute ich mal^^
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3430
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,

ein Service auf dem Client ist eine ganz schlechte Idee -> der müsste ja erst mal installiert werden, und das willst Du bei einem Browser-Spiel ganz sicher nicht haben, und zentrale Datenhaltung wäre auch futsch. Der Dienst läuft idealerweise entweder direkt auf dem selben Server wie auch die Webanwendung, oder auf dem direkt daneben...

Gruß, MarsStein
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MarsStein am .
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Cuin
myCSharp.de - Member



Dabei seit:
Beiträge: 92

Themenstarter:

beantworten | zitieren | melden

Achso... jetzt verstehe ich das ganze so langsam^^

So habe ich es mir eigentlich auch vorgestellt, also dass der Server die Daten berechnet und dann dem Clienten nur noch zur ausgabe schickt...

gut gut... jetzt habe ich schon viele anhaltspunkte für mein projekt...

Wenn eine seite aktualisiert wird, wird erst nachgeschaut ob evtl. angekommene truppenbewegungen zu berechnen sind etc. und die ergebnisse dann ausgegeben. bei einer kampfanimationen wie ich sie vorhin erläutert habe, muss der dienst halt jede sekunde aufgerufen werden... mit ajax sollte das ja glaube ich kein problem sein (dank ajax wird ja nicht jedesmal die ganze seite neu geladen, sondern nur z.b. die lebenspunkte aktualisiert oder?)
private Nachricht | Beiträge des Benutzers
Phönix
myCSharp.de - Member



Dabei seit:
Beiträge: 67
Herkunft: Fürth

beantworten | zitieren | melden

@Cuin:

Genau bei der Berechnung des Kampfes beim client liegt der große Fehler. Denn ein Spieler kann sich eine eigene Seite mit Javascript bauen und dort die Berechnungen zu seinen Gunsten ausfallen lassen und die Daten dann an den Server schicken. So gewinnt er jede Runde. Da müsstest du die Varianten von MarsStein machen, indem du die Berechnung auf dem Server ausführen lässt und mittels AJAX nur eine Aktualisierung der Anzeige vornimmst. Das mit der Berechung im Service geht nicht am Client dann könnte ja er auch hier wieder das Spiel manipulieren. Der Service muss auf einem Server laufen.

Mit Echtzeit meinte ich Spiele wie Age of Empires, wo die Einheiten in paar Sekunden produziert und auch wieder vernichtet werden. Wenn das Spiel aber über längere Zeit sieht das mit der Belatung natürlich nicht so groß aus.

Um dem ganzen noch mal einen Überblick zu geben. Die Berechnungen und Daten des Spiel MÜSSEN auf dem Server sein und vor Manipulationen geschützt sein. Auf dem Client dürfen NUR Anzeige (Animation) und Benutzeraktionen gemacht werden. Du musst immer davon ausgehen das jemand das Spiel zu seinem Vorteil nutzen will. Und der gedanke ist noch harmlos das ist immer viel schlimmer als man denkt (sieht die Stämme).
private Nachricht | Beiträge des Benutzers
Cuin
myCSharp.de - Member



Dabei seit:
Beiträge: 92

Themenstarter:

beantworten | zitieren | melden

ok, das gefällt mir auch schon viel besser, wenn ALLE Daten im server gespeichert und berechnet werde...

ne, an sich wird das spiel nicht viel zu rechnen habe denke ich mal... lediglich die kampfberechnungen werden aufwendig sein.... und diese finden ja nicht kontinuirlich statt (wie bei age of empires)
Was ist den mit die Stämme? Gabs dort manipulationen im spiel? Bin dort leider nicht angemeldet... Kampf um Mittelerde kennt ihr nicht zufälligerweise?
private Nachricht | Beiträge des Benutzers
Tomot
myCSharp.de - Member

Avatar #avatar-2678.jpg


Dabei seit:
Beiträge: 706
Herkunft: Düsseldorf

beantworten | zitieren | melden

Zitat von Cuin
Was ist den mit die Stämme? Gabs dort manipulationen im spiel?

Manipulationen kannst du quasi in drei Teile unterteilen:
-> Veränderung des Spielgeschehens zu seinen eigenen Gunsten durch Manipulation der Daten auf dem Server (z.B. du hast eine Kombination von Seitenaufrufen gefunden, bei deren Ausführung du +100 Einheiten eines speziellen Typen bekommst
-> Gewinnen eines Spielvorteils durch erweitertes Auslesen von Informationen die vom Server zum Clienten geschickt werden. (Angenommen du überträgst unverschlüsselt irgendwelche daten, und benutzt 50% davon im Browser. In den anderen 50% könnten andere nicht benutzte Daten mitübertragen werden, die das Geschehen positiv beeinflussen können. (z.B. eine Angriffsanzeige in der steht, wann einer Gegner angreift. Werden zusätzlich zum Clienten noch Informationen über die Truppenstärke übertragen, dir gelingt es sie herauszufinden, wobe es aber nicht vorgesehen ist, das du diese Informationen kennst.
-> Die Verwendung von Automatismen generiert Spielvorteile. (z.B. erhalst du einem Klick auf einen Button +1 Holz. Wenn jemand nun ein Programm schreibt, was 5000mal auf den Button klickt, dann hat er durch Automatismus einen Spielvorteil gewonnen)

Diese drei Arten von Manipulation sind durch saubere Programmierung zu vermeiden.
mit freundlichen Grüßen,
Tomot

Projekte: www.gesellschaftsspieler-gesucht.de
private Nachricht | Beiträge des Benutzers
Cuin
myCSharp.de - Member



Dabei seit:
Beiträge: 92

Themenstarter:

beantworten | zitieren | melden

heißt das also, dass ich alle Daten verschlüsseln muss, bevor ich sie verschicke? oder gibt es da auch andere möglichkeiten.
Zitat
-> Die Verwendung von Automatismen generiert Spielvorteile. (z.B. erhalst du einem Klick auf einen Button +1 Holz. Wenn jemand nun ein Programm schreibt, was 5000mal auf den Button klickt, dann hat er durch Automatismus einen Spielvorteil gewonnen)

Solche Programme muss man nicht mal selber schreiben... die gibt es schon (z.B.: IMacros)... in Kampf um Mittelerde muss man z.b., wenn man effektiv Truppenausbilden will, in ALLEN Städten von JEDEM Typ eine genau berechnete Anzahl an Einheiten pushen... viele nehmen dazu IMacros her... d.h. sie nehmen ihre Aktionen in der ersten stadt auf... dann klicken sie auf die nächste stadt und spielen ihr aufgenommenes Programm wieder ab...
Meine Meinung (und auch Meinung des spielentwicklers): das ist nicht besonders schlimm, da der User keinen entscheidenden Spielvorteil erlangt, sondern nur etwas Zeit und Arbeit spart... (Sagen wir mal 3 mal pro tag in 26 städten 10 Einheitentypen ausbilden... = 780 Zahlen eingeben pro tag.... und ein BG soll ja ein spiel sein... und keine arbeit...) anders schaut es bei dem aufleveln der gebäude aus: da nicht jede stadt gleich weit entwickelt ist und gleich viele rohstoffe hat, kann man imacros nur in seltenen fällen zum gebäude-aufleveln einsetzten...


Also von den 3 oben genannte problemen sehe ich nur die ersten beiden als kritisch an... die man aber, wie du schon sagtest, vermeiden kann...

aja, worüber ich mir auch noch gedanken gemacht habe: Das spiel sollte auch gut für "gelegenheitsspieler" geeignet sein. d.h. es sollte reichen, 1-2 mal am tag reinzuschauen um gut voran zu kommen... allerdings sollte man sich auch länger mit dem spiel beschäftigen können, wenn man gerade lust dazu hat... (z.b. durch kämpfe oder Entwicklung neuer Kampftechniken oder allianzkriege etc.)

Ich meine damit, dass man nicht 24 h am tag an dem spiel sitzen kann, wie bei einem normalen pc-spiel... aber auch nicht zwischen jeder handlung 2 h warten muss... ich glaube, dass wird nicht leicht sein dies umzusetzten...
Die Rangliste sollte also nicht von "Suchties" dominiert werden, also Leuten die ständig on sind, sondern von Spielern, die die beste Taktik ausgedacht haben etc.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Cuin am .
private Nachricht | Beiträge des Benutzers
Cuin
myCSharp.de - Member



Dabei seit:
Beiträge: 92

Themenstarter:

beantworten | zitieren | melden

Habe wiedermal eine frage:

Und zwar geht es um die Auflösung bzw. der "Größe" des Browsergames.

Ich gehe mal von einer Standardauflösung von 1024 x 768 Pixel aus.
Was aber nicht bedeutet, dass ich 1024 Pixel Platz habe für die Breite meines BG'S
Man muss ja noch die Breite der VScrollbar abziehen und den Rahmen des Browsers.

Gibt es irgendeine Standardbreite für Foren, BG etc? Oder muss ich die Breite durch testen selber herausfinden? Ich möchte nämlich auf keinen fall eine HScrollbar haben...
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Cuin,

du kannst nicht alle deine vielen Fragen in einen Mammut-Thread stecken. Außerdem hast du jetzt ja schon eine ziemlich große, kostenlose "Anschubfinanzierung" bekommen. Du musst dich da auch bitte mal alleine durchbeißen. Und im Zweifel immer erstmal alles selbst ausprobieren und nach eigenen Lösungen suchen. Wir helfen ja gerne wenn es wirklich nicht mehr alleine weitergeht, aber du kannst uns bitte nicht als ständige Hilfestellung missbrauchen, nur damit du schneller vorankommst. Vielen Dank für dein Verständnis.

herbivore
private Nachricht | Beiträge des Benutzers