Probleme mit einem Echtzeitspiel

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Geeecko

Betreff: Probleme mit einem Echtzeitspiel

BeitragSa, Mai 27, 2006 9:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe Probs. mit einem Spiel, (sowas wie ogame/spacenations) wenn ich
auf Bauen klicke dann wird an den Server gesendet baue das haus [ID].
Was wäre dann am besten? Also um zu gucken ob das gebäude fertig is.Wann es fertig wird in eine Textdatei schrieben oder im Programm durchlaufen lassen? Das wäre beim absturtz doof. Aber wenn ich es in eine Textdatei schriebe, stehe ich vor dem Aktualisierungs prob. vllt. kann ich es ja so machen, das er ALLE zeiten in eine Textdatei schreibt, und die dann immer nach 3min oder bis ein spieler on kommt aktualiesirt.
Was würdet ihr machen?

Goodjee

BeitragSa, Mai 27, 2006 10:04
Antworten mit Zitat
Benutzer-Profile anzeigen
hm...der server speichert alles in types und variablen und in texten...wenn er abschmiert musst du bzw ein programm alle variablen mit den werten der textdatei belegen
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

Geeecko

BeitragSa, Mai 27, 2006 10:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey, danke Cool
So mach eich das dan malk Very Happy
Nur ncoh nen Prob.:
Code: [AUSKLAPPEN]

   If Imagescollide(maus,mx,my,0,scroll_pic,900-100,350,1) And MouseHit(1) post_scroll=post_scroll-50
   If Imagescollide(maus,mx,my,0,scroll_pic,900-100,350,0) And MouseHit(1) post_scroll=post_scroll+50

Er prüft immer nur das erste...
wie mache ich des, das er beide prüft?

Hubsi

BeitragSa, Mai 27, 2006 10:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Am Anfang der Schleife mh=MouseHit(1) und im Programm nur noch auf mh prüfen. Warum und wieso siehe hier ql:MouseHit()
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

aMul

Sieger des Minimalist Compo 01/13

BeitragSa, Mai 27, 2006 12:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ausserdem ist folgendes sinnvoller:
Code: [AUSKLAPPEN]
if MouseHit(1) then
    if erstes Imagecollide ;blub
    if zweites Imagecollide ;blub
endif


Und wenn ausgeschlossen ist, das man beide Bilder gleichzeitig berühren kann:
Code: [AUSKLAPPEN]
if MouseHit(1) then
    if erstes Imagecollide
        ;blub
    elseif zweites Imagecollide
        ;blub
   endif
endif


MfG

EDIT:
Ausserdem solltest du versuchen das sehr langsame imagecollide zu vermeiden, wenn deine zu prüfenden Bilder annähernd Viereckig, oder sehr klein sind, dann würde ich mir dafür einfach eine eigene Funktione schreiben, die nur die Koordinaten überprüft(so was wie Rectsoverlap).
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Geeecko

BeitragSo, Mai 28, 2006 9:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Jett ncoh eins:
Das mit dem rohstoffe bekommen.
auch mit types???

Goodjee

BeitragSo, Mai 28, 2006 9:44
Antworten mit Zitat
Benutzer-Profile anzeigen
ein typefield mit dem wert den man hat und eins mit dem was man belkommt...pro minute oder was weiß ich...dann wird das jede minute einmal aufgerufen und schon kreigt man rohstoffe
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

Cent

BeitragSo, Mai 28, 2006 9:44
Antworten mit Zitat
Benutzer-Profile anzeigen
aMul hat Folgendes geschrieben:
Ausserdem ist folgendes sinnvoller:
Code: [AUSKLAPPEN]
if MouseHit(1) then
    if erstes Imagecollide ;blub
    if zweites Imagecollide ;blub
endif


Und wenn ausgeschlossen ist, das man beide Bilder gleichzeitig berühren kann:
Code: [AUSKLAPPEN]
if MouseHit(1) then
    if erstes Imagecollide
        ;blub
    elseif zweites Imagecollide
        ;blub
   endif
endif


MfG

EDIT:
Ausserdem solltest du versuchen das sehr langsame imagecollide zu vermeiden, wenn deine zu prüfenden Bilder annähernd Viereckig, oder sehr klein sind, dann würde ich mir dafür einfach eine eigene Funktione schreiben, die nur die Koordinaten überprüft(so was wie Rectsoverlap).

Aber das muss in eine schleife sonst cfragt er es nur einmal ab. Repeat Until wäre glaub ich nich schlecht.

Gruß
Cent
User posted image

Goodjee

BeitragSo, Mai 28, 2006 10:11
Antworten mit Zitat
Benutzer-Profile anzeigen
ganz so dumm ist gaia glaube ich doch nicht...
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

Geeecko

BeitragSo, Mai 28, 2006 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
So, man bekommt jetzt pro minute: stufe*10
Bessere Formel wusste ich net Sad

Ich abe es aber ohne types gemacht Very Happy
es gibt eine datei wo alle user drin sthen.
die bin ich durch gegangen.
so jetzt die gebäude.

x-pressive

