Gemeinsame HighScore-Liste


2006-09-11 12:15 #1
Im Bezug auf p089.ezboard.com/fgameofrobotfrm38.showMessage?topicID=49.topic eröffne ich hiermit einen neuen Thread.
Ich könnte mir vorstellen, dass auf manchen Rechnern mehrere Spieler quasi "gegeneinander" spielen und eine gemeinsame HighScore-Liste benötigen. Ließe sich das einrichten?
Theoretisch könnte so eine Liste sogar im Netzwerk verfügbar sein, was aber leicht lösbare Sharing-Probleme mit sich bringt. Denn die HighScore-Datei muss ja nicht permanent geöffnet bleiben. 😫
Gruss,
____________
_/_lachmann
/

Gruß,
_________
_/_
/lachmann

2006-09-11 12:34 #2
Quote:
Im Bezug auf p089.ezboard.com/fgameofrobotfrm38.showMessage?topicID=49.topic eröffne ich hiermit einen neuen Thread.

Brauchst Dich nicht zu verstecken, genau so ist es richtig!
Quote:
Ich könnte mir vorstellen, dass auf manchen Rechnern mehrere Spieler quasi "gegeneinander" spielen und eine gemeinsame HighScore-Liste benötigen. Ließe sich das einrichten?
Klar, man muss nur die Speicherpfade auf ein gemeinsames Verzeichnis umlenken oder eben mit der gleichen Anmeldung spielen. Wenn man dann nicht auch noch die Spielstände teilen will (was sicher nicht so toll ist), werde ich wohl doch einen weiteren Eintrag für die Highscore-Tabellen einführen.
Hmm, da wäre es zu überlegen, ob man die Highscores zur Vereinfachung nicht für alle Episoden in ein gemeinsames Verzeichnis packt...
Quote:
Theoretisch könnte so eine Liste sogar im Netzwerk verfügbar sein, was aber leicht lösbare Sharing-Probleme mit sich bringt. Denn die HighScore-Datei muss ja nicht permanent geöffnet bleiben.
Permanent geöffnet sind die ohnehin nicht, aber ganz so einfach ist das nun auch wieder nicht, wenn man nicht irgendwo einen Highscore-Server einrichten will. Letztendlich hat man zwei sehr unterschiedliche Probleme:
- Wenn von zwei Rechnern gleichzeitig die Datei modifiziert werden soll, muss dies vernünftig abgesichert werden. Sowas nennt sich Transaktions-Management.
- Wenn ein sich die Datei ändert, sollten natürlich die gerade offenen Highscore-Tabellen auf anderen Systemen zeitnah aktualisiert werden. Das wäre schon ein ziemlicher Eingriff in die Tabellen-Anzeige.
Dazu gesellt sich noch das ebenfalls im anderen Thread besprochene Problem mit den Rechten. Normale User haben unter XP (und Folgenden) nur in ihren eigenen Bereichen (Verzeichnisse und Registry) Schreibrechte, hier müsste erstmal ein Administrator ein gemeinsames Verzeichnis erstellen und die Rechte entsprechend einrichten.
Sorry, für mich ist das alles ziemlicher Overkill für einen, in meinen Augen ziemlich theoretischen, Nutzen. Wir können ja 'mal eine Umfrage starten, wie viele von uns konkret eine solche Mehrspieler-Unterstützung bräuchten...😉

waiting www.tom-productions.de - www.tofahrn-foto.de - www.tofahrn.de

