call clrscr nf%=1 go% = 1 sv#=0.75 k$ = "" level% = 1 call title_screen dim worm%[100] dim wall%[20] loop for a% = 1 to 20 wall%[a%] = 0 endloop call new_level(level%) hap% = 1 loop wait 0.01 k$ = key$ k% = asc%(k$,1) if (k% = 37) and (dir%<>3) then dir% = 1 endif if (k% = 38) and (dir%<>4) then dir% = 2 endif if (k% = 39) and (dir%<>1) then dir% = 3 endif if (k% = 40) and (dir% <> 2) then dir% = 4 endif if k$ = "q" then go% = 0 endif if k$ = "r" then call drawboard endif if k$ = "p" then dir% = 0 endif if dir% <> 0 then call update_worm endif call draw_block(fx%,fy%) while go%=1 ENDLOOP !***************************! procedure draw_block(bx%,by%) call color(3) call fillrect(bx% * 2,by%*2,(bx%*2) +2,(by%*2)+2) endproc !***************************! procedure erase_block(bx%,by%) call color(0) call fillrect(bx% * 2,by%*2,(bx%*2) +2,(by%*2)+2) endproc !***************************! procedure title_screen call draw_logo(275,33) call curpos(20,6) print "Nibbles for Basice" call curpos(20,9) print "Written by Brian Kay in MCMXCVIII" wx% = 70 loop k$ = key$ wait 0.05 if wx% < 170 then call draw_block(wx%,50) endif call erase_block(wx%-10,50) wx% = wx% + 1 if wx% = 180 then wx% = 70 endif while len%(k$) = 0 endloop endproc !***************************! procedure borders call clrscr call color(3) call fillrect(0,0,480,2) call fillrect(0,0,2,190) call fillrect(478,0,480,188) call fillrect(0,186,479,188) endproc !***************************! procedure drawboard call borders loop for a% = 1 to 4 call fillrect(wall%[((a%-1)*4)+1],wall%[((a%-1)*4)+2],wall%[((a%-1)*4)+3],wall%[((a%-1)*4)+4]) endloop loop for a% = 1 to wl% call draw_block(get_worm(a%,1),get_worm(a%,2)) endloop endproc !***************************! procedure new_level(level%) wl% = 10 hap%=1 loop for a% = 1 to 100 worm%[a%] = 0 endloop if level% = 2 then call set_wall(1,1,100) call set_wall(1,2,100) call set_wall(1,3,400) call set_wall(1,4,102) endif if level% = 3 then call set_wall(1,1,200) call set_wall(1,2,0) call set_wall(1,3,202) call set_wall(1,4,160) endif if level% = 4 then call set_wall(1,1,200) call set_wall(1,2,0) call set_wall(1,3,202) call set_wall(1,4,160) call set_wall(2,1,100) call set_wall(2,2,60) call set_wall(2,3,102) call set_wall(2,4,192) call set_wall(3,1,300) call set_wall(3,2,60) call set_wall(3,3,302) call set_wall(3,4,192) endif if level% = 5 then call set_wall(1,1,0) call set_wall(1,2,48) call set_wall(1,3,240) call set_wall(1,4,50) call set_wall(2,1,360) call set_wall(2,2,0) call set_wall(2,3,362) call set_wall(2,4,96) call set_wall(3,1,240) call set_wall(3,2,144) call set_wall(3,3,480) call set_wall(3,4,146) call set_wall(4,1,120) call set_wall(4,2,96) call set_wall(4,3,122) call set_wall(4,4,192) endif call drawboard hx% = 5 hy% = 6 dir% = 3 call disp_food endproc !***************************! procedure update_worm if hap% = 1 then tp% = wl% else tp% = hap% - 1 endif call erase_block(get_worm(tp%,1),get_worm(tp%,2)) if dir% = 1 then hx% = hx% - 1 endif if dir% = 2 then hy% = hy% - 1 endif if dir% = 3 then hx% = hx%+1 endif if dir% = 4 then hy% = hy% + 1 endif if hap% = 1 then hap% = wl% else hap% = hap% - 1 endif call set_worm(hap%,1,hx%) call set_worm(hap%,2,hy%) call draw_block(hx%,hy%) call check_collision return endproc !***************************! procedure get_worm(bl%,xy%) bl% = bl% -1 return(worm%[(bl%*2)+xy%]) endproc !***************************! procedure set_worm(bl%,xy%,v%) bl% = bl% -1 worm%[(bl%*2)+xy%] = v% endproc !***************************! procedure get_wall(walln%,xy%) walln% = walln% - 1 return(wall%[(walln%*4)+xy%]) endproc !***************************! procedure set_wall(walln%,xy%,v%) walln% = walln% - 1 wall%[(walln%*4)+xy%] = v% endproc !***************************! procedure check_collision if (hx%<1) or (hy% <1) or (hy%>92) or (hx%>237) then go% = 0 endif loop for a% = 1 to wl% if (hx% = get_worm(a%,1)) and (hy% = get_worm(a%,2)) and (a% <> hap%) then go% = 0 endif endloop loop for a% = 1 to 4 if (hx% >= wall%[((a%-1)*4)+1]/2) and (hy%>= wall%[((a%-1)*4)+2]/2) and (hx% <= (wall%[((a%-1)*4)+3]/2)-1) and (hy% <= (wall%[((a%-1)*4)+4]/2)-1) then go% = 0 endif endloop if (hx% = fx%) and (hy% = fy%) then if wl% < 50 then wl% = wl%+10 if worm%[9] > worm%[10] then ma# = worm%[5] mi# = worm%[20] else ma# = worm%[20] mi# = worm%[5] endif sv# = mi# / ma# call disp_food else if level% <> 5 then level%=level% +1 call new_level(level%) else go%=2 endif endif endif if (go% = 2) or (go%=0) then call curpos(20,10) print "http://www.geocities.com/SiliconValley/Way/8527" call curpos(25,6) call draw_logo(300,35) endif if go% = 0 then print "Game Over" endif if go% = 2 then print"You won the game" endif endproc !***************************! procedure rand(lbound%,ubound%) lbound# = lbound% ubound# = ubound% rn# = (sv# * (ubound# - lbound#))+ lbound# rs# = rn# if rs# = 0 then rs# = 1 endif sv# = rs#/(ubound#) rn% = rn# return(rn%) endproc !***************************! procedure disp_food ga2%=0 loop ga%=1 fx% = rand(2,236) fy% = rand(2,91) loop for a% = 1 to 4 if (fx% >= wall%[((a%-1)*4)+1]/2) and (fy%>= wall%[((a%-1)*4)+2]/2) and (fx% <= (wall%[((a%-1)*4)+3]/2)-1) and (fy% <= wall%[((a%-1)*4)+1]/2) then ga%=0 endif endloop loop for a% = 1 to wl% if (get_worm(a%,1) = fx%) and (get_worm(a%,2) = fy%) then ga%=0 endif if ga% = 1 then while ga2%=0 endif endloop call draw_block(fx%,fy%) endproc !*************************! Procedure draw_logo(logox%,logoy%) call color(3) call line( 8+logox%, 76+logoy%, 8+logox%, 77+logoy%) call line( 9+logox%, 75+logoy%, 9+logox%, 77+logoy%) call line( 10+logox%, 73+logoy%, 10+logox%, 77+logoy%) call line( 11+logox%, 72+logoy%, 11+logox%, 77+logoy%) call line( 12+logox%, 71+logoy%, 12+logox%, 77+logoy%) call line( 13+logox%, 70+logoy%, 13+logox%, 77+logoy%) call line( 14+logox%, 70+logoy%, 14+logox%, 77+logoy%) call line( 15+logox%, 70+logoy%, 15+logox%, 72+logoy%) call line( 15+logox%, 74+logoy%, 15+logox%, 75+logoy%) call line( 15+logox%, 76+logoy%, 15+logox%, 77+logoy%) call line( 16+logox%, 65+logoy%, 16+logox%, 67+logoy%) call line( 16+logox%, 70+logoy%, 16+logox%, 71+logoy%) call line( 16+logox%, 74+logoy%, 16+logox%, 75+logoy%) call line( 17+logox%, 64+logoy%, 17+logox%, 67+logoy%) call line( 17+logox%, 70+logoy%, 17+logox%, 71+logoy%) call line( 17+logox%, 72+logoy%, 17+logox%, 73+logoy%) call line( 17+logox%, 75+logoy%, 17+logox%, 76+logoy%) call line( 18+logox%, 63+logoy%, 18+logox%, 67+logoy%) call line( 18+logox%, 70+logoy%, 18+logox%, 71+logoy%) call line( 18+logox%, 72+logoy%, 18+logox%, 73+logoy%) call line( 18+logox%, 75+logoy%, 18+logox%, 76+logoy%) call line( 19+logox%, 62+logoy%, 19+logox%, 67+logoy%) call line( 19+logox%, 70+logoy%, 19+logox%, 71+logoy%) call line( 19+logox%, 73+logoy%, 19+logox%, 74+logoy%) call line( 20+logox%, 60+logoy%, 20+logox%, 67+logoy%) call line( 20+logox%, 70+logoy%, 20+logox%, 72+logoy%) call line( 20+logox%, 73+logoy%, 20+logox%, 74+logoy%) call line( 20+logox%, 76+logoy%, 20+logox%, 77+logoy%) call line( 21+logox%, 59+logoy%, 21+logox%, 67+logoy%) call line( 21+logox%, 70+logoy%, 21+logox%, 77+logoy%) call line( 22+logox%, 58+logoy%, 22+logox%, 67+logoy%) call line( 22+logox%, 70+logoy%, 22+logox%, 77+logoy%) call line( 23+logox%, 57+logoy%, 23+logox%, 67+logoy%) call line( 23+logox%, 70+logoy%, 23+logox%, 77+logoy%) call line( 24+logox%, 55+logoy%, 24+logox%, 67+logoy%) call line( 24+logox%, 70+logoy%, 24+logox%, 72+logoy%) call line( 24+logox%, 76+logoy%, 24+logox%, 77+logoy%) call line( 25+logox%, 54+logoy%, 25+logox%, 67+logoy%) call line( 25+logox%, 70+logoy%, 25+logox%, 71+logoy%) call line( 26+logox%, 53+logoy%, 26+logox%, 67+logoy%) call line( 26+logox%, 70+logoy%, 26+logox%, 71+logoy%) call line( 26+logox%, 72+logoy%, 26+logox%, 76+logoy%) call line( 27+logox%, 51+logoy%, 27+logox%, 67+logoy%) call line( 27+logox%, 70+logoy%, 27+logox%, 71+logoy%) call line( 27+logox%, 72+logoy%, 27+logox%, 76+logoy%) call line( 28+logox%, 50+logoy%, 28+logox%, 67+logoy%) call line( 28+logox%, 70+logoy%, 28+logox%, 71+logoy%) call line( 29+logox%, 49+logoy%, 29+logox%, 67+logoy%) call line( 29+logox%, 70+logoy%, 29+logox%, 72+logoy%) call line( 29+logox%, 76+logoy%, 29+logox%, 77+logoy%) call line( 30+logox%, 48+logoy%, 30+logox%, 67+logoy%) call line( 30+logox%, 70+logoy%, 30+logox%, 77+logoy%) call line( 31+logox%, 46+logoy%, 31+logox%, 67+logoy%) call line( 31+logox%, 70+logoy%, 31+logox%, 77+logoy%) call line( 32+logox%, 45+logoy%, 32+logox%, 67+logoy%) call line( 32+logox%, 70+logoy%, 32+logox%, 77+logoy%) call line( 33+logox%, 44+logoy%, 33+logox%, 67+logoy%) call line( 33+logox%, 70+logoy%, 33+logox%, 72+logoy%) call line( 33+logox%, 73+logoy%, 33+logox%, 77+logoy%) call line( 34+logox%, 42+logoy%, 34+logox%, 67+logoy%) call line( 34+logox%, 70+logoy%, 34+logox%, 71+logoy%) call line( 35+logox%, 41+logoy%, 35+logox%, 67+logoy%) call line( 36+logox%, 40+logoy%, 36+logox%, 67+logoy%) call line( 36+logox%, 71+logoy%, 36+logox%, 72+logoy%) call line( 36+logox%, 73+logoy%, 36+logox%, 77+logoy%) call line( 37+logox%, 39+logoy%, 37+logox%, 67+logoy%) call line( 37+logox%, 71+logoy%, 37+logox%, 77+logoy%) call line( 38+logox%, 70+logoy%, 38+logox%, 77+logoy%) call line( 39+logox%, 70+logoy%, 39+logox%, 77+logoy%) call line( 40+logox%, 70+logoy%, 40+logox%, 72+logoy%) call line( 40+logox%, 73+logoy%, 40+logox%, 77+logoy%) call line( 41+logox%, 76+logoy%, 41+logox%, 77+logoy%) call line( 43+logox%, 30+logoy%, 43+logox%, 46+logoy%) call line( 43+logox%, 54+logoy%, 43+logox%, 67+logoy%) call line( 43+logox%, 70+logoy%, 43+logox%, 72+logoy%) call line( 43+logox%, 73+logoy%, 43+logox%, 76+logoy%) call line( 44+logox%, 29+logoy%, 44+logox%, 45+logoy%) call line( 44+logox%, 55+logoy%, 44+logox%, 67+logoy%) call line( 44+logox%, 70+logoy%, 44+logox%, 77+logoy%) call line( 45+logox%, 27+logoy%, 45+logox%, 44+logoy%) call line( 45+logox%, 56+logoy%, 45+logox%, 67+logoy%) call line( 45+logox%, 70+logoy%, 45+logox%, 77+logoy%) call line( 46+logox%, 26+logoy%, 46+logox%, 43+logoy%) call line( 46+logox%, 49+logoy%, 46+logox%, 51+logoy%) call line( 46+logox%, 57+logoy%, 46+logox%, 67+logoy%) call line( 46+logox%, 70+logoy%, 46+logox%, 77+logoy%) call line( 47+logox%, 25+logoy%, 47+logox%, 42+logoy%) call line( 47+logox%, 48+logoy%, 47+logox%, 52+logoy%) call line( 47+logox%, 58+logoy%, 47+logox%, 67+logoy%) call line( 47+logox%, 70+logoy%, 47+logox%, 77+logoy%) call line( 48+logox%, 24+logoy%, 48+logox%, 41+logoy%) call line( 48+logox%, 47+logoy%, 48+logox%, 53+logoy%) call line( 48+logox%, 59+logoy%, 48+logox%, 67+logoy%) call line( 48+logox%, 70+logoy%, 48+logox%, 71+logoy%) call line( 48+logox%, 74+logoy%, 48+logox%, 77+logoy%) call line( 49+logox%, 25+logoy%, 49+logox%, 40+logoy%) call line( 49+logox%, 46+logoy%, 49+logox%, 54+logoy%) call line( 49+logox%, 60+logoy%, 49+logox%, 67+logoy%) call line( 49+logox%, 70+logoy%, 49+logox%, 71+logoy%) call line( 50+logox%, 27+logoy%, 50+logox%, 39+logoy%) call line( 50+logox%, 45+logoy%, 50+logox%, 55+logoy%) call line( 50+logox%, 61+logoy%, 50+logox%, 67+logoy%) call line( 50+logox%, 70+logoy%, 50+logox%, 74+logoy%) call line( 51+logox%, 28+logoy%, 51+logox%, 38+logoy%) call line( 51+logox%, 44+logoy%, 51+logox%, 56+logoy%) call line( 51+logox%, 62+logoy%, 51+logox%, 67+logoy%) call line( 51+logox%, 70+logoy%, 51+logox%, 72+logoy%) call line( 51+logox%, 76+logoy%, 51+logox%, 77+logoy%) call line( 52+logox%, 30+logoy%, 52+logox%, 37+logoy%) call line( 52+logox%, 43+logoy%, 52+logox%, 57+logoy%) call line( 52+logox%, 63+logoy%, 52+logox%, 67+logoy%) call line( 52+logox%, 70+logoy%, 52+logox%, 71+logoy%) call line( 52+logox%, 74+logoy%, 52+logox%, 77+logoy%) call line( 53+logox%, 31+logoy%, 53+logox%, 36+logoy%) call line( 53+logox%, 42+logoy%, 53+logox%, 58+logoy%) call line( 53+logox%, 64+logoy%, 53+logox%, 67+logoy%) call line( 53+logox%, 70+logoy%, 53+logox%, 72+logoy%) call line( 53+logox%, 76+logoy%, 53+logox%, 77+logoy%) call line( 54+logox%, 33+logoy%, 54+logox%, 35+logoy%) call line( 54+logox%, 41+logoy%, 54+logox%, 59+logoy%) call line( 54+logox%, 65+logoy%, 54+logox%, 67+logoy%) call line( 54+logox%, 70+logoy%, 54+logox%, 74+logoy%) call line( 55+logox%, 40+logoy%, 55+logox%, 60+logoy%) call line( 55+logox%, 66+logoy%, 55+logox%, 67+logoy%) call line( 55+logox%, 70+logoy%, 55+logox%, 71+logoy%) call line( 56+logox%, 39+logoy%, 56+logox%, 61+logoy%) call line( 56+logox%, 70+logoy%, 56+logox%, 71+logoy%) call line( 56+logox%, 74+logoy%, 56+logox%, 77+logoy%) call line( 57+logox%, 38+logoy%, 57+logox%, 62+logoy%) call line( 57+logox%, 70+logoy%, 57+logox%, 77+logoy%) call line( 58+logox%, 38+logoy%, 58+logox%, 63+logoy%) call line( 58+logox%, 70+logoy%, 58+logox%, 77+logoy%) call line( 59+logox%, 40+logoy%, 59+logox%, 64+logoy%) call line( 59+logox%, 70+logoy%, 59+logox%, 77+logoy%) call line( 60+logox%, 42+logoy%, 60+logox%, 65+logoy%) call line( 60+logox%, 70+logoy%, 60+logox%, 72+logoy%) call line( 60+logox%, 73+logoy%, 60+logox%, 74+logoy%) call line( 60+logox%, 76+logoy%, 60+logox%, 77+logoy%) call line( 61+logox%, 43+logoy%, 61+logox%, 66+logoy%) call line( 61+logox%, 70+logoy%, 61+logox%, 71+logoy%) call line( 61+logox%, 72+logoy%, 61+logox%, 73+logoy%) call line( 62+logox%, 44+logoy%, 62+logox%, 67+logoy%) call line( 62+logox%, 70+logoy%, 62+logox%, 71+logoy%) call line( 62+logox%, 72+logoy%, 62+logox%, 73+logoy%) call line( 62+logox%, 74+logoy%, 62+logox%, 76+logoy%) call line( 63+logox%, 46+logoy%, 63+logox%, 67+logoy%) call line( 63+logox%, 70+logoy%, 63+logox%, 71+logoy%) call line( 64+logox%, 47+logoy%, 64+logox%, 67+logoy%) call line( 64+logox%, 70+logoy%, 64+logox%, 72+logoy%) call line( 65+logox%, 48+logoy%, 65+logox%, 67+logoy%) call line( 65+logox%, 70+logoy%, 65+logox%, 77+logoy%) call line( 66+logox%, 49+logoy%, 66+logox%, 67+logoy%) call line( 66+logox%, 70+logoy%, 66+logox%, 77+logoy%) call line( 67+logox%, 51+logoy%, 67+logox%, 67+logoy%) call line( 67+logox%, 70+logoy%, 67+logox%, 77+logoy%) call line( 68+logox%, 52+logoy%, 68+logox%, 67+logoy%) call line( 68+logox%, 70+logoy%, 68+logox%, 77+logoy%) call line( 69+logox%, 53+logoy%, 69+logox%, 67+logoy%) call line( 69+logox%, 70+logoy%, 69+logox%, 71+logoy%) call line( 70+logox%, 55+logoy%, 70+logox%, 67+logoy%) call line( 70+logox%, 70+logoy%, 70+logox%, 71+logoy%) call line( 71+logox%, 56+logoy%, 71+logox%, 67+logoy%) call line( 71+logox%, 70+logoy%, 71+logox%, 71+logoy%) call line( 71+logox%, 72+logoy%, 71+logox%, 77+logoy%) call line( 72+logox%, 57+logoy%, 72+logox%, 67+logoy%) call line( 72+logox%, 70+logoy%, 72+logox%, 71+logoy%) call line( 72+logox%, 72+logoy%, 72+logox%, 77+logoy%) call line( 73+logox%, 59+logoy%, 73+logox%, 67+logoy%) call line( 73+logox%, 70+logoy%, 73+logox%, 77+logoy%) call line( 74+logox%, 60+logoy%, 74+logox%, 67+logoy%) call line( 74+logox%, 70+logoy%, 74+logox%, 77+logoy%) call line( 75+logox%, 61+logoy%, 75+logox%, 67+logoy%) call line( 75+logox%, 70+logoy%, 75+logox%, 77+logoy%) call line( 76+logox%, 63+logoy%, 76+logox%, 67+logoy%) call line( 76+logox%, 70+logoy%, 76+logox%, 72+logoy%) call line( 76+logox%, 76+logoy%, 76+logox%, 77+logoy%) call line( 77+logox%, 64+logoy%, 77+logox%, 67+logoy%) call line( 77+logox%, 70+logoy%, 77+logox%, 71+logoy%) call line( 78+logox%, 65+logoy%, 78+logox%, 67+logoy%) call line( 78+logox%, 70+logoy%, 78+logox%, 71+logoy%) call line( 78+logox%, 72+logoy%, 78+logox%, 73+logoy%) call line( 78+logox%, 74+logoy%, 78+logox%, 76+logoy%) call line( 79+logox%, 70+logoy%, 79+logox%, 71+logoy%) call line( 79+logox%, 72+logoy%, 79+logox%, 73+logoy%) call line( 79+logox%, 74+logoy%, 79+logox%, 76+logoy%) call line( 80+logox%, 70+logoy%, 80+logox%, 71+logoy%) call line( 80+logox%, 74+logoy%, 80+logox%, 75+logoy%) call line( 81+logox%, 70+logoy%, 81+logox%, 72+logoy%) call line( 81+logox%, 74+logoy%, 81+logox%, 75+logoy%) call line( 81+logox%, 76+logoy%, 81+logox%, 77+logoy%) call line( 82+logox%, 71+logoy%, 82+logox%, 77+logoy%) call line( 83+logox%, 72+logoy%, 83+logox%, 77+logoy%) call line( 84+logox%, 73+logoy%, 84+logox%, 77+logoy%) call line( 85+logox%, 75+logoy%, 85+logox%, 77+logoy%) call line( 86+logox%, 76+logoy%, 86+logox%, 77+logoy%) endproc !*************************!