  | 
					
						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, 21: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: 17.04.2006, 23: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: 17.04.2006, 23: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, 01: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, 11: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, 12:19    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				An alle:
 
 
PeterHeins = DaGeRe   | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		PeterHeins
 
 
  Anmeldungsdatum: 17.04.2006 Beiträge: 14 Wohnort: Ruhrgebiet
  | 
		
			
				 Verfasst am: 18.04.2006, 13: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, 14: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, 17: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, 17: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, 21: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, 21: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, 21: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, 16: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, 17: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, 19: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, 20: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, 17: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, 18: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.
  | 
   
 
     |