NCurses implementierung

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

BtbN

Betreff: NCurses implementierung

BeitragDi, Apr 18, 2006 14:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hinweis: Nicht für Windows
Link: http://btbn.de/files/ncurses.tar.bz2


NCurses ist eine C-Library, mit der man auf der Konsole zeichnen und Tastaturabfragen machen kann.
Das meiste ist zwar schon implementiert, aber ich konnte nicht jede Funktion einzeln überprüfen, deshalb freue ich mich über jeden gefundenen Fehler und werde versuchen, ihn schnellstmöglich zu berichtigen. Das OOP-Modul soll dazu dienen, die Lib einfacher benutzen zu können und nichtmehr mit Pointern hantieren zu müssen, dieses ist allerdings noch sehr unfertig und nur gerade lauffähig.

Hier 2 Beispiele für die Benutzung:

Ein Beispiel für das OOP-Modul. Erstellt ein Fenster, welches man mit den Pfeiltasten bewegen kann:
Code: [AUSKLAPPEN]
SuperStrict

Framework BtbN.NCursesOOP

Global app:TNCurses = New TNCurses

Global win:TNCWindow = app.NewWindow(2,2,15,5)
win.Box()

Local ch:Int
Repeat

   ch = app.GetChar()
   Select ch
      Case NC_KEY_UP
         win.Move(win.GetX(),win.GetY()-1)
      Case NC_KEY_DOWN
         win.Move(win.GetX(),win.GetY()+1)
      Case NC_KEY_LEFT
         win.Move(win.GetX()-1,win.GetY())
      Case NC_KEY_RIGHT
         win.Move(win.GetX()+1,win.GetY())
   EndSelect

   win.Print("Beispiel",2,2)

   app.Refresh()

Until ch = Asc("q")


app.Destroy()
End


Ein Sinuskurven-Beispiel von bigmichi, mit Num+ und Num- kann man die Anzahl veändern:
Code: [AUSKLAPPEN]
Import BtbN.NCurses

SeedRnd MilliSecs()

Global mainwnd:Byte Ptr = nc_initscr()

nc_curs_set(0)
nc_noecho()
nc_cbreak()

nc_start_color()
nc_clear()

'nc_init_pair(0, 0, 0);
'nc_init_color(1,55,10,10)
nc_init_pair(1, 1, 0)
nc_init_pair(2, 2, 0)
nc_init_pair(3, 3, 0)
nc_init_pair(4, 4, 0)
nc_init_pair(5, 5, 0)
nc_init_pair(6, 6, 0)
nc_init_pair(7, 7, 0)
nc_init_pair(8, 8, 0)
nc_init_pair(9, 9, 0)


nc_refresh()
nc_nodelay(mainwnd,True)

Local T:Int = MilliSecs()
Local AR:Byte=0, ER:Byte = 5

While AR < ER

   If T+100 < MilliSecs() Then
      TCurve.Add()
      T = MilliSecs()
      AR:+1
   End If

Wend

Local FPSTimer = CreateTimer(10)
Local doloop:Byte = 1,current_getch:Int
Local Pause:Byte = False
While doloop

   WaitTimer(FPSTimer)
   

   current_getch = nc_getch()
   If current_getch = 113 Then doloop = 0
   If current_getch = 32 Then Pause = Not Pause
   If current_getch = 43 Then TCurve.Add()
   If current_getch = 45 Then TCurve.CL.removefirst()
   
   If Not Pause Then
      nc_clear()
      TCurve.UpdateALL()
   End If
   
   'nc_mvaddstr(1, 1, string(current_getch))
   'nc_mvaddstr(2, 1, string(nc_Lines))
   'nc_mvaddstr(2, 4, string(nc_Cols))
   nc_refresh()
   
Wend
nc_endwin()

End

Type TCurve
   Global CL:TList = New TList
   Field Sins:TList = New TList
   Field StartWinkel:Short
   Field Winkel:Float
   Field EndWinkel:Short
   Field Aktiv:Byte = False
   Field Color:Byte
      
   Function Add:TCurve()
      Local TC:TCurve = New TCurve
         TC.StartWinkel = Rand(0,360)
         TC.Winkel = TC.StartWinkel
         TC.EndWinkel = TC.Winkel
         TC.Color = Rand(1,7)
         CL.AddLast(TC)
      Return TC
   End Function
   
   Function UpdateAll()
         For Local TC:TCurve = EachIn CL
               TC.Update()
         Next
   End Function
   
   Method Update()
      If Aktiv Then Sins.removefirst()
      Local TS:TSin = New TSin
      TS.Winkel = Winkel +7
      TS.S = Int( Sin(TS.winkel)*((nc_Lines)/2.0))
      Winkel = TS.Winkel
      Sins.ADDLAST(TS)

      Draw()
   End Method

   Method Draw()
      
      nc_color_set(Color, Null)
      Local MZ:Float = 0
      For Local TS:TSin = EachIn Sins
         
         nc_mvaddstr(((nc_Lines)/2.0)+TS.S, MZ, "#")
         nc_mvaddstr(((nc_Lines)/2.0)+TS.S, MZ+1, "#")
         'nc_color_set(2, Null)
         'nc_mvaddstr(5, 1, string(color))
         MZ:+2
      Next
      If MZ > nc_Cols Then Aktiv = True Else Aktiv = False
      End Method
      
End Type

Type TSin
   Field Winkel:Short
   Field S:Int
   
   Method Draw()
      nc_mvaddstr(10+S, 11, String(S))
   End Method
   
End Type



Wer sich etwas in NCurses einlesen möchte, hier ein Tutorial: http://web.cs.mun.ca/~rod/ncurses/ncurses.html (en)
 

phiker

BeitragDi, Apr 18, 2006 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Tolles Modul, wenn ich jetzt noch ein Beispiel mit nem farbigen Menü kriege, bin ich vollends zufrieden Wink *THUMBS UP*

kog

BeitragSo, Sep 13, 2009 16:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Inwiefern nicht für Windows?
könnte man das Modul nocheinmal heraufladen?

BtbN

BeitragSo, Sep 13, 2009 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Modul befindet sich noch in meinem git repo: http://git.oromit.de/gitweb/gi...git;a=tree
Ich wünsche dir viel spass beim Versuch, ncurses unter Windows zu verwenden.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group