Circle Sin Text

Just starting out? Need help? Post your questions and find answers here.
Swos2009
Enthusiast
Enthusiast
Posts: 112
Joined: Sat Nov 08, 2008 8:19 pm

Circle Sin Text

Post by Swos2009 »

I got the code working in Sin text in circle but I cant seem get the message right because it seem covering other letters.

What am I doing wrong?

Code: Select all

If InitSprite() = 0 Or InitKeyboard() = 0 Or OpenScreen(640,480,32,"App Title") = 0
   MessageRequester("Error!", "Unable to Initialize Environment", #PB_MessageRequester_Ok)
   End
EndIf

Dim Message$(26)

Message$(0)="H"
Message$(1)="E"
Message$(2)="L"
Message$(3)="L"
Message$(4)="O"
Message$(5)="A"
Message$(6)="N"
Message$(7)="D"
Message$(8)="W"
Message$(9)="E"
Message$(10)="L"
Message$(11)="C"
Message$(12)="O"
Message$(13)="M"
Message$(14)="E"
Message$(15)="T"
Message$(16)="O"
Message$(17)="P"
Message$(18)="U"
Message$(19)="R"
Message$(20)="E"
Message$(21)="B"
Message$(22)="A"
Message$(23)="S"
Message$(24)="I"
Message$(25)="C"

Repeat 
      beta=beta+1
      ClearScreen(0)
      ExamineKeyboard()

 
      If StartDrawing(ScreenOutput())
         i=0 
         For i=0 To 25;
             gamma=i*45+beta

             X=164*Sin(gamma)+160
             Y=132*Cos(gamma)+64
             DrawText(150+X,150+Y,Message$(i))
        Next
      EndIf

      StopDrawing()

      FlipBuffers()
      Delay(25)
      
Until KeyboardPushed(#PB_Key_Escape)
End



User avatar
Mijikai
Addict
Addict
Posts: 1520
Joined: Sun Sep 11, 2016 2:17 pm

Re: Circle Sin Text

Post by Mijikai »

Divide the circle in enough spaces...
A separate string array is not really needed - just read the chars directly from memory :)

Code: Select all

EnableExplicit

Procedure.i Main(Width.i,Height.i,Title.s = #Null$)
  Protected wnd.i
  Protected wnd_event.i
  Protected *chr.Ascii
  Protected text.s
  Protected x.i
  Protected y.i
  Protected gamma.f
  Protected beta.f
  Protected slice.f
  Protected speed.f
  If InitSprite()
    wnd = OpenWindow(#PB_Any,#Null,#Null,Width,Height,Title,#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    If wnd
      If OpenWindowedScreen(WindowID(wnd),#Null,#Null,Width,Height,#False,#Null,#Null,#PB_Screen_WaitSynchronization)
        SetFrameRate(50)
        text = "------- Hello and welcome to PureBasic -------"
        slice = 360 / Len(text);spacing
        Repeat
          Repeat
            wnd_event = WindowEvent()
            If wnd_event = #PB_Event_CloseWindow
              Break 2
            EndIf
            ClearScreen($0)
            StartDrawing(ScreenOutput())
            speed + 0.8
            beta = speed
            *chr = @text;<- get base pointer to chars
            Repeat
              gamma = Radian(beta)
              x = 200 * Sin(gamma)
              y = 200 * -Cos(gamma) 
              DrawText(x + 400 ,y + 300 ,Chr(*chr\a),$FF8088 + x - y )
              beta + slice
              *chr + SizeOf(Character);<- advance chr pointer
            Until *chr\a = #Null   
            StopDrawing()      
            FlipBuffers()
          Until wnd_event = #Null
        ForEver
      EndIf
      CloseWindow(wnd)
    EndIf
  EndIf
  ProcedureReturn #Null
EndProcedure

Main(800,600)

End
Swos2009
Enthusiast
Enthusiast
Posts: 112
Joined: Sat Nov 08, 2008 8:19 pm

Re: Circle Sin Text

Post by Swos2009 »

Thanks Mijikai , I learn somethings new as I didnt know that you can do just read the chars directly from memory :)
User avatar
mk-soft
Always Here
Always Here
Posts: 6253
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Re: Circle Sin Text

Post by mk-soft »

Nice Mijikai :wink:

but is better to use *chr.character as ASCII. Then works safe with Unicode.

Code: Select all

EnableExplicit

Procedure.i Main(Width.i,Height.i,Title.s = #Null$)
  Protected wnd.i
  Protected wnd_event.i
  Protected *chr.character
  Protected text.s
  Protected x.i
  Protected y.i
  Protected gamma.f
  Protected beta.f
  Protected slice.f
  Protected speed.f
  If InitSprite()
    wnd = OpenWindow(#PB_Any,#Null,#Null,Width,Height,Title,#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    If wnd
      If OpenWindowedScreen(WindowID(wnd),#Null,#Null,Width,Height,#False,#Null,#Null,#PB_Screen_WaitSynchronization)
        SetFrameRate(50)
        text = "------- Hello and welcome to PureBasic -------"
        slice = 360 / Len(text);spacing
        Repeat
          Repeat
            wnd_event = WindowEvent()
            If wnd_event = #PB_Event_CloseWindow
              Break 2
            EndIf
            ClearScreen($0)
            StartDrawing(ScreenOutput())
            speed + 0.8
            beta = speed
            *chr = @text;<- get base pointer to chars
            Repeat
              gamma = Radian(beta)
              x = 200 * Sin(gamma)
              y = 200 * -Cos(gamma) 
              DrawText(x + 400 ,y + 300 ,Chr(*chr\c),$FF8088 + x - y )
              beta + slice
              *chr + SizeOf(Character);<- advance chr pointer
            Until *chr\c = #Null   
            StopDrawing()      
            FlipBuffers()
          Until wnd_event = #Null
        ForEver
      EndIf
      CloseWindow(wnd)
    EndIf
  EndIf
  ProcedureReturn #Null
EndProcedure

Main(800,600)

End

My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
User avatar
Mijikai
Addict
Addict
Posts: 1520
Joined: Sun Sep 11, 2016 2:17 pm

Re: Circle Sin Text

Post by Mijikai »

mk-soft wrote:Nice Mijikai :wink:

but is better to use *chr.character as ASCII. Then works safe with Unicode.
True :D
Missed that - i usually only care about the ascii table thats why i dont need the second byte :)
davido
Addict
Addict
Posts: 1890
Joined: Fri Nov 09, 2012 11:04 pm
Location: Uttoxeter, UK

Re: Circle Sin Text

Post by davido »

Very nice. :D
I wouldn't have a clue how to do this; so I'll find it an interesting study.

I found it a bit difficult to read - so I changed it to anti-clockwise.
DE AA EB
User avatar
kernadec
Enthusiast
Enthusiast
Posts: 146
Joined: Tue Jan 05, 2010 10:35 am

Re: Circle Sin Text

Post by kernadec »

hello
to have fun :D

best regard

Code: Select all

If InitSprite() = 0 Or InitKeyboard() = 0 Or OpenScreen(640,480,32,"App Title") = 0
   MessageRequester("Error!", "Unable to Initialize Environment", #PB_MessageRequester_Ok)
   End
EndIf

Dim Message$(26)

Message$(0)="H"
Message$(1)="E"
Message$(2)="L"
Message$(3)="L"
Message$(4)="O"
Message$(5)="A"
Message$(6)="N"
Message$(7)="D"
Message$(8)="W"
Message$(9)="E"
Message$(10)="L"
Message$(11)="C"
Message$(12)="O"
Message$(13)="M"
Message$(14)="E"
Message$(15)="T"
Message$(16)="O"
Message$(17)="P"
Message$(18)="U"
Message$(19)="R"
Message$(20)="E"
Message$(21)="B"
Message$(22)="A"
Message$(23)="S"
Message$(24)="I"
Message$(25)="C"
 
Repeat
      beta=beta+1
      ClearScreen(0)
      ExamineKeyboard()

 
      If StartDrawing(ScreenOutput())
         i=0
         For i=0 To 25;
             gamma=i*14+beta

             X=150 + 160 * Cos(Radian(gamma))
             Y=100 + 64  * -Sin(Radian(gamma))
             DrawText(180+X,100+Y,Message$(25-i),RGB(55+Random(200),55+Random(200),55+Random(200)))

           Next
           
      EndIf

      StopDrawing()

      FlipBuffers()
      Delay(25)
     
Until KeyboardPushed(#PB_Key_Escape)
End
User avatar
Mijikai
Addict
Addict
Posts: 1520
Joined: Sun Sep 11, 2016 2:17 pm

Re: Circle Sin Text

Post by Mijikai »

This is fun!
Rotate in other direction and some effects :D

Code: Select all

EnableExplicit

Procedure.i Main(Width.i,Height.i,Title.s = #Null$)
  Protected wnd.i
  Protected wnd_event.i
  Protected *chr.character
  Protected text.s
  Protected x1.i
  Protected y1.i
  Protected x2.i
  Protected y2.i
  Protected x3.i
  Protected y3.i
  Protected gamma.f
  Protected beta.f
  Protected slice.f
  Protected speed.f
  Protected mod.i
  If InitSprite()
    wnd = OpenWindow(#PB_Any,#Null,#Null,Width,Height,Title,#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    If wnd
      If OpenWindowedScreen(WindowID(wnd),#Null,#Null,Width,Height,#False,#Null,#Null,#PB_Screen_WaitSynchronization)
        SetFrameRate(50)
        text = "------- Hello and welcome to PureBasic -------"
        slice = 360 / Len(text);spacing
        Repeat
          Repeat
            wnd_event = WindowEvent()
            If wnd_event = #PB_Event_CloseWindow
              Break 2
            EndIf
            ClearScreen($0)
            StartDrawing(ScreenOutput())
            DrawingMode(#PB_2DDrawing_Transparent)
            speed + 0.8
            beta = speed
            *chr = @text;<- get base pointer to chars
            mod = 0
            Repeat
              gamma = Radian(360 - beta)
              x1 = (x1 / 10 - y1) * Sin(gamma) * (mod / 50)
              y1 = 200 + mod * -Cos(gamma)  
              DrawText(x1 + 400 ,y1 + 300 ,Chr(*chr\c),$FF8088 + x1 - y1 )
              x2 = (x2 / 10 - y2) * Sin(gamma) 
              y2 = 100  * -Cos(gamma)                
              DrawText(x2 + 400 ,y2 + 220 ,Chr(*chr\c),$FF8088 + x2 - y2 )
              x3 = 200 * Sin(gamma)
              y3 = 200 * -Cos(gamma)
              DrawText(x3 + 400 ,y3 + 220 ,Chr(*chr\c),$FF8088 + x3 - y3 )   
              mod + 1
              beta - slice
              *chr + SizeOf(Character);<- advance chr pointer
            Until *chr\c = #Null   
            StopDrawing()     
            FlipBuffers()
          Until wnd_event = #Null
        ForEver
      EndIf
      CloseWindow(wnd)
    EndIf
  EndIf
  ProcedureReturn #Null
EndProcedure

Main(800,600)

End
Post Reply