Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Echtzeitstrategie

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 10.07.2005, 23:03    Titel: Echtzeitstrategie Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Mecki
Igel


Anmeldungsdatum: 10.09.2004
Beiträge: 985
Wohnort: Niederbayern

BeitragVerfasst am: 10.07.2005, 23:05    Titel: Antworten mit Zitat

Jau, ich kam ja schon in den Genuss es zu spielen und es macht für eine derartige Vorabversion auch schon durchaus Spaß lächeln
Bin gespannt, was draus wird!

Grüßle,
Mecki
_________________
» Yodl.de: So sucht man gestern. verwundert
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 10.07.2005, 23:07    Titel: Antworten mit Zitat

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 zwinkern

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
Benutzer-Profile anzeigen Private Nachricht senden
marzec



Anmeldungsdatum: 13.10.2004
Beiträge: 267

BeitragVerfasst am: 10.07.2005, 23:18    Titel: Antworten mit Zitat

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 Zunge rausstrecken ) 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 Zunge rausstrecken. 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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 11.07.2005, 13:28    Titel: Antworten mit Zitat

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 zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 11.07.2005, 18:41    Titel: Antworten mit Zitat

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. zwinkern

Viele Grüße!
Sebastian
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 11.07.2005, 19:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 11.07.2005, 20:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 11.07.2005, 20:46    Titel: Antworten mit Zitat

Hallo.

Genau, MisterD. Um Probleme mit Umlauten zu vermeiden, kann man CHR$(...) verwenden. Beispiel:
Code:
PRINT CHR$(154); "berraschung!"


Am besten wäre es, die Sonderzeichen, die bei der Darstellung von Windowsumlauten entstehen, in einer ReplaceUmlaute Function gegen die richtigen Umlaute auszutauschen.

Viele Grüße!
Sebastian
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 11.07.2005, 21:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 11.07.2005, 21:40    Titel: Antworten mit Zitat

Die wenigen Millisekunden verlangsamen das Spiel nicht merklich.
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 11.07.2005, 22:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
marzec



Anmeldungsdatum: 13.10.2004
Beiträge: 267

BeitragVerfasst am: 11.07.2005, 23:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
marzec



Anmeldungsdatum: 13.10.2004
Beiträge: 267

BeitragVerfasst am: 11.07.2005, 23:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz