Input-funktio

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

Input-funktio

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

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

Re: Input-funktio

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: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: Input-funktio

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.

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

Re: Input-funktio

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

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

Re: Input-funktio

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

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

Re: Input-funktio

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. Oli siis joka näppäin samaisesti iffailtu ja niitä vastaavat merkit sitä kautta merkkijonoon.