Input-funktio

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
MrMonday
Advanced Member
Posts: 377
Joined: Fri Oct 10, 2008 2:35 pm

Input-funktio

Post by MrMonday » Fri Nov 16, 2012 9:35 pm

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..


User avatar
Latexi95
Guru
Posts: 1163
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Input-funktio

Post by Latexi95 » Fri Nov 16, 2012 10:41 pm

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.

MrMonday
Advanced Member
Posts: 377
Joined: Fri Oct 10, 2008 2:35 pm

Re: Input-funktio

Post by MrMonday » Fri Nov 16, 2012 11:12 pm

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.

User avatar
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 8:56 pm
Location: Joku piste pohjoisessa.

Re: Input-funktio

Post by naputtelija » Sat Nov 17, 2012 6:54 pm

Coolbasicin perussääntö: ota se, joka on nopeampi.
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...

User avatar
valscion
Moderator
Moderator
Posts: 1584
Joined: Thu Dec 06, 2007 8:46 pm
Location: Espoo
Contact:

Re: Input-funktio

Post by valscion » Sat Nov 17, 2012 7:32 pm

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ö.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com

User avatar
Misthema
Advanced Member
Posts: 312
Joined: Mon Aug 27, 2007 8:32 pm
Location: Turku, Finland
Contact:

Re: Input-funktio

Post by Misthema » Thu Dec 13, 2012 4:45 pm

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. :)

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest