Chat für 2 Leute per UDP

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

TimBo

Betreff: Chat für 2 Leute per UDP

BeitragSa, März 15, 2008 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Community

so stelle jetz das erste mal ein Code hier rein.
bin noch ein Boon und benötige ein ingamechat und als übung habe ich
das hier programmiert

Code: [AUSKLAPPEN]

;Task erster I-Net Versuch
;von TimBo
;11.03.2008 - 15.03.2008
;für School Total War alias Konter Strike

Graphics 1024, 768, 24, 2
AppTitle "Internet Versuche"
SetBuffer BackBuffer()
timer = CreateTimer(70)

Global empfangs_stream = CreateUDPStream(8000) ;erstellt ein UDP Stream mit dem Port 8000
Global nummer
Global text1$

Type message ;die Nachrichten, die Angezeigt werden, sind als Types gespeichert
   Field nummer ;der Rang der Nachricht
   Field msg$ ;der Text selbst
   Field r, g, b  ;hier die Farbwerte
End Type

Global name$ = Input("Gebe deinen Name ein!  ") ;hier gibt man seinen Namen an
Global farbe$ = Input("Gebe Farbe ein! (von 0-7)  ") ;hier gibt man seine eigene Farbe an
Global ipadresse$ = "255.255.255.255" ;hier ip adresse seines partners eingeben... kann man auch mit Input machen ^^

;hier die Farbenvorlagen
Select farbe$
   Case 0
      farbe$ = "000000000"
   Case 1
      farbe$ = "255000000"
   Case 2
      farbe$ = "000255000"
   Case 3
      farbe$ = "255255000"
   Case 4
      farbe$ = "000000255"
   Case 5
      farbe$ = "000255255"
   Case 6
      farbe$ = "255000255"
   Case 7
      farbe$ = "255255255"
End Select

Global localrot ;die eigenen Farben, die man eingestellt hat
Global localgruen
Global Localblau
Repeat
   empfangen() ;erst wird empfangen und der Stream freigeräumt
   
   If KeyHit(28) ;wenn man Enter drückt
      If tippen = 1 ;und man bereits was eingibt,
         Senden(text1$) ;dann sendet er das Eingegebene
         tippen = 0 ;und man schreibt nichts mehr
      Else ;wenn nicht
         FlushKeys: tippen = 1 : text1$ = "" ;kann man eine neue Nachricht schreiben
      EndIf
   EndIf
   
   If tippen = True Then Eingabe() : Color 255, 255, 255 :Text(10, 10, "> " + text1$+"_")
   
   WaitTimer (timer)
   Flip:Cls
Forever

Function IntegerIP(IP$)
   ;siehe BlitzBase.de
   A1 = Int(Left(IP$,Instr(IP$,".")-1)) : IP$ = Right(IP$,Len(IP$)-Instr(IP$,"."))
   A2 = Int(Left(IP$,Instr(IP$,".")-1)) : IP$ = Right(IP$,Len(IP$)-Instr(IP$,"."))
   A3 = Int(Left(IP$,Instr(IP$,".")-1)) : IP$ = Right(IP$,Len(IP$)-Instr(IP$,"."))
   A4 = Int(IP$)
   Return (A1 Shl 24) + (A2 Shl 16) + (A3 Shl 8 ) + A4
End Function

Function Senden(Zeichensatz$)
   WriteString empfangs_stream,name$+": "+Zeichensatz+farbe$
   ;hier sendet man seinen Namen: das geschriebene und dann den rgb code (siehe ganz oben)
   SendUDPMsg (empfangs_stream, IntegerIP(ipadresse$), 8000)
   m.message = New message ;neue Message
   m\msg$ = name$+": "+Zeichensatz$+farbe$ ;inhalt der message
   farben$ = Right(m\msg$, 9) ;Farbe ist ja in der message schon enthalten also wird sie ausgelesen
   m\r = Left(farben$, 3) ;und in rgb aufgeteilt
   m\g = Mid(farben, 4, 3)
   m\b = Right(farben$, 3)
   anzahlstellen = Len(m\msg$)
   m\msg$ = Left(m\msg$, anzahlstellen-9) ;hier wird der rgb code weg gemacht, damit man ihn nicht sieht
   m\nummer = nummer ;der Rang wird festgelegt
   nummer = nummer +1;die nächste Nachricht ist ein Rang iefer
End Function

Function Eingabe()
   
   taste = GetKey()
   Select Taste
      Case 8
         If Len(text1$) > 0 Then text1$ = Left$(text1$, Len(text1$)-1 ) ;bei backspace wird ein ascii zeichen gelöscht
      Case 0
      Default
         If Len(text1)<80 ;wenn man noch keine 80 zeichen geschrieben hat
            text1$ = text1$ + Chr$(Taste) ;hier wird der nächste buchstabe angefügt
         EndIf
   End Select
   
End Function

Function empfangen()
   IP_Adresse = RecvUDPMsg(empfangs_stream)
   If IP_Adresse <> 0 ;wenn eine Nachricht eintrifft
      m.message = New message ;wird ein neuer Nachrichtentype erstellt
      m\msg$ = ReadString(empfangs_stream) ;so wie beim senden
      farben$ = Right(m\msg$, 9)
      m\r = Left(farben$, 3)
      m\g = Mid(farben, 4, 3)
      m\b = Right(farben$, 3)
      
      anzahlstellen = Len(m\msg$)
      m\msg$ = Left(m\msg$, anzahlstellen-9)
      m\nummer = nummer
      nummer = nummer +1
   EndIf
   
   For m.message = Each message ;hier werden Nachrichten mit ihrer Farbe angezeigt
      Color m\r, m\g, m\b
      Text 100, 100+m\nummer*20, "< " + m\msg$
   Next
   
   If nummer > 20 Then ;wenn man schon 20 nachrichten auf dem Monitor hat wird alles eins aufgerückt
      m.message = First message
      Delete m.message
      
      nummer = nummer -1
      
      For m.message = Each message
         m\nummer = m\nummer -1
      Next
   EndIf
End Function


dabei hat mit Silver_Knee sehr unter die Arme gegriffen Smile
würde mich über Feedback freuen Very Happy

mit freundlichen Grüßen
Intel Core 2 Quad
  • Zuletzt bearbeitet von TimBo am So, März 23, 2008 0:02, insgesamt einmal bearbeitet

AMY

BeitragFr, März 21, 2008 1:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Habs mal kurz ausprobiert weil ich sowas auch ganz ut gebrauchen kann, und habe festgestellt das bei der farbe cyan (5) die meldung nicht ganz ankommt. Da fehlen immer die letzten 3 zeichen. Bei Rot ist alles in Ordnung. Habe die anderen Farben nicht ausprobiert. Sonst aber ganz gut.
Projekte: www.amyscbi.de
I never comment my sourcecode. What's HARD to write must be HARD to read!

TimBo

BeitragSo, März 23, 2008 0:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Bug Fixed ^^
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group