|
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 |
PeterHeins
Anmeldungsdatum: 17.04.2006 Beiträge: 14 Wohnort: Ruhrgebiet
|
Verfasst am: 17.04.2006, 22:31 Titel: Laggender Netzwerkcode |
|
|
Hallo!
Ich bin neu hier, in der Schule müssen wir QB lernen, mir ist das aber alles zu langweilig, besonders, weil ich Spiele machen will. Trotzdem hab ich mal gegoogelt, mich über QB informiert, und bin dann schließlich hier her und zu FreeBasic gekommen, und ich muss sagen: mir gefällt was ich sehe. Besonders SDL mag ich, weil ich da mit nur einem Klick allen Leuten, die Linux benutzen, eine Exe machen kann, die sie benutzen können.
Deshalb hab ich schnell begonnen, SDL zu lernen. Ich hier zu Hause habe 5 Computer, da ich schon seit langem gerne Spiele und Netzwerke aufbaue und so was. Deshalb habe ich hier zuhause auch schon 2 Ziemlich alte Computer, einer mit 100 Mhz und einen mit 133 Mhz. Meine Programme sollen Grundsätzlich auch auf denen gehen, weil ich denke, das 133 000 Rechnungen pro Sekunde doch ausreichen müssen, und wenn ich mir mein altes Super Mario für den viel langsameren Gameboy anschaue - Spiele sollten schon auf solchen Maschienen laufen. Und da ich gerne mit Freunden zusammen spiele, hab ich ein Netzwerkspiel gemacht. Dazu habe ich winsock benutzt, weil mein Lehrer in der Schule mir das in der AG Informatik beigebracht hat.
Das eigentliche Problem: es laggt, und zwar richtig. Wenn ich 100 Mhz mit 133 Mhz oder auch mit einem schnelleren Computer teste, dann laggt es.
So, genug der Vorrede, lasst uns endlich Queltext sehen:
'$INCLUDE: "win/winsock.bi"
'$INCLUDE: "SDL/SDL.bi"
'$INCLUDE: "SDL/SDL_ttf.bi"
DECLARE SUB anz_bmp(x As integer, y AS integer, bild AS SDL_Surface PTR)
DECLARE SUB anz_txt(x As integer, y AS integer, text$)
DECLARE SUB clientturnier()
DECLARE SUB serverS()
DECLARE SUB clientS(ip AS string)
DECLARE SUB hauptspiel(nummer AS byte)
DECLARE SUB netzwerk(BYVAL param AS integer)
DECLARE FUNCTION SDL_Collission(x1, y1, bild1 AS SDL_Surface PTR, x2, y2, bild2 AS SDL_Surface PTR)
TYPE schusstyp
x AS integer
y AS integer
xbesch AS integer
lebzeit AS integer
END TYPE
TYPE spielertyp
x AS integer
y AS integer
xbesch AS integer
ybesch AS integer
punkte AS byte
schuss AS schusstyp
END TYPE
DIM SHARED sockhaupt AS socket
DIM SHARED ende, mutex
DIM SHARED spieler(2) AS spielertyp
DIM SHARED schiesse
DIM SHARED bild(3) AS SDL_Surface PTR
DIM erfolg AS byte
DIM SHARED schrift AS TTF_Font PTR
DIM SHARED bildschirm AS SDL_Surface PTR
DIM SHARED verbunden
DIM SHARED endeges AS byte
IF SDL_INIT(SDL_INIT_Video)<>0 THEN
PRINT "Fehler beim SDL Initiallisieren: "+*SDL_GetError()
SLEEP: END
END IF
IF TTF_INIT()<>0 THEN
PRINT "Fehler beim SDL_TTF Initiallisieren: ";
SLEEP: END
END IF
bildschirm=SDL_SetVideoMode(640,480,16,SDL_DoubleBuf)
IF bildschirm=NULL THEN
PRINT "Fehler: "+*SDL_GetError()
SLEEP:END
END IF
bild(1)=SDL_LoadBMP("Daten\01.bmp")
bild(2)=SDL_LoadBMP("Daten\02.bmp")
bild(3)=SDL_LoadBMP("Daten\03.bmp")
schrift=TTF_OpenFont("Daten\Vera.ttf", 16)
IF schrift=NULL THEN
PRINT "Fehler"
SLEEP
END
END IF
DIM WSA AS WSADATA
erfolg=WSAStartUp(MakeWord(2,0),@WSA)
IF erfolg<>0 THEN
PRINT "Fehler: "+STR$(erfolg)
SLEEP
END
END IF
clientturnier()
END
SUB clientturnier()
DIM AS byte empfangen, erfolg
DIM sname AS string*20
DIM ipand AS string*15
sname$="Testspieler"
DIM addresse AS sockaddr_in
DIM server AS socket
DIM FS AS FD_Set
DIM zeit AS timeval
DIM tasten AS string
DIM ereigniss AS SDL_Event
DIM gehtlos AS byte
DIM runde AS byte
DIM hauptserver$
hauptserver$="192.168.0.1"
zeit.tv_usec=1
runde=0
empfangen=0
WHILE endeges=0
runde+=1
SDL_FillRect(bildschirm, NULL, SDL_MapRGB(bildschirm->format,200,200,200))
anz_txt(10,10,"Verbinde mit Server...")
PRINT "Runde: "+STR$(runde)
SDL_Flip(bildschirm)
server=Socket_(AF_INET, SOCK_STREAM,0)
PRINT "Serververbindung läuft..."
IF server=INVALID_SOCKET THEN
PRINT "Fehler: ";
PRINT WSAGetLastError()
SLEEP
END
END IF
addresse.sin_family=AF_INET
addresse.sin_port=htons(5678)
addresse.sin_addr.s_addr=inet_addr(hauptserver$)
IF connect(server, CPTR(SOCKADDR PTR, @addresse),SizeOf(addresse))=SOCKET_ERROR THEN
PRINT "Fehler: ";
PRINT WSAGetLastError()
SLEEP
END
END IF
PRINT "Sende Daten..."
Send(server, CPTR(STRING PTR, @sname$), Len(sname$),0)
Send(server, CPTR(BYTE PTR, @runde), LEN(runde),0)
gehtlos=0
WHILE gehtlos=0
SDL_FillRect(bildschirm, NULL, SDL_MapRGB(bildschirm->format,200,200,200))
anz_txt(10,10,"Verbunden...warte auf Spielbeginn")
SDL_Flip(bildschirm)
WHILE SDL_PollEvent(@ereigniss)
IF ereigniss.type=SDL_Quit_ THEN END
IF ereigniss.type=SDL_KeyDown THEN
IF ereigniss.key.keysym.sym=SDLK_Escape THEN END
END IF
WEND
FD_Zero(@FS)
FD_Set_(Server, @FS)
IF select_(2,@FS,NULL,NULL, @zeit)=SOCKET_Error THEN
PRINT "Fehler"
END IF
IF FD_IsSet(server, @Fs) THEN
PRINT "Was passiert..."
gehtlos=1
END IF
SDL_Delay(10)
WEND
RECV(server, CPTR(BYTE PTR, @empfangen), SizeOf(empfangen),0)
IF empfangen=SOCKET_ERROR OR empfangen=0 THEN
PRINT "Fehler"
SLEEP
END
END IF
IF empfangen=1 THEN
anz_txt(10,50,"Sie sind Server")
SDL_Flip(bildschirm)
PRINT "Beginne(Server)..."
CALL serverS()
ELSE
IF empfangen=2 THEN
anz_txt(10,50,"Sie sind Client")
SDL_Flip(bildschirm)
RECV(server, CPTR(STRING PTR, @ipand), SizeOf(ipand),0)
PRINT "Beginne(Client)..."
CALL clientS(ipand$)
END IF
IF empfangen=3 THEN
PRINT "Noch mal davon gekommen..."
END IF
END IF
WEND
END SUB
SUB serverS()
DIM erfolg AS byte
DIM sock(2) AS socket
DIM addresse AS sockaddr_in
sock(1)=socket_(AF_INET, SOCK_STREAM, 0)
addresse.sin_family=AF_INET
addresse.sin_port=htons(5679)
addresse.sin_addr.s_addr=INADDR_ANY
erfolg=bind(sock(1), CPTR(SOCKADDR PTR, @addresse),SizeOf(sockaddr))
IF erfolg<>0 THEN
PRINT "Fehler: ";
PRINT WSAGetLastError()
SLEEP
END
END IF
erfolg=listen(sock(1), 1)
IF erfolg<>0 THEN
PRINT "Fehler: ";
PRINT WSAGetLastError()
SLEEP
END
END IF
DIM FS AS FD_Set
DIM zeit AS timeval
zeit.tv_usec=1
DIM ereigniss AS SDL_Event
sock(2)=INVALID_SOCKET
WHILE sock(2)=INVALID_SOCKET
SDL_FillRect(bildschirm, NULL, SDL_MapRGB(bildschirm->format,200,200,200))
anz_txt(10,10,"Server erstellt...warte auf Beginn")
SDL_Flip(bildschirm)
WHILE SDL_PollEvent(@ereigniss)
IF ereigniss.type=SDL_Quit_ THEN END
IF ereigniss.type=SDL_KeyDown THEN
IF ereigniss.key.keysym.sym=SDLK_Escape THEN END
END IF
WEND
FD_Zero(@FS)
FD_Set_(sock(1), @Fs)
erfolg=Select_(2, @FS, NULL, NULL, @zeit)
IF FD_IsSet(sock(1), @FS) THEN
sock(2)=Accept(sock(1), NULL, NULL)
END IF
WEND
sockhaupt=sock(2)
CALL hauptspiel(1)
sock(1)=INVALID_SOCKET
sockhaupt=INVALID_SOCKET
sock(2)=INVALID_SOCKET
END SUB
SUB clientS(ip AS string)
DIM erfolg AS byte
DIM sock AS socket
DIM addresse AS sockaddr_in
sock=socket_(AF_INET, SOCK_STREAM, 0)
addresse.sin_family=AF_INET
addresse.sin_port=htons(5679)
addresse.sin_addr.s_addr=inet_addr(ip$)
IF connect(sock, CPTR(SOCKADDR PTR, @addresse), SizeOf(addresse))=SOCKET_ERROR THEN
SLEEP 500
IF connect(sock, CPTR(SOCKADDR PTR, @addresse), SizeOf(addresse))=SOCKET_ERROR THEN
PRINT "Fehler: ";WSAGetLastError()
SLEEP
END
END IF
END IF
sockhaupt=sock
CALL hauptspiel(2)
sockhaupt=INVALID_SOCKET
sock=INVALID_SOCKET
END SUB
SUB hauptspiel(ausw AS byte)
DIM ereigniss AS SDL_Event
DIM gegi, zeitende
IF ausw=1 THEN gegi=2 ELSE gegi=1
DIM zeit1, zeit2, zeitdiff, thread_id
DIM tasten(6) AS byte
tasten(1)=0
tasten(2)=0
tasten(3)=0
tasten(4)=0
tasten(5)=0
spieler(1).x=10
spieler(1).y=10
spieler(1).xbesch=0
spieler(1).ybesch=0
spieler(1).punkte=3
spieler(2).x=550
spieler(2).y=430
spieler(2).punkte=3
spieler(2).xbesch=0
spieler(2).ybesch=0
Send(sockhaupt, CPTR(spielertyp PTR, @spieler(ausw))+0, SizeOf(spieler(ausw)),0)
thread_id=THREADCREATE(@netzwerk, ausw)
ende=0
WHILE ende=0
WHILE SDL_PollEvent(@ereigniss)
SELECT CASE ereigniss.type
CASE SDL_Quit_: END
CASE SDL_KeyDown
SELECT CASE ereigniss.key.keysym.sym
CASE SDLK_Escape: END
CASE SDLK_Up : tasten(1)=1
CASE SDLK_Down : tasten(2)=1
CASE SDLK_Right: tasten(3)=1
CASE SDLK_Left : tasten(4)=1
CASE SDLK_Space: tasten(5)=1
END SELECT
CASE SDL_KeyUp
SELECT CASE ereigniss.key.keysym.sym
CASE SDLK_Escape: END
CASE SDLK_Up : tasten(1)=0
CASE SDLK_Down : tasten(2)=0
CASE SDLK_Right: tasten(3)=0
CASE SDLK_Left : tasten(4)=0
CASE SDLK_Space: tasten(5)=0
END SELECT
END SELECT
WEND
MUTEXLOCK mutex
WITH spieler(ausw)
IF tasten(1) THEN IF .ybesch>-15 THEN .ybesch-=1
IF tasten(2) THEN IF .ybesch<15 THEN .ybesch+=1
IF tasten(3) THEN IF .xbesch<15 THEN .xbesch+=1
IF tasten(4) THEN IF .xbesch>-15 THEN .xbesch-=1
END WITH
IF tasten(5) THEN schiesse=1
IF spieler(1).punkte<0 OR spieler(2).punkte<0 THEN
zeitende+=1
IF zeitende>1000 THEN
ende=1
END IF
END IF
spieler(1).x+=zeitdiff*spieler(1).xbesch*.07
spieler(1).y+=zeitdiff*spieler(1).ybesch*.06
spieler(2).x+=zeitdiff*spieler(2).xbesch*.07
spieler(2).y+=zeitdiff*spieler(2).ybesch*.06
WITH spieler(1)
IF .x<0 THEN .x=2
IF .y<0 THEN .y=2
IF .x>640 THEN .x=638
IF .y>480 THEN .y=468
anz_bmp(.x, .y, bild(1))
anz_txt(.x+7,.y+7,STR$(.punkte))
IF .schuss.lebzeit>0 THEN
anz_bmp(.schuss.x, .schuss.y, bild(3))
.schuss.x+=zeitdiff*0.4*.schuss.xbesch
END IF
END WITH
WITH spieler(2)
IF .x<0 THEN .x=2
IF .y<0 THEN .y=2
IF .x>640 THEN .x=638
IF .y>480 THEN .y=468
anz_bmp(.x, .y, bild(2))
anz_txt(.x+7,.y+7,STR$(.punkte))
IF .schuss.lebzeit>0 THEN
anz_bmp(.schuss.x, .schuss.y, bild(3))
.schuss.x+=zeitdiff*0.4*.schuss.xbesch
END IF
END WITH
verbunden+=1
IF verbunden>5000 THEN
PRINT "Verbindung abgebrochen"
SDL_Quit()
ende=1
SLEEP
END IF
MUTEXUNLOCK mutex
SDL_Flip(bildschirm)
SDL_FillRect(bildschirm, NULL, SDL_MapRGB(bildschirm->format, 1,1,255))
zeit1=SDL_GetTicks()
zeitdiff=zeit1-zeit2
IF 30-zeitdiff>0 AND 30-zeitdiff<35 THEN SDL_Delay(30-zeitdiff)
zeit2=SDL_GetTicks()
WEND
IF spieler(ausw).punkte<0 THEN
SDL_Quit()
PRINT "Verloren..."
SLEEP
endeges=1
END IF
END SUB
SUB netzwerk(BYVAL param AS integer)
DIM austemp, gegtemp'Wer ist auf Spieler 1/2
DIM FS AS FD_Set, test
DIM zeit1,zeit2,zeitdiff
DIM sptemp(2) AS spielertyp'Gesammte Spielervariable
DIM endet
austemp=param
IF austemp=1 THEN gegtemp=2 ELSE gegtemp=1
WHILE ende=0
MUTEXLOCK mutex
IF schiesse=1 THEN
spieler(austemp).schuss.x=spieler(austemp).x
spieler(austemp).schuss.y=spieler(austemp).y
IF spieler(austemp).xbesch>0 THEN
spieler(austemp).schuss.xbesch=1
ELSE
spieler(austemp).schuss.xbesch=-1
END IF
spieler(austemp).schuss.lebzeit=500
schiesse=0
END IF
sptemp(1)=spieler(1)
sptemp(2)=spieler(2)
WITH spieler(austemp)
IF .schuss.lebzeit>0 THEN
IF SDL_Collission(.schuss.x,.schuss.y,bild(3),spieler(gegtemp).x, spieler(gegtemp).y, bild(1)) THEN
.schuss.lebzeit=0
spieler(gegtemp).punkte-=1
END IF
END IF
END WITH
verbunden=0
MUTEXUNLOCK mutex
Send(sockhaupt, CPTR(spielertyp PTR, @sptemp(austemp)), SizeOf(sptemp(austemp)),0)
Recv(sockhaupt, CPTR(spielertyp PTR, @sptemp(gegtemp)), SizeOf(sptemp(austemp)),0)
MUTEXLOCK mutex
verbunden=0
IF spieler(1).punkte<0 AND endet=1 THEN ende=1
IF spieler(2).punkte<0 AND endet=1 THEN ende=1
IF spieler(1).punkte<0 THEN endet=1
IF spieler(2).punkte<0 THEN endet=1
spieler(gegtemp)=sptemp(gegtemp)
WITH spieler(1)
IF SDL_Collission(.x, .y, bild(1), spieler(2).x, spieler(2).y, bild(2)) THEN
.x-=.xbesch*20
.y-=.ybesch*20
spieler(2).x+=spieler(2).xbesch*20
spieler(2).y+=spieler(2).ybesch*20
END IF
END WITH
WITH spieler(gegtemp)
IF .schuss.lebzeit>0 THEN
IF SDL_Collission(.schuss.x,.schuss.y,bild(3),spieler(austemp).x, spieler(austemp).y, bild(1)) THEN
.schuss.lebzeit=0
spieler(austemp).punkte-=1
END IF
END IF
END WITH
MUTEXUNLOCK mutex
zeit1=SDL_GetTicks()
zeitdiff=zeit1-zeit2
IF 100-zeitdiff>0 AND 100-zeitdiff<155 THEN
SDL_Delay(100-zeitdiff)
END IF
zeit2=SDL_GetTicks()
WEND
END SUB
SUB anz_bmp(x AS integer, y AS integer, bild AS SDL_Surface PTR)
DIM AS SDL_Rect rechteck
rechteck.x=x
rechteck.y=y
SDL_BlitSurface(bild, NULL, bildschirm, @rechteck)
END SUB
SUB anz_txt(x As integer, y AS integer, text$)
DIM farbe AS SDL_Color
DIM tempsurf AS SDL_Surface PTR
DIM AS SDL_Rect rechteck
farbe.r=1
farbe.b=1
farbe.g=1
tempsurf=TTF_RenderText_Blended(schrift, text$, farbe)
rechteck.x=x
rechteck.y=y
SDL_BlitSurface(tempsurf, NULL, bildschirm, @rechteck)
SDL_FreeSurface(tempsurf)
END SUB
FUNCTION SDL_Collission(x1, y1, bild1 AS SDL_Surface PTR, x2, y2, bild2 AS SDL_Surface PTR)
DIM hohe1, hohe2, breite1, breite2
hohe1 =bild1->h
hohe2 =bild2->h
breite1=bild1->w
breite2=bild2->w
IF ABS(x1-x2)<breite1+breite2 AND ABS(y1-y2)<hohe1+hohe2 THEN
RETURN 1
ELSE
RETURN 0
END IF
END FUNCTION
Es wäre echt schön, wenn einer von euch mir helfen könnte. |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 18.04.2006, 00:18 Titel: |
|
|
Code supported by DaGeRe, man siehts
poste deinen code bitte mal in leserlicher form..
des weiteren: Was laggt? Stockelt das Spiel weil der PC einfach zu langsam ist oder hängts wirklich am Netzwerk, dass die daten zu lange brauchen? Das kann im LAN eigentlich nicht sein. Und dass es auf dem schnelleren PC auch hängt liegt vermutlich daran, dass der auf den langsameren warten musste, kann das sein? _________________ "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 |
|
|
PeterHeins
Anmeldungsdatum: 17.04.2006 Beiträge: 14 Wohnort: Ruhrgebiet
|
Verfasst am: 18.04.2006, 00:39 Titel: |
|
|
Ja, ich hab den per PN gefragt, ob er mir das beibringen kann, und da hat er mir geholfen.
Es lag, denke ich mal, eindeutig am langsamen PC, nicht am Netzwerk. Schneller PC mit Schneller PC funktioniert einwandfrei. Weiterhin laggt es seltsamerweise nicht an dem Schnellen PC, wenn er mit dem langsamen Verbunden ist - sondern nur am Langsamen. Ich hoffe es liegt nicht am SDL, der DaGeRe hat mir versichert, das läuft schneller mit SDL, nicht langsamer.
Was meinst du mit leserlicher Form? Soll ich mehr einrücken? |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 18.04.2006, 02:27 Titel: |
|
|
also leserlich:
a) nicht einfach den ganzen code reinhaun, bei sowas scrollt man eh nur drüber, ärgert sich und liest aus prinzip nicht, nur relevante teile reicht meistens, in deinem fall braucht man den code eigentlich garnicht.
b) http://nopaste.freebasic.de da sieht man einrückungen und es wird sogar bunt gemacht (oder mach wenigstens ein [code] und [/code] um deinen code damit man ihn erkennen kann
dann zur geschwindigkeit: SDL kann schneller sein, muss aber nicht. Wenn du SDL nicht wirklich brauchst fang erst mal ohne an. Aber bei 100 mhz solltest du dich nicht wundern wenn du sehr performancesparend programmieren musst wenn du dich nicht grade in dos/vesa-grafik bewegst wo du mit sdl schon ma direkt raus bist. Das Linux-Argument kannst du bei FB getrost vergessen, interne FB-Befehle funktionieren auch alle auf linux. Und ich weiß ja nicht aber vielleicht solltest du dich mal auch ein bisschen mit dem code auseinandersetzen, ich kenn dageres code und das ist zu 90% genau sein code, du hast sogar die rechtschreibfehler übernommen... (ereigniss, addresse, ...). Des weiteren solltest du als unerfahrener eigentlich garnicht sofort mit Libirary-Grafik, Netzwerk und Multithreading auf einmal anfangen, ich wette du hast nahezu keine ahnnug für was was in dem code gut ist.. und so kommst du nicht weit, also fang am besten klein an verstehs dabei auch richtig.. _________________ "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 |
|
|
max06
Anmeldungsdatum: 05.12.2004 Beiträge: 390 Wohnort: Augsburg
|
Verfasst am: 18.04.2006, 12:18 Titel: |
|
|
Hallo erstmal in der QB/FB-Gemeinde,
ich würde vorschlagen, du stellst den Code auf http://nopaste.freebasic.de online, gehst auf die Seite http://www.freebasic-chat.de und loggst dich da ein. In dem Chat sind immer Leute, die gerne bei einem Problem helfen. Vielleicht solltest du aber auch mal den Code anschauen und versuchen, ihn zu verstehen.
Auch ich bin immer in dem Chat
Grüße
Florian |
|
Nach oben |
|
|
PeterHeins
Anmeldungsdatum: 17.04.2006 Beiträge: 14 Wohnort: Ruhrgebiet
|
|
Nach oben |
|
|
max06
Anmeldungsdatum: 05.12.2004 Beiträge: 390 Wohnort: Augsburg
|
Verfasst am: 18.04.2006, 13:19 Titel: |
|
|
An alle:
PeterHeins = DaGeRe |
|
Nach oben |
|
|
PeterHeins
Anmeldungsdatum: 17.04.2006 Beiträge: 14 Wohnort: Ruhrgebiet
|
Verfasst am: 18.04.2006, 14:29 Titel: |
|
|
Wieso bin ich plötzlich DaGeRe? Ich hatte mit dem ein wenig Emailverkehr, wo wir uns über SDL und so ausgetauscht haben. Mehr nicht. |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 18.04.2006, 15:27 Titel: |
|
|
DOS/Vesa-Grafik mit FB ist relativ umständlich weil du dann DOS compilen musst und zeug, das wirst du nicht hinkriegen.. also musst du entweder ohne Grafik arbeiten (textzeichen grafik) oder eben garnicht erst was größeres versuchen auf den langsamen rechnern sondern wirklich erstmal was sehr simples was einfach kaum leistung brauch und vor allem erstmal ohne netzwerk... _________________ "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 |
|
|
PeterHeins
Anmeldungsdatum: 17.04.2006 Beiträge: 14 Wohnort: Ruhrgebiet
|
Verfasst am: 18.04.2006, 18:07 Titel: |
|
|
Und geht so was überhaupt? D.h., kann ich, wenn ich übe, überhaupt irgendwann mal ein Programm schreiben, das auf diesen Rechnern läuft, über Netzwerk und das schnell genug ist? |
|
Nach oben |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 18.04.2006, 18:13 Titel: |
|
|
Ich sehs ähnlich wie MisterD:
Erst Programmieren lernen und dann Netzwerk.
Es ist Nervig für alle Beteiligten, wenn in einem komplexen Netzwerkcode Anfängerfehler stecken.
Und bitte lern wie man Einrückt, also mit Tabulatoren und Leerzeichen den Code lesbarer macht.
Code: | DIM tasten(6) AS byte
tasten(1)=0
tasten(2)=0
tasten(3)=0
tasten(4)=0
tasten(5)=0 |
....
wenn schon ...
Code: | DIM tasten(1 To 5) AS byte
for i=1 to 5
tasten(i)=0
next i |
Bitte Infomiere dich über Arrays, du verwendest sie nicht so wie sie gedacht sind.
(Das WITH spieler(2) und WITH spieler(1) kann man als weitere Beispiele aufführen) |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 18.04.2006, 22:24 Titel: |
|
|
wie bereits gesagt, das is zu 90% mindestens haargenau dageres code.. _________________ "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 |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 18.04.2006, 22:27 Titel: |
|
|
was ist denn daran so schlimm? Wenn PeterHeins was daraus lernt, isses doch gut! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 18.04.2006, 22:54 Titel: |
|
|
ich wollt damit nur ausdrücken, er is nich schuld an dem array-käse _________________ "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 |
|
|
PeterHeins
Anmeldungsdatum: 17.04.2006 Beiträge: 14 Wohnort: Ruhrgebiet
|
Verfasst am: 19.04.2006, 17:46 Titel: |
|
|
Und was soll ich da jetzt machen?
Mein Lehrer sagt, SVGA Graphik ist mit QB nicht so schwer...wenn das so ist, dann will ich lieber wieder QB benutzen, wenn das schneller ist.
Kann mir jemand sagen, wo ich da Informationen zu SVGA finde und wie ich dann Winsock einbinden kann? |
|
Nach oben |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 19.04.2006, 18:35 Titel: |
|
|
Wenn der Lehrer sagt, es sei einfach, darf er dir das gerne eklären ...
Zitat: | wenn das so ist, dann will ich lieber wieder QB benutzen, wenn das schneller ist. |
Ähm ...
Wenn du nochmal das gleiche Probierst, wird es wieder nicht gehen.
Zitat: | Kann mir jemand sagen, wo ich da Informationen zu SVGA finde und wie ich dann Winsock einbinden kann? |
Winsock lässt sich nur mühsam (und langsam) zusammen mit QBasic verwenden.
Du brauchtst erst eine Art Adapter Programm, weil QBasic ein Dos Programm ist und Winsock nur Windows zuverfügung steht.
Die Geschwindigkeit wäre übrigens wieder ähnlich:
Der Netzwerkcode und oder das Adapter Programm wird die meiste Zeit fressen.
Zu SVGA:
Wie gesagt, wenn der Lehrer denkt es sei einfach, darf er's dir erklären.
SVGA wird übrigens recht viel Rechenzeit kosten, deine Programme könnten also wieder ruckeln.
Ein paar Links hier Forum intern zum Thema Netzwerk und QBasic:
http://forum.qbasic.at/viewtopic.php?t=707
http://forum.qbasic.at/viewtopic.php?t=257 <- sogar über Winsock
und extern:
dreael 1
dreael 2
Aber:
Bitte nicht wieder halb garren Netzwerk Code Posten und fragen wie so er lahm ist ...
QBasic und Netzwerk ist halt nicht schnell.
Was offensichtlich noch niemand gefragt hat:
Ist dein Netzwerk überhaupt fähig für Netzwerk Spiele?
Wenn das Netzwerk selbst zu lahm ist, hilft der schnellste Code nichts. |
|
Nach oben |
|
|
PeterHeins
Anmeldungsdatum: 17.04.2006 Beiträge: 14 Wohnort: Ruhrgebiet
|
Verfasst am: 19.04.2006, 20:53 Titel: |
|
|
Hm...das mit Dreal ist mir irgendwie zu Kompliziert.
Aber bin auf nen tutorial von so nem A.K. gekommen, das ist ganz gut.
Auf meinem Heimnetzwerk funktioniert Age Of Empires.
Und das funktioniert. Und dieses SDL-Winsock Programm ist viel simpler, als Age Of Empires.
Es gibt demzufolge 3 Möglichkeiten:
a) FreeBasic ist zu langsam
b) SDL ist zu langsam
c) winsock ist zu langsam
Und wenn Freebasic zutrifft, dann muss ich halt ne andere Sprache nehmen und so. Könnt ihr mir also sagen, woran es liegt, und was behoben werden muss?
Ach ja, und das Spiel funktioniert ja auf 800 Mhz - 2.4 Ghz. |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 19.04.2006, 21:19 Titel: |
|
|
ich würde sagen alles zusammen ist einfach zu viel für den rechner bzw wenn du blockierenden netzwerkcode einsetzt könnte es auch einfach daran liegen dass das ganze programm eben aufs netzwerk warten muss. _________________ "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 |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 20.04.2006, 18:10 Titel: |
|
|
ich würde noch einen weiteren Punkt anhängen:
d) Age of Empires ist besser Programmiert
Wieso brauchst du eigentlich SDL?
Ich erkenne nichts, was man nicht mit Freebasic Boardmitteln + Winsock lössen kann.
Ein Beispiel:
Code: | bild(1)=SDL_LoadBMP("Daten\01.bmp")
bild(2)=SDL_LoadBMP("Daten\02.bmp")
bild(3)=SDL_LoadBMP("Daten\03.bmp") |
Bei Freebasic selbst kann man Bilder ähnlich leicht laden.
Ich finde die das etwas eigenartig:
Zitat: | a) FreeBasic ist zu langsam
b) SDL ist zu langsam
c) winsock ist zu langsam |
Es ist nicht fair über eine Sprache zu Urteilen die du nicht beherscht.
(Sie Anwendung der SDL und von Arrays)
Ich bezweifle, das es mit QBasic schneller wird.
(ausser du erwischt Code der schneller ist, dann liegt's aber am Code und nicht an der Sprache)
Höchstens ein Compiliertes QuickBasic Programm kann schneller sein,
besonders wenn du Windows 95 hast. (da habe auch ich Probleme zusammen mit Freebasic)
Übrigens:
Zitat: | Das eigentliche Problem: es laggt, und zwar richtig. Wenn ich 100 Mhz mit 133 Mhz oder auch mit einem schnelleren Computer teste, dann laggt es. |
Zitat: | Ach ja, und das Spiel funktioniert ja auf 800 Mhz - 2.4 Ghz. |
Pass auf, das deine Aussagen mit einander übereinstimmen. |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 20.04.2006, 19:36 Titel: |
|
|
Qb wäre in so fern schneller da es eben die nativen dos-screens verwenden würde und nicht irgendwelche API-Grafiksachen, die arbeitsgeschwindigkeit an sich ist vielleicht langsamer, vielleicht aber auch nicht.. kommt auch sehr drauf an wie man programmiert _________________ "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 |
|
|
|
|
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.
|
|