Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Laggender Netzwerkcode
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
PeterHeins



Anmeldungsdatum: 17.04.2006
Beiträge: 14
Wohnort: Ruhrgebiet

BeitragVerfasst am: 17.04.2006, 21:31    Titel: Laggender Netzwerkcode Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 17.04.2006, 23:18    Titel: Antworten mit Zitat

Code supported by DaGeRe, man siehts durchgeknallt

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
Benutzer-Profile anzeigen Private Nachricht senden
PeterHeins



Anmeldungsdatum: 17.04.2006
Beiträge: 14
Wohnort: Ruhrgebiet

BeitragVerfasst am: 17.04.2006, 23:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 18.04.2006, 01:27    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
max06



Anmeldungsdatum: 05.12.2004
Beiträge: 390
Wohnort: Augsburg

BeitragVerfasst am: 18.04.2006, 11:18    Titel: Antworten mit Zitat

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 lächeln

Grüße
Florian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
PeterHeins



Anmeldungsdatum: 17.04.2006
Beiträge: 14
Wohnort: Ruhrgebiet

BeitragVerfasst am: 18.04.2006, 12:06    Titel: Antworten mit Zitat

Hallo,

http://nopaste.freebasic.de/index.php?view=315

Das ist erstmal der Code(Zeile 171 bis 450 ist wichtig).

In den Chat komme ich gleich. Wie funktioniert das mit DOS/Vesa Graphik?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
max06



Anmeldungsdatum: 05.12.2004
Beiträge: 390
Wohnort: Augsburg

BeitragVerfasst am: 18.04.2006, 12:19    Titel: Antworten mit Zitat

An alle:

PeterHeins = DaGeRe lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
PeterHeins



Anmeldungsdatum: 17.04.2006
Beiträge: 14
Wohnort: Ruhrgebiet

BeitragVerfasst am: 18.04.2006, 13:29    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 18.04.2006, 14:27    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
PeterHeins



Anmeldungsdatum: 17.04.2006
Beiträge: 14
Wohnort: Ruhrgebiet

BeitragVerfasst am: 18.04.2006, 17:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 18.04.2006, 17:13    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 18.04.2006, 21:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 18.04.2006, 21:27    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 18.04.2006, 21:54    Titel: Antworten mit Zitat

ich wollt damit nur ausdrücken, er is nich schuld an dem array-käse happy
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden
PeterHeins



Anmeldungsdatum: 17.04.2006
Beiträge: 14
Wohnort: Ruhrgebiet

BeitragVerfasst am: 19.04.2006, 16:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 19.04.2006, 17:35    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
PeterHeins



Anmeldungsdatum: 17.04.2006
Beiträge: 14
Wohnort: Ruhrgebiet

BeitragVerfasst am: 19.04.2006, 19:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 19.04.2006, 20:19    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 20.04.2006, 17:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 20.04.2006, 18:36    Titel: Antworten mit Zitat

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 happy
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
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.

 Impressum :: Datenschutz