Strings Außeinandernehmen

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Silver_Knee

Betreff: Strings Außeinandernehmen

BeitragMi, März 07, 2007 15:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Jeder Der eine Programmiersprache in seinem Spiel haben will kommt auf folgende Befehle:Code: [AUSKLAPPEN]

Function Between$(s$,b$,e$,fl=1)
   f=Instr( s,b,fl )+Len(b)
   l=Instr( s,e,f )
   r$=Mid( s,f,l-f)
   Return r
End Function

Function AfterLast$(txt$,find$)
   While Not Instr(txt,find)=0
      txt=Mid(txt,Instr(txt,find)+Len(find))
   Wend
   Return txt
End Function

Function BeforLast$(otxt$,find$)
   txt$=otxt
   While Not Instr(txt,find)=0
      l=Instr(txt,find)+Len(find)
      txt=Mid(txt,l)
   Wend
   Return Mid(otxt,1,l-2)
End Function

die Bestimmt in irgendeiner Form erfunden hat...

Zusätzlich Möchte ich euch meine GrapicalFonts nicht VorenthaltenCode: [AUSKLAPPEN]

Dim pix(0,0)
Function LoadGFont(bmpfile$,txt$,frames,mask_r,mask_g,mask_b,border_r,border_g,border_b)
   im=LoadImage(bmpfile)
   ;Get argb color the old way
      Color border_r,border_g,border_b
      Plot 0,0
      border=ReadPixel(0,0)
   ;Got it?
   t1.Function_LoadGfont_Type1=New Function_LoadGfont_Type1
   t1\image=im
   
   width=ImageWidth(im)
   height=ImageHeight(im)
   
   start=0
   Repeat
      SetBuffer ImageBuffer(im)
      
      count=count+1
      If count-fr*Len(txt)>Len(txt)
         fr=fr+1
      EndIf
      Dim pix(width,height)
      
      End_=width
      
      For y=0 To height
      For x=start To End_
      
         pixel=ReadPixel(x,y)
         If pixel=border end_=x
         
         pix(x,y)=pixel
      Next
      Next
      
      t2.Function_LoadGfont_Type2=New Function_LoadGfont_Type2
      t2\image=CreateImage(End_-start,height):MaskImage im,mask_r,mask_g,mask_b
      t2\source=t1
      t2\frame=fr
      t2\sym=Mid(String(txt,frames),count,1)
      
      SetBuffer ImageBuffer(t2\image)

      For x=start To end_
      For y=0 To height         
         WritePixel x-start,y,pix(x,y)
      Next
      Next
      start=end_+1
   Until start=>width
   SetBuffer BackBuffer()
   Return im
End Function

Type Function_LoadGfont_Type1
   Field image
End Type

Type Function_LoadGfont_Type2
   Field image,source.Function_LoadGfont_Type1,sym$,frame
End Type

Function GText(x,y,txt$,p_image,frame=0)
   Local t1.Function_LoadGfont_Type1,t2.Function_LoadGfont_Type2,sym$
   
   For t1=Each Function_LoadGfont_Type1
      If t1\image=p_image
         Exit
      EndIf
   Next
   If t1=Null RuntimeError "Font not loaded by LoadGFont() !"
   
   For count=1 To Len(txt)
      sym=Mid(txt,count,1)
      
      For t2=Each Function_LoadGfont_Type2
         If t2\source=t1 And t2\sym=sym And t2\frame=frame
            Exit
         EndIf
      Next
      If t2=Null RuntimeError "Font not contains symbol ''"+sym+"''!"
      
      DrawImage t2\image,x,y
      x=x+ImageWidth(t2\image)
   Next
End Function

Beispielimage (|n einer bestimmten Farbe/ Hintergrund in eier konstanten farbe):
1|2|3|4|5|6|7|8|9|0|#|\|<|>|1|2|3|4|5|6|7|8|9|0|#|\|<|>|1|2|3|4|5|6|7|8|9|0|#|\|<|>|

BBcode zum Laden:
Code: [AUSKLAPPEN]

GFont=LoadGFont("my\cool\graphical\font.bmp","123456789#\<>",framesets,hinter_r,hinter_g,hinter_b,Trennlinie_r,Trennlinie_g,Trennlinie_b)


zum Anzeigen

Code: [AUSKLAPPEN]
GText x,y,"<1234\1233395236#\991>",GFont,2


Edit Verbesserungsvorschläge konnen kommen

BladeRunner

Moderator

BeitragMi, März 07, 2007 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie wäre es mit Beschreibungen zu Deinen Funktionen, damit man sich nicht aus dem Code herauspuzzeln muss was sie tun und welche Parameter sie erwarten ?
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Silver_Knee

BeitragSo, März 11, 2007 0:18
Antworten mit Zitat
Benutzer-Profile anzeigen
da gäbe es between:
das gib etwas zwischen zwei textstellen wieder beispeiel
Code: [AUSKLAPPEN]
txt$="<img width='100%' src='logo.gif'>"
art$=Between(txt,"<"," ");gibt img zurück
select art
case "img"
 file$=Between(txt,"src='","'");gibt logo.gif zurück weil erst nach dem src=' weitergesucht wird
end select


Afterlast habe ich für dateinamen "erfunden": Es gibt alles nach dem letzten des angegebenen zeichen an
Code: [AUSKLAPPEN]
filename$="C:\Programe\Agent.TheGame\Agent.exe"
Print AfterLast(filename,"\");zeigt Agent.exe auf dem Bildschirm an
Print AfterLast(filename,".");zeigt exe auf dem Bildschirm an


BeforLast ist das Gegenstück
Code: [AUSKLAPPEN]
Print AfterLast(filename,"\");zeigt in meinem Beispiel den Pfad C:\Programe\Agent.TheGame auf dem Bildschirm an achtung das zeichen selbst nicht


zudem hab ich noch ein haufen solcher Stringzerstörer bei mir rumliegen muss sie nur zusammensuchen...
 

FWeinb

ehemals "ich"

BeitragSo, März 11, 2007 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube du hast dich im Letzten nen Bischen Verschaut oder ?

Müste doch:

Code: [AUSKLAPPEN]

Print BeforLast(filename,"\");zeigt in meinem Beispiel den Pfad C:\Programe\Agent.TheGame auf dem Bildschirm an achtung das zeichen selbst nicht


Oder nicht ??
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs

Silver_Knee

BeitragSo, März 11, 2007 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Embarassed nunja da muss ich dir natürlich recht geben

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group