Тема: Консоль
Показать сообщение отдельно
Старый 29.08.2008, 17:29   #7
JoKeR_13
Оператор ЭВМ
 
Регистрация: 09.04.2007
Сообщений: 28
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Консоль

Решил поделиться своей нароботкой.
Огромное СПАСИБО Grover за его статью в Blitz Et Cetera
В данном примере работают 2 команды
  1. help - выводит справку
  2. showfps true|false - отображение FPS (If shFPS=1 Then Text 0,0,"FPS: "+fps)
Для начала я об'являю переменные
; Консоль
Global ConsFlg=0
Const Kolcmd=9 ; количество отображаемых строк консоли
Dim  cmdbuff$(Kolcmd) ; ? Кол-во строк
Global shFPS=0; 0 - не показывать FPS, 1- показывать
Создаем основные функции
Function  InitConsole$()
    cur_pos%=Len(s$)
    view_text$=""
    X1=4
    gh=GraphicsHeight ()/2-8
    fh=FontHeight() +1
    strok%=(gh/fh)-1
    While Not KeyHit (28)
        Cls 
        Color  200,200,200
        Rect 0,0,GraphicsWidth (),GraphicsHeight ()/2,1
        Color  0,0,0
        Rect 2,2,GraphicsWidth ()-4,GraphicsHeight ()/2-4,0
        For i=0 To strok-1
            Text 4,X1+(i*(FontHeight ()+1)),cmdbuff(i)
        Next 
        view_text$=Left(s, cur_pos)
        view_text$=view_text$+"|"
        view_text$=view_text$+Right(s,Len (s)-cur_pos)
        Text 4,GraphicsHeight ()/2-4-20,">"+view_text
        Flip
        k=WaitKey ()
        Select  True
        Case (k>31) And (k<127)
            temp$=s$
            S$=Left (temp$,Cur_pos)+Chr(k)+Right (temp$,Len(temp$)-cur_pos)
            cur_pos=cur_pos+1
        Case  k=8
            If cur_pos<>0 Then 
                temp$=s$
                s=Left (temp$,cur_pos-1)+Right (temp$,Len(temp$)-cur_pos)
                cur_pos=cur_pos-1
            EndIf
        Case k=4
            If cur_pos<>Len(s) Then
                temp$=s$
                s$=Left (temp$,cur_pos)+Right (temp$, Len(temp$)-cur_pos-1)
            EndIf
        Case k=31
            cur_pos=cur_pos-1
            If cur_pos<0 Then cur_pos=0
        Case k=30
            cur_pos=cur_pos+1
            If cur_pos>Len (s$) Then cur_pos=Len(s)
        Case k=1
            cur_pos=0
        Case k=2
            cur_pos=Len(s)
        End Select
    Wend
    Viewport 0,0,GraphicsWidth (),GraphicsHeight ()
    Return s$
End Function

; Обрабатываем команду из консоли
Function  CommandConsole(Cmd$)
    For i=0 To Kolcmd
        If cmdbuff(i)="" Then     Exit
    Next
    If i>Kolcmd Then
        Sdvig()
        i=Kolcmd
    EndIf    
    cmdbuff(i)=">"+Cmd$
    ; Обрабатываем команду
    Com$=ConsoleCMD$(cmd$)
    Param$=ConsoleCMDParam$(cmd$)
    Select  True
    Case Com="help"
        CommandConsole(">help, showfps")
    Case Com="showfps"
        If Param="true" Then
            shFPS=1
            CommandConsole(">FPS On")
        ElseIf  Param="false" Then
            shFPS=0
            CommandConsole(">FPS Off")
        Else
            CommandConsole(">Неверный параметр "+Param)        
        EndIf          
    End Select 
End Function 

; Сдвигаем матрицу команд
Function Sdvig()
    For i=0 To Kolcmd-1
        cmdbuff(i)=cmdbuff(i+1)
    Next
    cmdbuff(kolcmd)=""
End Function 

; Вытаскиваем команду
Function ConsoleCMD$(cmd$)
    l=Instr(cmd," ",1)
    If l=0 Then
        Return cmd
    Else Return Left(cmd, l-1)
    EndIf
End Function 

; Вытаскиваем параметры
Function ConsoleCMDParam$(cmd$)
    l=Instr(cmd," ",1)
    If (l=0) Or (l=Len(cmd)) Then
        Return ""
    Else Return Right (cmd,Len(cmd)- l)
    EndIf 
End Function
В обработчике нажатия клавиш пишем следующую строку
If  KeyDown (87)=1 Then  CommandConsole(InitConsole$()); Отображаем консоль F11
Очень буду признателен за критику кода, но слишком на меня не нападайте плз.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
LLI.T.A.L.K.E.R. (09.05.2014)