2006-09-11 20:23 #3
Dazu kommt noch, dass ein Robot-Highscore ja nicht wirklich aussagekräftig ist.
Dazu gibt es viel zu viele Exploits.
Zum Beispiel kann ich ja unendlich oft in einen Raum gehen, in dem bei
jedem Betreten immer wieder neue Roboter erscheinen und diese dann
"ineinander jagen".
So kann ich mir theoretisch unendlich viele Punkte ansammeln - eine
entsprechende Ausdauer vorausgesetzt.
---
Webmaster Game-of-Robot.de
Webmaster Prince of Persia World (http://www.princeofpersiaworld.com)

Webmaster Game-of-Robot.de

2006-09-12 04:36 #4
Quote:
Klar, man muss nur die Speicherpfade auf ein gemeinsames Verzeichnis umlenken oder eben mit der gleichen Anmeldung spielen.
Ja, oder halt in der Registry. Das wäre letztlich ja egal. Das Problem mit dem gemeinsamen Zugriff bleibt natürlich auch da.
Aber gab's unter XP Home nicht auch einen "Gemeinsamen Bereich"? - Hmm, keine Ahnung, so ein XP-Experte bin ich leider nicht... 😰
Quote:
- Wenn von zwei Rechnern gleichzeitig die Datei modifiziert werden soll,
Letztlich ist so ein Dateizugriff doch nur kurzfristig, so dass nach einer Pause noch ein Versuch gemacht werden könnte.
Quote:
- Wenn ein sich die Datei ändert, sollten natürlich die gerade offenen Highscore-Tabellen auf anderen Systemen zeitnah aktualisiert werden. Das wäre schon ein ziemlicher Eingriff in die Tabellen-Anzeige.
Das wäre natürlich super, allerdings würde ich hier einen echten Overkill sehen. Es würde IMHO genügen, wenn man vor einem neuen HighScore-Eintrag die Liste kurz neu einliest.
D.h. die Liste würde sich nicht ändern, wenn irgendwo jemand eine Änderung einbringt, sondern nur, wenn mal selbst aktiv wird: entweder über einen "Refresh"-Schalter oder halt beim Neustart des Spiels bzw. Neuaufrufs der Liste.
Quote:
Sorry, für mich ist das alles ziemlicher Overkill für einen, in meinen Augen ziemlich theoretischen, Nutzen. Wir können ja 'mal eine Umfrage starten, wie viele von uns konkret eine solche Mehrspieler-Unterstützung bräuchten...
Zugegeben, die meisten Spiele werden ja einzeln gespielt; und Robot ist kein klassisches Netzwerkspiel. Es war ja nur so eine Idee. Du solltest nicht allzuviel Hirnschmalz da 'rein stecken.
Ich kam darauf, weil mein Sohn mit Robot Junior anfing (man muss ihn ja zur Elite der Spiele bringen 😉 ). Ich habe daraufhin das Verzeichnis für ihn geöffnet, damit wir eine gemeinsame HighScore-Liste haben.
Gruss,
____________
_/_lachmann
/

Gruß,
_________
_/_
/lachmann

2006-09-12 10:06 #5
Quote:
Quote:
Klar, man muss nur die Speicherpfade auf ein gemeinsames Verzeichnis umlenken oder eben mit der gleichen Anmeldung spielen.

Ja, oder halt in der Registry. Das wäre letztlich ja egal. Das Problem mit dem gemeinsamen Zugriff bleibt natürlich auch da.
Einen gleichzeitigen Zugriff auf einer Workstation gibt's ja nicht, weil immer nur einer arbeiten kann und die Datei in der Tat nur nur geöffnet ist. Das Refresh-Problem bleibt allerdings bestehen...
Quote:
Aber gab's unter XP Home nicht auch einen "Gemeinsamen Bereich"? - Hmm, keine Ahnung, so ein XP-Experte bin ich leider nicht...
Klar, es gibt die All Users, aber da dürfen normale Benutzer eben nur draus lesen und nichts modifizieren. Das gilt bei XP per Konvention für alle globalen Bereiche, also auch die Registry.
Quote:
Quote:
- Wenn von zwei Rechnern gleichzeitig die Datei modifiziert werden soll,
Letztlich ist so ein Dateizugriff doch nur kurzfristig, so dass nach einer Pause noch ein Versuch gemacht werden könnte.
Das ist bei der aktuellen Implementation der Highscore-Liste leider etwas zu kurz gedacht. Da gibt es eine Funktion zum Lesen und eine zum Schreiben der Highscore-Liste. Wenn ich nun den Highscore verändere, wird sie zuerst gelesen und dann wieder geschrieben. Zwischendurch ist sie offen, und kann theoretisch auch von einem anderen User modifiziert werden. Beim Zurückschreiben wären dann ggf. die letzten Änderungen verloren.
Klar, das ist statistisch meinetwegen sehr unwahrscheinlich, darf aber trotzdem nicht passieren. Dies zu ändern, würde ein (zugegeben simples) Transaktions-Management innerhalb der Highscore-Verwaltung erfordern, um hier eine saubere Serialisierung der Zugriffe gewährleisten zu können, und das wäre einfach Overkill.
Quote:
Du solltest nicht allzuviel Hirnschmalz da 'rein stecken.
Mach' ich nicht...😉

waiting www.tom-productions.de - www.tofahrn-foto.de - www.tofahrn.de

2007-05-08 14:37 #6
Hallo Andreas!
Also ganz so komplex wie du dein "Transaktions-Management" beschreibst, sehe ich das nicht. Wenn die Datei nur kurz geöffnet wird, wie du selbst schreibst, dann kann man diese doch exklusiv öffnen, d.h. die Datei für den Zugriff anderer Rechner sperren.
Klappt der Open nicht, reicht eine simple Schleife (etwas warten und dann erneut probieren) ... bis der Zugriff dann möglich ist. Dann kann man den Inhalt der Liste einlesen, die Liste ggf. modifizieren und zurückschreiben. Durch den Close wird der Zugriff auf die Datei für andere Rechner im Netzwerk automatisch wieder freigegeben.
Bis auf den Einbau einer kleinen Schleife um den Open der Datei und das Setzen einer zusätzlichen Option im Open selbst, sehe ich da keinen größeren Aufwand. ... also auch keine Notwendigkeit wirklich Gehirnschmalz zu investieren.
Tschau, Harald
2007-05-09 06:52 #7
Naja, das war ja auch mein ursprünglicher Ansatz. Theoretisch ist das nicht kompliziert. Aber nur Andreas kennt den Code und kann den Aufwand abschätzen.
Es wäre halt schön, wenn innerhalb eines Netzes gemeinsame High-Scores existieren würden.
Bei sicher fast jedem von uns steht der eigene Spielername zwischen bzw. über den "Vorgabenamen" von Robot. Die anderen Spieler im Netz haben jeweils ihre eigenen, persönlichen High-Score-Listen, die auch nicht anders aussehen (außer dass dann deren Name statt dem eigenen in der Liste steht).
Gruss,
____________
_/_lachmann
/

Gruß,
_________
_/_
/lachmann

2007-05-09 22:53 #8
Was das kennen des Quellcodes und somit die endgültige Abschätzung des Aufwandes betrifft, gebe ich dir recht. Auch wenn ich nichts mehr unter Windoof mache und die neueren Systeme nicht mehr kenne, ich habe selbst schon Programe geschrieben, die im Hintergrund ständig laufen mußten ... und ich kann darin kein Problem sehen den Zugriff von mehreren Rechnern auf die HighScore-Liste zu ermöglichen.
Zum einen dürfte der Zugriff auf die Liste wohl nur erfolgen, wenn das Spiel selbst gerade nicht läuft, also keine Spielelogik im Hintergrund zu verarbeiten ist. Zum anderen ist die Wahrscheinlichkeit einer Kollision derart gering und die Dauer der Blockade derart kurz, daß ich keine Ursache für ein Problem sehe, dies in das Spiel zu integrieren ... falls es bei einer Kollision wirklich mal zu einer Verzögerung beim Abspielen von Sound Effekten kommt, würde das auch nichts ausmachen (ich denke wir sprechen hier über eine einmalige Verzögerung, die vielleicht im Bereich von 200ms plus/minus liegen).
Tschau
Harald