Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 11.07.2005, 00:03 Titel: Echtzeitstrategie |
|
|
Hallo Leute!
Ich habe in den letzten 2 Wochen ein Echtzeitstrategiespiel programmiert, bzw. damit begonnen:
www.dagere.de.vu/DI.html
Der Link erklärt das Spiel und bietet es zum Download an.
Es ist noch nicht fertig, eher im Entwicklungsstadium, aber besser mir sagt jetzt jemand nen Bug als das ich dann später alle schleifen ändern muss, und das heißt ja Projektvorstellung, net fertige Progs vorstellung.
Ich würde mich über Kritik, Anregungen, Wünsch(am besten Levelaufbau bei derzeitigem Spielstand) freuen. Ebenso über Hilfe, wieso das im Inet so lahm ist und im Heimnetzwerk das alles gut klappt. |
|
Nach oben |
|
|
Mecki Igel
Anmeldungsdatum: 10.09.2004 Beiträge: 985 Wohnort: Niederbayern
|
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 11.07.2005, 00:07 Titel: |
|
|
schon mal als tipp für die nächste hompage: Gelegentlich ein Zeilenumbruch schadet nicht, den Text einfach mal in Word kopiert und F7 gedrückt ist auch kein Fehler und mach mal einen nicht so augenkrebsartigen hintergrund..
wegen der sache, das dir kein derartiges spiel bekannt ist: Es gibt garantiert mindestens 10.. Aber mach trotzdem ruhig weiter
Spiel schau ich mir ma an.
/edit: Testbricht: HILFEE Ich brauch eine Minimap xD man findet sonst nix.
dann hatte ich irgendwie nen Bug bei dem Cursor, da hing ne bunte ecke dran. Was du auch verbessern solltest sind die klickzonen für die Raumschiffe, ich musste links über die objekte klicken um sie zu "treffen".
Ach und: Die Kampfstation kann keine Kampfschiffe bauen, da hast du den Knopf vergessen (falls das schon gehen sollte).
Läuft übrigens relativ schnell auf 3.4 GHz.. eventuell solltest du das noch auf schnellen PCs etwas mehr bremsen. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
|
marzec
Anmeldungsdatum: 13.10.2004 Beiträge: 267
|
Verfasst am: 11.07.2005, 00:18 Titel: |
|
|
sieht ja schon mal nicht schlecht aus.
grund für das unterschiedliche verhalten übers lan und inet is lag. bei einem lan gehen keine ( oder sollten keinen ) pakete verloren gehen, beim inet tun sie das. d.h. resend der messages etc. je nachdem welches protokoll du gewählt hast ( tcp, udp ) wird das package entweder automatisch nochmal geschickt oder du mußt selbst dafür sorgen.
im falle eines echtzeitstrategie spiels is lag aber nicht wirklich ein problem. grundvorraussetzung für ein lagfreies spielgefühl bei rts games ist dass das spiel im endeffekt rundebasierend . jedoch dauert eine runde immer genau eine bestimmte zeit lang ( z.B. 500ms ) innerhalb derer alle aktionen vom spieler ( mousclicks ) aufgezeichnet werden. neben dem aufzeichnen während einer runde werden die befehle aus der vorrangegangenen runde ausgeführt. des weiteren muß der server garantieren, dass alle spieler zu beginn einer runde alle befehle der anderen spieler der letzten runde haben. so simuliert jeder auf seinem pc das gesamte spiel und alles was du versenden mußt sind lediglich die mausklicks die jeder client selbst auswertet. grundvorraussetzung dafür ist natürlich ein deterministisches system, d.h. wenn du irgendwo zufallswerte generierst dann müssen alle clients mit dem selben seed ( random timer <- timer wäre seed ) beginnen. _________________ Yagl - yet another gameprogramming library |
|
Nach oben |
|
|
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 11.07.2005, 14:28 Titel: |
|
|
So...zur Geschwindigkeit:
Ich denke, das Problem liegt wo ganz anders, nähmlich bei den Schleifen
Ich teste z.B. ob ein Objekt das nicht im Bildschirm ist angeklickt wird usw. Ich denke, das muss ich mal überarbeiten.
Das mit den Runden ist ne gute Idee, bei den Qb Times war da auch ein Code für:
Code: | DO ' Start der Main-Schleife
delay# = TIMER
...
FOR DELAY=1 TO 10000: NEXT DELAY
LOCATE 1, 1: PRINT TIMER-delay#
LOOP
|
Problem ist, das verzögert nach Sekunden(in QB), wenn ich den Text dazu richtig verstanden hab. Wie mache ich das in Millisekunden?
Und, 500 ms/runde ist zu viel, 1/30 Sekunde oder so, denn Das Auge kann glaube ich ab 24 Bildern nicht mehr Unterscheiden.
Mir sind keine 10 Freewarespiele mit solchen Systemvorraussetzungen bekannt, wäre nett wenn du mal ne Addresse verätst, damich ich des auch spielen kann!
Ach ja, Mimimap is das graue oben Rechts.
Ich habe nen grafischen Cursor, irgendwie klappt der auf manchen Computern nicht, ich werde das mal anschauen, und nen Link posten wo es klappen sollte(wenn ich nen Fehler find). Außerdem läuft das eigentlich nach Netzwerkgeschwindigkeit, nicht nach Rechnergeschwindigkeit. Und das Tut is ja nur ein Tut, und die hälfte der Funktionen vom Tut sind net ma im richtigen Spiel |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 11.07.2005, 19:41 Titel: |
|
|
Hallo.
Bei mir schnellt die CPU-Auslastung an vielen Stellen auf 100% hoch. In Schleifen usw. solltest du SLEEP 5 (=<5ms, Wert eigentlich egal) einbauen, damit die Kontrolle zwischenzeitig an das System zurückgegeben wird, was eine zu hohe Prozessorauslastung verhindert. In VisualBasic gibt's dazu den Befehl DoEvents, in FreeBasic tut's ein kleines SLEEP von ein paar Millisekunden.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 11.07.2005, 20:31 Titel: |
|
|
Ich würde dir außerdem empfehlen, eine einene PRINT-Routine zu schreiben oder keine Umlaute zu verwenden, denn
andernfalls sieht es ganz schön unprofessionell aus...
jb |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 11.07.2005, 21:41 Titel: |
|
|
zu dem Rundenbasierenden: Das 500ms-Interval soll ja nicht für die Grafik gelten! Die Grafik lässt du wie sie ist, du überträgst halt nur alle Ereignisse der letzen 500ms auf einmal, sprich wenn eine Einheit einen anderen Weg als den bisherigen einschlägt oder so. Laufen lassen kannst du die schon während den 500 ms, währenddessen ist eben dann keine Richtingsänderung möglich da die Daten dafür erst nach der "runde" übertragen werden. So war das gemeint. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 11.07.2005, 22:37 Titel: |
|
|
Das mit dem Rundenbasierend wäre eine gute Idee, funktioniert jedoch nicht: ich übertrage Mausposition und klicks, nicht Erreignisse.
Und zum Sleep in Schleifen: wird das spiel dann nicht noch langsamer?
Ich bräuchte mal so was, mit dem ich z.b. nach jedem Schleifendurchlauf warte, bis 1/27 sekunde vergangen ist. |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 11.07.2005, 23:51 Titel: |
|
|
versuchs mal mit TIMER, und das mit dem Rundenbasierend: Dann überträgst du hallt alle 250ms sämtliche gemachten Mausklicks, ist doch auch kein problem? oder mach alle 100ms und nur den letzten klick, weil viel schneller als 10 mal pro sekunde werden nur die wenigsten klicken. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
|
marzec
Anmeldungsdatum: 13.10.2004 Beiträge: 267
|
Verfasst am: 12.07.2005, 00:53 Titel: |
|
|
MisterD hat Folgendes geschrieben: | zu dem Rundenbasierenden: Das 500ms-Interval soll ja nicht für die Grafik gelten! Die Grafik lässt du wie sie ist, du überträgst halt nur alle Ereignisse der letzen 500ms auf einmal, sprich wenn eine Einheit einen anderen Weg als den bisherigen einschlägt oder so. Laufen lassen kannst du die schon während den 500 ms, währenddessen ist eben dann keine Richtingsänderung möglich da die Daten dafür erst nach der "runde" übertragen werden. So war das gemeint. |
eh nein, du überträgst nicht die daten für jede einheit. das wäre zuviel. die normale herangehensweise für rts' ist es nur die mousclicks zu übertragen und auf jedem einzelnen client anhand dieses inputs zu berechnen was am ursprungsclient von dem das geklicke kommt passiert ist. ein beispiel:
client 1 selektiert eine einheit und klickt auf position x, y und sendet dieses event an den server. dieser klickt wird gespeichert und dann im nächsten turn ausgeführt ( 500ms später, starcraft z.B. macht das auch so merkt keine sau vor allem wenn du bei einem klick auch noch so sachen machst wie sounds abspielen etc. )
500ms haben alle anderen clients diesen klick von client 1 zum ausführen bereit und machen das auch. was sie im grunde machen ist: sie tun so als würde ein zweiter spieler am pc sitzen mit einer zweiten maus und schicken nur diese klicks/position and die routine für die verarbeitung des inputs. damit passiert auf diesen clients das selbe wie auf dem ursprungsclient. _________________ Yagl - yet another gameprogramming library |
|
Nach oben |
|
|
marzec
Anmeldungsdatum: 13.10.2004 Beiträge: 267
|
Verfasst am: 12.07.2005, 00:57 Titel: |
|
|
Progger_X hat Folgendes geschrieben: | Das mit dem Rundenbasierend wäre eine gute Idee, funktioniert jedoch nicht: ich übertrage Mausposition und klicks, nicht Erreignisse.
|
jedes große rts auf diesem planeten macht das unter anderem: warcraft 1,2,3, age of empires 1,2, starcraft, command & conquer. siehe dazu http://www.gamasutra.com/features/20010322/terrano_01.htm das ist ein post mortem von age of empires' network coder der genau erklärt wie age of empires dieses problem löst. heut zu tage wird der netzwerk code jedoch meist in einem seperaten thread untergebracht. für die seite brauchst du einen gamasutra account. der is frei und zahlt sich aus die haben die besten tutorials zu allen möglichen themen ( neben flipcode und gamedev.net ) _________________ Yagl - yet another gameprogramming library |
|
Nach oben |
|
|
|