 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 01.01.2005, 18:28 Titel: Dateizugriff |
|
|
Hi!
Also, ich habe ein relativ großes Programm geschrieben, der Code ist
http://paste.phpfi.com/43964
hoffe ich.
Jedenfalls soll das so werden, das 4 Computer dann auf das Laufwerk S auf dem Hauptcomputer zugreifen, dort dann hallt auch in die Datei was reinschreiben können.
Wie kann ich dann das Angriffssystem organisieren, und irgendwie organisieren, das alle gleich schnell sind(so das der schnellere Computer net mehr Gold erhällt).
Spieler 2 ist stets die KI, sprich einer den man angreifen kann, wenn man die anderen gerade nicht kleinbekommt, der wird vom Hauptcomputer aus gesteuert. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 01.01.2005, 20:48 Titel: |
|
|
Hallo.
Wenn du Warteschleifen vermeidest, sollte die unterschiedliche Rechengeschwindigkeit kein größeres Problem sein.
Das Lesen und Schreiben von so ein paar Textzeilen geht auf allen PCs etwa gleich schnell.
Das Programm hättest du aber auch ruhig ins Forum posten können. So lang ist es ja nicht.
Code: | eigenschaften(1, 1) = 100
eigenschaften(2, 1) = 100
eigenschaften(3, 1) = 100
eigenschaften(4, 1) = 100
eigenschaften(5, 1) = 100
eigenschaften(1, 2) = 1
eigenschaften(2, 2) = 1
eigenschaften(3, 2) = 1
eigenschaften(4, 2) = 1
eigenschaften(5, 2) = 1
eigenschaften(z, 10) = 1
eigenschaften(2, 10) = 1
eigenschaften(1, 3) = 100
eigenschaften(2, 3) = 100
eigenschaften(3, 3) = 100
eigenschaften(4, 3) = 100
eigenschaften(5, 3) = 100
eigenschaften(1, 4) = 10
eigenschaften(2, 4) = 10
eigenschaften(3, 4) = 10
eigenschaften(4, 4) = 10
eigenschaften(5, 4) = 10 |
Bei größeren Projekten, wo möglicherweise der Speicher knapp werden könnte, sollte man solche Informationen dringlichst in externe Dateien auslagern. dreael hat hier auch neulich einen Artikel über QB-Anfängerfehler gepostet.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 02.01.2005, 14:23 Titel: Programm |
|
|
Gut, deine Entscheidung, ich poste es.
Aber: Das reinschreiben ist ja nur eins, das auslesen das nächste. Wenn ich mich nicht irre darf aber immer nur ein Computer reinschreiben! Außerdem hat der schnellste Rechner 2,8Ghz und 512 MBR, der langsamste 100 MHZ und 16 MBR, gibt also schon nen Unterschied!
Das vollständige Programm:
Code: |
DECLARE SUB netz ()
DECLARE SUB kampf ()
DECLARE SUB anzeige ()
DECLARE SUB taststand ()
DIM SHARED eigenschaften(10, 10) AS INTEGER
DIM SHARED Name1(10) AS STRING
INPUT "Nummer(<6, nicht 2): ", z
INPUT "Name: ", Name1(z)
Name1(2) = "Ki-Town"
eigenschaften(1, 1) = 100
eigenschaften(2, 1) = 100
eigenschaften(3, 1) = 100
eigenschaften(4, 1) = 100
eigenschaften(5, 1) = 100
eigenschaften(1, 2) = 1
eigenschaften(2, 2) = 1
eigenschaften(3, 2) = 1
eigenschaften(4, 2) = 1
eigenschaften(5, 2) = 1
eigenschaften(z, 10) = 1
eigenschaften(2, 10) = 1
eigenschaften(1, 3) = 100
eigenschaften(2, 3) = 100
eigenschaften(3, 3) = 100
eigenschaften(4, 3) = 100
eigenschaften(5, 3) = 100
eigenschaften(1, 4) = 10
eigenschaften(2, 4) = 10
eigenschaften(3, 4) = 10
eigenschaften(4, 4) = 10
eigenschaften(5, 4) = 10
angrfan = 0
DO
CALL netz
SCREEN 9, , seite, 1 - seite
CLS
IF angrfan = 0 THEN
abzug = 10 + eigenschaften(z, 2) * eigenschaften(z, 2) * eigenschaften(z, 2) * 2
CALL anzeige
END IF
a$ = INKEY$
IF angrfan > 0 THEN
angrfan = angrfan + 1
PRINT "Zur?ckschalten(Taste:5) m”chglich in: " + STR$(50 - angrfan)
PRINT "Spieler die angegriffen werden k”nnen: "
x = 0
DO
IF eigenschaften(x, 10) = 1 THEN PRINT Name1(x) + STR$(x)
x = x + 1
LOOP UNTIL x > 9
IF VAL(a$) < 11 AND VAL(a$) > 0 AND eigenschaften(VAL(a$), 10) = 1 THEN
PRINT "Angriff!"
angreifer = z
verteidiger = VAL(a$)
CALL kampf
END IF
END IF
eigenschaften(z, 1) = eigenschaften(z, 1) + eigenschaften(z, 2)
eigenschaften(2, 1) = eigenschaften(2, 1) + eigenschaften(2, 2)
IF angrfan = 0 THEN
CALL taststand
END IF
IF a$ = "5" AND angrfan < 50 THEN
angrfan = 1
END IF
'hinschallten
IF a$ = "5" AND angrfan > 50 THEN
angrfan = 0
END IF
'zur?ckschallten
seite = 1 - seite
LOOP UNTIL ende = 1
SUB anzeige
SHARED z
SHARED abzug
PRINT "Optionen:"
PRINT "(1) Goldmiene bauen"
PRINT "Kosten: " + STR$(abzug)
PRINT "(2) Krieger bauen"
PRINT "Kosten: 5"
PRINT "(3) Krieger bauen(100)"
PRINT "Kosten: 500"
PRINT "(4) Wall bauen"
PRINT "Kosten: 100"
PRINT "(5) Angreifen"
PRINT "Gold: " + STR$(eigenschaften(z, 1))
PRINT "Goldmienen: " + STR$(eigenschaften(z, 2))
PRINT "Krieger: " + STR$(eigenschaften(z, 3))
PRINT "Wall: " + STR$(eigenschaften(z, 4))
END SUB
SUB kampf
SHARED angreifer
SHARED verteidiger
SHARED angrfan
eigenschaften(angreifer, 3) = eigenschaften(angreifer, 3) - eigenschaften(verteiger, 4)
IF eigenschaften(angreifer, 3) > eigenschaften(verteidiger, 3) * 2 THEN
PRINT "sieg"
angrfan = 0
eigenschaften(angreifer, 3) = eigenschaften(angreifer, 3) - eigenschaften(verteidiger, 3) * 2
eigenschaften(verteidiger, 3) = 0
eigenschaften(angreifer, 1) = eigenschaften(angreifer, 1) + eigenschaften(verteidiger, 1)
eigenschaften(verteidiger, 1) = 0
PLAY "c"
END IF
IF eigenschaften(angreifer, 3) * 2 <= eigenschaften(verteidiger, 3) THEN
PRINT "niederlage"
angrfan = 0
eigenschaften(verteidiger, 3) = eigenschaften(verteidiger, 3) * 2 - eigenschaften(angreifer, 3)
eigenschaften(angreifer, 3) = 0
PLAY "g"
END IF
END SUB
SUB netz
SHARED z
OPEN "S:\Network.txt" FOR OUTPUT AS #1
x = 0
DO
WRITE #1, eigenschaften(z, x)
x = x + 1
LOOP UNTIL x > 10
WRITE #1, ""
x = 0
DO
WRITE #1, eigenschaften(2, x)
x = x + 1
LOOP UNTIL x > 10
CLOSE
END SUB
SUB taststand
SHARED a$
SHARED abzug
SHARED z
IF a$ = "1" AND eigenschaften(z, 1) > abzug THEN
eigenschaften(z, 1) = eigenschaften(z, 1) - abzug
eigenschaften(z, 2) = eigenschaften(z, 2) + 1
END IF
IF a$ = "2" AND eigenschaften(z, 1) > 5 THEN
eigenschaften(z, 3) = eigenschaften(z, 3) + 1
eigenschaften(z, 1) = eigenschaften(z, 1) - 5
END IF
IF a$ = "3" AND eigenschaften(z, 1) > 500 THEN
eigenschaften(z, 3) = eigenschaften(z, 3) + 100
eigenschaften(z, 1) = eigenschaften(z, 1) - 500
END IF
IF a$ = "4" AND eigenschaften(z, 1) > 100 THEN
eigenschaften(z, 1) = eigenschaften(z, 1) - 100
eigenschaften(z, 4) = eigenschaften(z, 4) + 1
END IF
END SUB
|
Wie mache ich das also, das die restlichen Spieler sich austauschen(muss ja am Ende der Schleife sein; außerdem muss am Anfang meinentwegen eine Datei "Connected" gemacht werden, in die alle 1 schreiben, oder 1 dazuaddieren, und ihre Zahl schreiben, so das der Server weiß wanns loß geht. Hab mir das so gedacht das vllt der Server dann immer 1 bekommt, die "KI"(ist ja net wirklich intelligent) die 2 und für jeden eingeloggten eins dazu kommt, und dann per Tastendruck die Zahl reicht und es los geht. Das schaff ich noch, aber wie macht man das dann das andauernd die Daten übertragen werden, am ende jeder Schleife(ist in S:\Datei glaubsch), am besten als Sub, die Eigenschaften werden sowieso geshared, und so wärs übersichtlicher. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 02.01.2005, 16:35 Titel: P100 |
|
|
Hallo.
Selbst bei einem P100 dauert das Schreiben von ein paar Zeilen nur Sekundenbruchteile.
Um dennoch für den Fall der Fälle abgesichert zu sein, musst du mit ON ERROR was bauen.
Beispiel fürs Lesen, während jemand anderes schreibt:
Code: | ON ERROR RESUME NEXT
DO
OPEN "DATEI.TXT" FOR INPUT AS #1
INHALT$ = "ERR"
LINE INPUT #1, INHALT$
'HIER springt er bei einem Fehler weg, an die bei ON ERROR vorgegebene Stelle,
'also den nächsten Befehl. Also prüfen wir einfach, ob der Letzte
'ausgeführt wurde.
IF INHALT$ = "ERR" THEN
PRINT "Nix eingelesen, wir versuchens nochmal."
ELSE
PRINT INHALT$
EXIT DO
END IF
CLOSE #1
LOOP |
Schreiben während jemand anderes schreibt/liest geht einfacher. Variable weglassen und nur anhand des ERR Codes prüfen, ob das Schreiben erfolgreich war und wenn nicht, dann einfach nochmal probieren.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 02.01.2005, 18:59 Titel: Frage |
|
|
Wie müsste der Sub net dann aussehen, damit alle spieler reinschreiben/rauslesen und keine Fehler entstehen?
Es muss ja gewährleistet sein das keiner den anderen überhohlt, das heißt es muss eine weitere datei sein, in der jeder computer am ende jeden durchlaufs was reinschreibt, und wartet, bis der Rest das auch gemacht hat. |
|
Nach oben |
|
 |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 04.01.2005, 19:42 Titel: Problem |
|
|
Wenn ich das mit dem Error zeugs mache, kommt "Goto erwartet" bei Resume. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 04.01.2005, 21:02 Titel: Mit VB verwechselt |
|
|
Hallo.
Das hab ich jetzt davon, dass ich in letzter Zeit viel mit VB mache.... In QB geht das ja nicht so bequem...
Da muss man Folgendes machen:
Code: | ON ERROR GOTO SprungmarkeAmEnde
...
...
END
SprungmarkeAmEnde:
'Hier optional Fehlercode in ERR auswerten!
RESUME NEXT |
Versuch's damit mal.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 05.01.2005, 17:23 Titel: Egal |
|
|
Das hat sich so oder so erledigt...hab einfach QB 7.5 genommen, da gehts! |
|
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: 05.01.2005, 18:38 Titel: |
|
|
7.1 oder 4.5? ON ERROR RESUME NEXT geht eigentlich in beiden nicht, oder? _________________ "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: 07.01.2005, 19:26 Titel: Version |
|
|
Es ist 7.1.
Wie müsste eigentlich nun der Sub im Programm zum austausch aussehen? Ich meine wenn man einfach einließt überschreibt man die am eigenen Computer erzeugten werte, wenn net dann die Werte die anderen Reinschreiben!
Und wie mache ich das wenn das einlesezezeugs in nem Sub ist und keine Strings eingelesen werden? |
|
Nach oben |
|
 |
|
|
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.
|
|