BeitragMo, Mai 29, 2006 9:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin mir nicht sicher, ob ich dich richtig verstanden habe: du möchtest etwas bauen und hast Angst, das der Server abschmiert und das Gebäude dann quasi nie "fertig" wird? Stimmt das so?

Gib doch jedem Gebäude beim Baustart einen Zeitstempel (MilliSecs). Wenn du jetzt weisst, wie lange ein Gebäude zum Bauen benötigt (Konstante oder Formel), dann braucht man nur den Zeitstempel eines Gebäudes checken, um herauszufinden, ob der Bau bereits beendet ist. Eine Aktualisierung ist dann nicht nötig.

Beispiel:

Code: [AUSKLAPPEN]
bauzeit% = 20 * 1000 ; 20 SEKUNDEN

; CHECKEN, OB GEBÄUDE BEREITS FERTIG IST:

If MilliSecs() - Haus\erstellungszeit >= bauzeit Then
   ; DIESES GEBÄUDE IST FERTIG
End If
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Geeecko

BeitragMo, Mai 29, 2006 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
nein, im prinzip ist es ja nur, wenn der server abschmiert
gehen alle bauafträge verloren.
Ich habe es jetzt so gemacht, das ich ne var in einer textdatei auf 1 umändern kann, und dann kann inchts mehr gebaut werden. da steht dann
es kann cniht gebaut werden, da der server gewartet wird Smile

x-pressive

BeitragMo, Mai 29, 2006 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Sprichst du eigentlich von einem Host-Programm oder einem Internet-Server? Wenn du letzteren meinst und mehrere Leute darauf zugreifen, solltest du wirklich kein Textfile benutzen. Gleichzeitige Schreib- und Lesezugriffe können selbiges im Nullkommanix schrotten -es sei denn, du blockierst das File, was aber auch keine gute Lösung ist. Abgesehen davon liegt die Serverlast beim Parsen von (grossen) Textdateien um einiges höher, als beim Benutzen einer Datenbank. Die Betreiber sehen das nicht gerne, einige verbieten das sogar.

Das nur mal am Rande, wenn es sich um einen Internet-Server handeln sollte. Da würde ich doch lieber eine Datenbank benutzen.
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Kryan

BeitragMo, Mai 29, 2006 19:45
Antworten mit Zitat
Benutzer-Profile anzeigen
@x-pressive:

wenn man den server so programmiert, dass er immer eine Sache zur Zeit machen kann, dann könnte man doch eigentlich auch mit Dateien arbeiten, oder??
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!
 

coldie

BeitragMo, Mai 29, 2006 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
?
@xpressive:
(Ich nehme an das "schrotten" bezog sich auf die textfile)

wie wärs dann einfach mit zwei textfiles? Eins für den eingang und eins für den Ausgang.

x-pressive

BeitragDi, Mai 30, 2006 8:04
Antworten mit Zitat
Benutzer-Profile anzeigen
@Kryan: viel zu umständlich. Und ein Spieler möchte sicher nicht alle paar Sekunden eine "Anfrage konnte nicht bearbeitet werden"-Meldung erhalten, weil der Server alle Anfrage blockiert, während das Textfile offen ist. Ausserdem erzeugt das ja noch mehr Last, weil dann jeder Spieler so lange eine Anfrage erneut stellen muss, bis das File mal "frei" ist. Das ist keine Lösung. Und gerade bei grösseren Textfiles kann so ein Vorgang durchaus einige Sekunden dauern.

Man kann solche Textfiles während dem Zugriff "locken", aber selbst das bringt nichts. Ich habe zum letzten mal vor fünf Jahren mit Textfiles auf dem Server gearbeitet. Alle haben mir davon abgeraten und schon damals über diese "Steinzeit-Methode" gelacht. Aber ich habe die Warnungen in den Wind geschossen.

War ein simples Gästebuch. Bei häufigen Zugriffen kam es dann alle paar Tage vor, das die Datei abgeschossen wurde. In den meisten Fällen war sie einfach leer, hin und wieder waren aber auch einige Einträge doppelt vorhanden. Das ist ein leidiges Problem, wenn viele Zugriffe eine Textdatei zur gleichen Zeit bearbeiten.

Gerade deshalb (und weil es VIEEEEEL schneller und bequemer ist) benutzt man dafür MySQL. Das ist im Vergleich dazu das reinste Paradies: man muss nichts mehr umständlich parsen, braucht sich nicht mehr mit File Locking rumärgern und kann auf einmal unglaublich pfiffige Abfragen machen und Daten miteinander kombinieren, automatisch sortieren, gezielt rauslöschen und, und, und...

Bietet ja heute jeder, aber auch wirklich jeder Host an. Und das parsen eines Textfiles kann, im Gegensatz zu einer Datenbank, unglaublich viel Serverlast erzeugen. Eine Datenbank kann das hundertfache an Information handeln. Viele Hosts verbieten deshalb das Benutzen von Flat Files ausdrücklich in den AGB.

MySQL ist nicht schwer, es gibt viele Tutorials dazu. Und gerade bei einem Echtzeit-Strategiespiel, wo es darum geht, Information sauber und effizient zu speichern -aber vor allem, viele Spieler gleichzeitig zu bedienen, lohnt sich das und ist der einzig richtige Weg.
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group