2 Anfängerfragen: internet-play und datenbanken
Übersicht

Donald AguBetreff: 2 Anfängerfragen: internet-play und datenbanken |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich hoffe, ich verärgere jetzt niemanden, aber ich hab die alten threads sowie die onlinehilfe durchgeschaut und finde da keine richtige antwort...
und zwar hab ich wie gesagt 2 anfängerfragen. 1. Wie kann ich ausgelagerte dateien in bb verwenden? Ich meine, nehm ich da irgendwelche textdateien und geb da meine variablen ein oder wie mach ich das? Oder welches format ist dazu gut? Oder geht es nur mit einem? und wenn ich die datei hab, wie verwende ich dann die variablen aus der datei in meinem prog? In der onlinehilfe steht zwar verschiedenes zeug von read- und write-befehlen, doch das beispiel versteh ich überhaupt net und ich weiß nicht mal, ob das die einfachste lösung ist. Ich möchte nämlich einfach nur variablen aus meinem prog auslagern... 2. ich hab absolut keinen plan, wie man netzwerk programmiert. Um mir da was anzueignen, müsste ich irgendwie dahinter kommen, wie das ganze überhaupt von statten geht. Hab ich da einfach mein spiel und schreib ein paar zeilen drum herum? Oder hängt das vom prog ab, wie die codestruktur dazu aussehen muss? Wäre toll, wenn mir jemand kurz erklären könnte, wie Netzwerk- bzw. Internetspiele überhaupt funktionieren Ich hoffe jetzt nur, dass ich meine Bitte einigermaßen verständlich formuliert habe ![]() Herzlichen Dank im Voraus AGU |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was willst du denn für 'Variablen' aus einer Datei auslesen... Integer? Dann beschreib die Datei mit WriteInt und beim lesen ReadInt. Ist am einfachsten... Wenn du aber die Dateien zB mit Notepad bearbeiten willst, die dann BB auslesen kann, kannst du ReadLine nehmen und einzelne Zeilen selber 'filtern'.
Netzwerk ist für jemand der grad mit programmieren anfängt, recht schwer... Will dir das jetzt auch nicht unterstellen... Bevor du überhaupt mit Netzwerk anfängst, würde ich dir raten erstmal sich mit Vektoren und Frameunabhängiges programmieren zu beschäftigen. Ausser du willst ein RPG etc machen. |
||
![]() |
tyty |
![]() Antworten mit Zitat ![]() |
---|---|---|
zu 1:
Es gibt da einen Befehlt, der sich "Include" nennt. Mit diesem weist man auf andere Dateien im .bb Format, die daraufhin in den Code eingebunden werden.[/code] |
||
User posted image
Kaikille suomea puhuville ihmisille: tyty = tyty the technical youngster!!! |
Donald Agu |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also das mit dem include kenn ich aus robs bb-kurs. Aber das ist bestimmt nicht die geläufige Art, ausgelagerte Dateien zu verwenden...
--- Es handelt sich bei den Variablen in der tat weitgehend um Integer. Aber kann ich mit diesem komischen writeint jetzt nur einen wer je datei schreiben? das kann ja nicht sein, da steh ich bestimmt auf dem schlauch, aber das ist unmöglich ![]() Denn so, wie's in der onlinehilfe beschrieben ist, schreib ich: Code: [AUSKLAPPEN] fileout = WRITEFILE("mydata.dat") WRITEFILE fileout,12345678 CLOSEFILE fileout filein = READFILE("mydata.dat") Wert = READINT(filein) CLOSEFILE filein PRINT Wert ich schreibe also eine datei, die mit einer variable gekennzeichnet wird, in diesem fall fileout. Dann wird dort der Wert 12345678 eingespeichert. Was aber nun, wenn ich an eine andere "Stelle" in "mydata.dat" einen anderen wert setzen will? Muss ich da beispielsweise schreiben: andererwert = WRITEFILE("mydata.dat") WRITEINT andererwert,10 ...wenn der wert 10 sein soll? denn das ist mir noch nicht so ganz klar. ![]() und wenn das dann so kompliziert ist, wieso lagert man dann überhaupt dateien aus (von savegames abgesehen) ![]() --- ja, das mit dem netzwerk ist so ne geschichte: einerseits bin ich zwar anfänger und beherrsche nur ein äußerst beschränktes repertoire an befehlen (ich bin ja so stolz, dass ich inzwischen arrays verwenden kann ![]() ![]() [/code][/syntax] |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
nix nur eine Zahl in einer Datei... Bis 2GB große Dateien kannst du erzeugen...
speichern:Code: [AUSKLAPPEN] datei=WriteFile("datei.dat")
a=13 b=17 c=42 WriteInt datei,a WriteInt datei,b WriteInt datei,c CloseFile datei lesen:Code: [AUSKLAPPEN] datei=ReadFile("datei.dat")
a=ReadInt(datei) b=ReadInt(datei) c=ReadInt(datei) CloseFile datei Print a Print b Print c WaitKey |
||
Donald Agu |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Aaah ja! ![]() Bleibt noch die Geschichte mit dem Netzwerk... ![]() |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmmm, Netzwerk... Habe mal sowas gemacht... Können bis zu 99 Spieler am Spiel beitreten... Läuft allerdings auf TCP und ist eigentlich für derartigen Spiele nicht grad die beste Wahl... Wenn man keine Info von anderen Spielern kommt, wird weiterhin eine Berechnungsformel angewand, die angibt wo sich vermutlich jetzt der Gegenspieler befinden könnte/sollte. Um alleine den Spaß zu haben kannst du es auch über 127.0.0.1 laufen lassen. Dann sendet die Netzwerkkarte sich selber die Daten und verarbeitet sie... Zuerst immer den Host starten und dann die Clients. Wenn irgendein Client läuft kann der Host auch ausgeschaltet werden. Alle weiteren Clients melden sich dann an den vorhandenen Clients an. Also bleibt das Spiel bestehen.Code: [AUSKLAPPEN] Graphics 400,400,0,2
SetBuffer BackBuffer() nettyp%=0 netfrm%=0 netabc$="" td#=0 tp#=0 Type pos Field xp# Field yp# Field xg# Field yg# Field id% Field nm$ End Type Print "1-Host" Print "2-Client" wahl=Input() If wahl=1 Then spiel=HostNetGame("IDKFA") If wahl=2 Then spiel=JoinNetGame("IDKFA","127.0.0.1") sp.pos=New pos sp\xp=20 sp\yp=20 sp\xg=0 sp\yg=0 sp\nm=Input("Spielername: ") sp\id=CreateNetPlayer(sp\nm) td=1 tp=MilliSecs() ;Hauptschleife While Not KeyHit(1) For sp.pos=Each pos sp\xg=sp\xg/((0.0002*td)+1) sp\yg=sp\yg/((0.0002*td)+1) sp\xp=sp\xp+sp\xg*td sp\yp=sp\yp+sp\yg*td If sp\xp<000 Then sp\xp=sp\xp+400 If sp\xp>400 Then sp\xp=sp\xp-400 If sp\yp<000 Then sp\yp=sp\yp+400 If sp\yp>400 Then sp\yp=sp\yp-400 Rect sp\xp-4,sp\yp-4,9,9,1 Text sp\xp+6,sp\yp-6,sp\nm Next ;Nachricht empfangen If RecvNetMsg()=1 Then nettyp=NetMsgType() netfrm=NetMsgFrom() ;NachrichtTyp Neu If nettyp=100 Then sp.pos=New pos sp\xp=20 sp\yp=20 sp\xg=0 sp\yg=0 sp\id=netfrm sp\nm=NetPlayerName$(netfrm) End If ;NachrichtTyp Weg If nettyp=101 Then For sp.pos=Each pos If netfrm=sp\id Then Delete sp Next End If ;NachrichtTyp Info If nettyp=1 Then For sp.pos=Each pos If netfrm=sp\id Then sp\xp=NetMsgData() sp\yp=NetMsgData() sp\xg=NetMsgData() sp\yg=NetMsgData() End If Next End If Else ;Zeitschuld Delay 10 EndIf sp.pos=First pos If KeyDown(203) Then sp\xg=sp\xg-0.001*td If KeyDown(205) Then sp\xg=sp\xg+0.001*td If KeyDown(200) Then sp\yg=sp\yg-0.001*td If KeyDown(208) Then sp\yg=sp\yg+0.001*td td=MilliSecs()-tp tp=MilliSecs() ;Alle 200ms ;Info senden If tp>ts Then SendNetMsg 1,sp\xp,sp\id,0 SendNetMsg 2,sp\yp,sp\id,0 SendNetMsg 3,sp\xg,sp\id,0 SendNetMsg 4,sp\yg,sp\id,0 ts=tp+200 End If If KeyHit(57) Then w=1-w If w=1 Then Delay 80 Flip Cls Wend StopNetGame End |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Wenn Du Leveldaten oder Speicherstände sichern möchtest, dann ist das mit Write / Read direkt aus dem Programm die richtige Lösung. Wenn Du Dir aber Deine Einstellungen auslagern möchtest, ist eine Ini-Datei meist die bessere Wahl (d.h. dass Du Dir selbst eine txt Datei mit dem Editor anlegst, dort die Werte hineinschreibst und sie im Programm mit Read ausliesst).
Netzwerk ist eine schwierige Sache, vorallem für Neueinsteiger. Ich habe mich vor drei Wochen selbst erst das erste Mal an ein kleines Netzwerk herangewagt (sprich nach etwa 4-5 Jahren Blitz-Erfahrung). Es ist nicht soo schwierig, wie ich es mir vorgestellt habe, aber es ist schon eine recht nervenaufreibende Sache. ![]() |
||
Donald Agu |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ Ava (netzwerk)
Danke schön. ich werd mich mal umsehen, ob ich da was find. --- (data) Mit bleibt jedoch die Frage, WIE ich dann letztendlich die Werte ausgelagerter Dateien in eine Datei schreiben kann. Muss ich dann in die Textdatei in eine beliebige Zeile Variablennamen und Wert schreiben? Kommt mir spanisch vor... Wenn ich da x = 3 reinschreibe und das dann mit x = READINT (dateiname) lese, dann soll im hauptprogramm x = 3 sein? Kann ich kaum glauben. Aber ich werd's ausprobieren. ich melde mich wieder, wenns damit probleme gibt, hoffe aber, dass ich einigermaßen klar komme... ![]() |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du in eine Datei x=3 schreibst wirst du mir ReadInt nicht weit kommen, da ReadInt eine Integer-Zahl ausliest und die ist 4 Bytes lang. Du kannst per WriteInt eine Zahl mit dem Wert 3 schreiben. Diese wird dann 4 Byte in Anspruch nehmen. Das x dabei wird nicht mitgespeichert. Du muß nur wissen das die erste Zahl in der Datei die x-Variable ist etc... Dateien wo WriteInt drin rumgeschrieben hat, sind keine Textdateien, da sie auch die ASCII-Steuercodes beinhalten können. | ||
Donald Agu |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hää?? Aber Ava hat doch was von "in eine txt-Datei schreiben" gesagt. Wie mach iach denn das dann?
Außerdem stell ich mir folgende Frage: Code: [AUSKLAPPEN] datei = WriteFile("datei.txt") WriteInt datei,1 WriteInt datei,2 WriteInt datei,3 CloseFile datei h = ReadFile("datei.txt") a = ReadInt(h) b = ReadInt(h) c = ReadInt(h) CloseFile h Print a Print b Print c Wieso erscheint beim Ausführen des Programms auf dem Screen: 1 2 3 Woher weiß BB, an welcher Stelle es den Wert aus der Datei auslesen muss? Mir fehlt hier nämlich sehnsüchtigst ein Parameter, mit dem ich eben genau DAS bestimmen kann. ![]() Denn so wüsste ich nicht, wie ich sinnvoll Schleifen zum Einlesen von Data bauen könnte. Was ist denn z.B., wenn ich gar nicht den zuerst gespeicherten Wert, sondern z.B. den zweiten auslesen will? Das ist irgendwie ziemlich konfus. Hilfe! ![]() |
||
Roseman |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Schau dir mal die Befehle SeekFile und FilePos an, wenn du die aktuelle Zeigerposition in der Datei verändern willst.
Allgemein solltest du dir aufschreiben, wie dein Dateiformat aussehen soll. Beispielsweise stehen dann folgende Wert in der Datei: 100 23 55 1222 Diese haben dann folgende z.B. folgende Bedeutung (genau in dieser Reihenfolge): Lebenspunkte Magiepunkte Stärke Geld So ähnlich kannst du dir dein Format aufbauen, wenn du nur mit Integer arbeiten willst, und nicht erst deine Datei parsen willst. |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Donald Agu hat Folgendes geschrieben: Wieso erscheint beim Ausführen des Programms auf dem Screen:
1 2 3 *grins* Das ist doch eigentlich ganz einfach: weil in die Datei geschrieben wurde: erst 1, dann 2, dann 3. Genau in dieser Reihenfolge wird es später auch wieder ausgelesen! ![]() Zu dem was ich Dir schrieb ... Du hast natürlich recht, dass Blitz nicht selbstständig Dein x auf 3 setzt, wenn Du in eine Textdatei "X=3" hineinschreibst und dieses einfach nur ausliesst! Da muss man schon ein kleines bisschen selbst Hand anlegen! Um Dein Beispiel aufzugreifen, Du schreibst "X=3" in Deine Textdatei und möchtest anschliessend diese Datei interpretieren, dann musst Du sie Zeile für Zeile mit ReadLine auslesen (anstatt mit ReadInt oder ähnlichem). Anschliessend musst Du die eingelesene Zeile analysieren und zerpflücken. Der Aufbau "x=3" ist recht einfach: "x" ist die Variable, "=" ist das Trennzeichen und "3" ist der Wert. Du suchst also in dem ausgelesenen String nach dem "=" (der Befehl ist InStr), dieser gibt Dir dann die Position des "=" im String zurück. Mit dieser Position kannst Du in dann in Variable und Wert aufteilen. Für ersteres musst Du den Left Befehl verwenden, letzteres kannst Du mit dem Mid Befehl extrahieren. Dann nimmst Du die ausgelesene Variable und setzt sie am besten in eine Select / Case Struktur zur Auswahl. In der Select / Case Struktur richtest Du dann einen Case "x" an und als Befehl dorthin x = int(wert). Du kannst dann für jede Variable, die in Deiner Textdatei enthalten ist, einen entsprechenden Case anlegen und die Zuweisung dort umsetzen. Fertig. Klingt kompliziert und aufwendig, ist eigentlich aber gar nicht schwierig und in vielen Situationen sehr hilfreich! Dieses System lässt sich ja auch noch sehr weit ausbauen. Je nach individuellem Bedürfnis muss man es halt entsprechend anpassen. Zb. mehrere Befehle in einer einzigen Zeile unterbringen und auch mehrere und unterschiedlich viele Parameter pro Befehl, dass ist mit etwas Geschick alles umzusetzen. ![]() |
||
Donald Agu |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sorry, aber ich verstehe lider echt nur Bahnhof. ![]() Da bräucht ich schon ein Beispiel, um das zu kapieren... und ist das dann die bessere (bzw. geläufigere oder praktischere oder schnellere oder wasweißichwas) Methode, mit Readline zu arbeiten? Oder ist Readint besser? Oder gar Sekfile und Filepos, wie Roseman vorgeschlagen hat? ![]() ![]() ![]() |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Auf Deine Frage gibt es keine pauschale Antwort. Es kommt immer darauf an, was genau Du vorhast und dem entsprechend musst Du Dir dann Deine Lösung auswählen.
Schneller ist es natürlich immer, wenn Du Dir ein eigenes Dateiformat anlegst und es direkt ausliesst (mit ReadByte, ReadInt, ReadFloat, ReadString...) Das Beispiel. was Du verlangt hast....Code: [AUSKLAPPEN] f = readFile("dateiname.txt")
while not eof(f) ausgelesener_string$ = ReadLine(f) trenn_position = InStr(ausgelesener_string, "=") variable_name$ = trim(left(ausgelesener_string, trenn_position - 1)) variable_wert$ = trim(mid(ausgelesener_string, trenn_position + 1)) select lower(variable_name) case "name" : spieler_name = variable_wert case "x" : spieler_x = int(variable_wert) case "y" : spieler_y = int(variable_wert) end select wend Code: [AUSKLAPPEN] name=noob
x=5 y=10 Das untere ist der Inhalt der Textdatei. Den Code habe ich nicht getestet! Es ist nur ein ganz spontanes Beispiel und dient lediglich der Veranschaulichung meines vorherigen Posts. ![]() |
||
Donald Agu |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank fürs Beispiel, Ava. Muss ja gar nicht funktionieren, ich hab's ja verstanden ![]() Gar nicht so leicht, aber mit der ganzen Hilfe werd ich das wohl irgendwie auf die Reihe bringen... |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group