you need some log functions, let me re-dig up my guitar hero clone code. it has a binary system similar to that.
speed=1
dim frets(5)
start=timer()
randomize timer()
load image "gfret.BMP",1
load image "rfret.BMP",2
load image "yfret.BMP",3
load image "bfret.BMP",4
load image "ofret.BMP",5
load image "gffret.BMP",11
load image "rffret.BMP",12
load image "yffret.BMP",13
load image "bffret.BMP",14
load image "offret.BMP",15
perform checklist for control devices
set control device checklist string$(1)
sprite 11,50,400,11
sprite 12,100,400,12
sprite 13,150,400,13
sprite 14,200,400,14
sprite 15,250,400,15
sync on
create bitmap 1,640,480
do
` button=rnd(4)+1
` fret=button
` fret=2^fret
` dec fret
buttons=rnd(29)+1
fretworks(buttons*1.)
sprite 1000,50,0,1000
repeat
if joystick fire x(0)=1
frets(1)=1
else
frets(1)=0
endif
if joystick fire x(1)=1
frets(2)=1
else
frets(2)=0
endif
if joystick fire x(3)=1
frets(3)=1
else
frets(3)=0
endif
if joystick fire x(2)=1
frets(4)=1
else
frets(4)=0
endif
if joystick fire x(4)=1
frets(5)=1
else
frets(5)=0
endif
sprite 11,50,400,1+(frets(1)*10)
sprite 12,100,400,2+(frets(2)*10)
sprite 13,150,400,3+(frets(3)*10)
sprite 14,200,400,4+(frets(4)*10)
sprite 15,250,400,5+(frets(5)*10)
sprite 1000,sprite x(1000),sprite y(1000)+speed,1000
if joystick slider c()<>-1 and strum=0
` diff#=timer()-start
` diff#=diff#/1000
` print diff#
strums#=timer()
strum=1
endif
if joystick slider c()=-1 then strum=0
sync
until sprite y(1000)>=350
frethit#=timer()
expnum=buttons
fret=checkfret(expnum)
diff#=frethit#-strums#
` print expnum
` print fret
print diff#
if fret=expnum
if abs(diff#)<400
inc speed
else
speed=1
endif
endif
delete sprite 1000
strums#=0
loop
end
function checkfret(expnum)
frets=0
if joystick fire x(0)=1
inc frets,1
endif
if joystick fire x(1)=1
inc frets,2
endif
if joystick fire x(3)=1
inc frets,4
endif
if joystick fire x(2)=1
inc frets,8
endif
if joystick fire x(4)=1
inc frets,16
endif
endfunction frets
REM Posted on codebase by kevil on May 23, 2003
function ln(answer#)
e#=2.71
ln#=sqrt(answer#/e#)
repeat
ln#=ln#-(((e#^ln#)-answer#)/(e#^ln#))
until abs((e#^ln#)-answer#)<=0.001
endfunction ln#
function fretworks(current#)
if bitmap exist(1) then delete bitmap 1
create bitmap 1,640,480
repeat
x#=ln(current#)/ln(2.0)
if (x#-int(x#))>=.9 and x#<4
x#=int(x#)+1
endif
x=x#
paste image x+1,x*50,100
current#=current#-(2^x)
until current#<=0
get image 1000,0,50,640,150
set current bitmap 0
endfunction
The important part to look at are the fretworks() calls. That is where you will see the decoding math.
Great Quote:
"Time...LINE??? Time isn't made out of lines...it is made out of circles. That is why clocks are round!" -Caboose