Page 1 of 1

Input-funktio

Posted: Fri Nov 16, 2012 8:35 pm
by MrMonday
Tuli tarvetta cb:n omaa inputtia pätevämmälle ratkaisulle, ja ajattelin kokeilla koodailla mielenkiinnosta oman systeemin.

Code: Select all

InputX(100,150,4,100)

Function InputX(x_position=0,y_position=0,tab=4,speed=100)
    
        ClearKeys
    
    Repeat
    
    If Timer()>pressed+speed
    
        If KeyDown(2)
            user_input$ = "1" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(3)
            user_input$ = "2" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(4)
            user_input$ = "3" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(5)
            user_input$ = "4" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(6)
            user_input$ = "5" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(7)
            user_input$ = "6" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(8)
            user_input$ = "7" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(9)
            user_input$ = "8" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(10)
            user_input$ = "9" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(11)
            user_input$ = "0" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(12)
            user_input$ = "-" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(13)
            user_input$ = "+" : key_pressed = True
        ElseIf KeyDown(14) And Len(X_String$) > 0
            X_String$ = StrRemove(X_String$,Len(X_String$),1)
            pressed = Timer()
        ElseIf KeyDown(15)
            user_input$ = String(" ",tab) : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(16)
            user_input$ = "q" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(17)
            user_input$ = "w" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(18)
            user_input$ = "e" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(19)
            user_input$ = "r" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(20)
            user_input$ = "t" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(21)
            user_input$ = "y" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(22)
            user_input$ = "u" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(23)
            user_input$ = "i" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(24)
            user_input$ = "o" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(25)
            user_input$ = "p" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(26)
            user_input$ = "[" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(27)
            user_input$ = "]" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(28)
            Return X_String$
            pressed = Timer()
        ElseIf KeyDown(30)
            user_input$ = "a" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(31)
            user_input$ = "s" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(32)
            user_input$ = "d" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(33)
            user_input$ = "f" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(34)
            user_input$ = "g" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(35)
            user_input$ = "h" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(36)
            user_input$ = "j" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(37)
            user_input$ = "k" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(38)
            user_input$ = "l" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(39)
            user_input$ = "ö" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(40)
            user_input$ = "ä" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(44)
            user_input$ = "z" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(45)
            user_input$ = "x" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(46)
            user_input$ = "c" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(47)
            user_input$ = "v" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(48)
            user_input$ = "b" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(49)
            user_input$ = "n" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(50)
            user_input$ = "m" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(51)
            user_input$ = "," : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(52)
            user_input$ = "." : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(53)
            user_input$ = "/" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(57)
            user_input$ = " " : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(71)
            user_input$ = "7" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(72)
            user_input$ = "8" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(73)
            user_input$ = "9" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(74)
            user_input$ = "-" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(75)
            user_input$ = "4" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(76)
            user_input$ = "5" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(77)
            user_input$ = "6" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(78)
            user_input$ = "+" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(79)
            user_input$ = "1" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(80)
            user_input$ = "2" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(81)
            user_input$ = "3" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(82)
            user_input$ = "0" : key_pressed = True
            pressed = Timer()
        ElseIf KeyDown(83)
            user_input$ = "," : key_pressed = True
            pressed = Timer()
        EndIf
    
        If key_pressed = True
            If KeyDown(42) Or KeyDown(54)
                X_String$ = StrInsert(X_String$,Len(X_String$),Upper(user_input$)) : key_pressed = False
            Else
                X_String$ = StrInsert(X_String$,Len(X_String$),user_input$) : key_pressed = False
            EndIf
        EndIf
    
    EndIf
    
    Color 255,255,255
    Text x_position,y_position,X_String$
        
        If TIMER()>record+200 Then 
            blink=Not blink
            record=TIMER()
        EndIf
        
        If blink
            Color 255,255,255
        Else
            Color 0,0,0
        EndIf
    
        Line TextWidth(X_String$)+x_position,y_position,TextWidth(X_String$)+x_position,y_position+TextHeight(X_String$)
    
        DrawScreen
    Forever

EndFunction
Koodi on rumaa, eikä ratkaisut parhaita mahdollisia, mutta kohtuu vikkelään sain tuommosen funktion kasaan.
Säätöä voi tehdä syötteen sijaintiin sekä painalluksien vastaanottotiheyteen ja sarkaimen suuruuteen. Saatan innostua vielä parantelemaan tätä, mutta mikäli tarvetta ilmenee, niin saa ihan vapaasti käyttää ja muokkailla omiin tarkoituksiin sopivaksi..
EDIT:

Niin ja shift-näppäin (kumpi vain) pohjassa kirjottaa isompaa aakkosta..


Re: Input-funktio

Posted: Fri Nov 16, 2012 9:41 pm
by Latexi95
GetKey olisi kyllä paikallaan. Koodi lyhenisi todella merkittävästi ja pääsisit tuosta kamalasta if-hässäkästä. cbSDK:ssa on oma viritelmänsä tätä varten, jos kiinnostaa katsoa mallia tai vaihtoehtoista ratkaisua.

Re: Input-funktio

Posted: Fri Nov 16, 2012 10:12 pm
by MrMonday
Latexi95 wrote:GetKey olisi kyllä paikallaan. Koodi lyhenisi todella merkittävästi ja pääsisit tuosta kamalasta if-hässäkästä. cbSDK:ssa on oma viritelmänsä tätä varten, jos kiinnostaa katsoa mallia tai vaihtoehtoista ratkaisua.
Alkuun tein GetKey:llä, jolloin rivimäärä olikin <20, mutta kokeilin sitten näinkinpäin, vaikkakin hävyttömän rumaksi se vetää tuon. Mutta ajattelin kyllä päästä eroon tuosta if-sotkusta.

Re: Input-funktio

Posted: Sat Nov 17, 2012 5:54 pm
by naputtelija
Coolbasicin perussääntö: ota se, joka on nopeampi.

Re: Input-funktio

Posted: Sat Nov 17, 2012 6:32 pm
by valscion
Olihan kunnon Input-syöte jo olemassa aikaisemmin...

EDIT: Juu ja onhan tuo sinun tekemäsi tosiaan näppärä :). Ja hyvä että mielenkiintoa riittää. Itselläni näköjään tämän viestin kirjoittaessani ei mielenkiintoa iloisemmalle ulosannille ollut joten pahoitteluni, että olin vähän tökerö.

Re: Input-funktio

Posted: Thu Dec 13, 2012 3:45 pm
by Misthema
MrMonday wrote:... ja ajattelin kokeilla koodailla mielenkiinnosta oman systeemin.
Ihmettelenpä vain mikä ihme VesQ:lla meni tässä lauseessa ohi... o_O


Ihan pätevä systeemi kyllä. Muistuttaa suuresti omatekemääni ChaosBasic:lle joskus kauan sitten. :D Oli siis joka näppäin samaisesti iffailtu ja niitä vastaavat merkit sitä kautta merkkijonoon. :)