TGC Codebase Backup



ASCII Frogger by Tinkergirl

2nd Dec 2005 14:45
Summary

As an entry to the DBPro Challenge thread, the following was made in a week. Everything on the screen is done using the TEXT command and various INK's. You might just be surprised



Description

Features examples of CASE/SELECT, user defined types, ascii animation, and the magic you can do with a little bit of ascii ingenuity.

Thanks to TDK for setting the challenge, and to everyone else who entered that challenge for the friendly competition.



Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    sync on
sync rate 60

#CONSTANT faceup 0
#CONSTANT facedown 1
#CONSTANT faceleft 2
#CONSTANT faceright 3
#CONSTANT jumpup 4
#CONSTANT jumpdown 5
#CONSTANT squished 6
#CONSTANT drowned 7

global debounce as integer

global RED as DWORD
global GREEN as DWORD
global BLUE as DWORD
global YELLOW as DWORD
global WHITE as DWORD
global PALEBLUE as DWORD
global PALEGREEN as DWORD
global DARKBLUE as DWORD
global DARKGREEN as DWORD
global MIDGREEN as DWORD
global BROWN as DWORD
global LIGHTBROWN as DWORD

RED = rgb(255,0,0)
GREEN = rgb(0,255,0)
BLUE = rgb(0,0,255)
YELLOW = rgb(255,255,0)
WHITE = rgb(255,255,255)
PALEBLUE = rgb(128,128,255)
PALEGREEN = rgb(128,255,128)
DARKBLUE = rgb(0,0,128)
DARKGREEN = rgb(0,80,0)
MIDGREEN = rgb(0,140,0)
BROWN = rgb(128,64,0)
LIGHTBROWN = rgb(255,128,64)


type coordXY

   X as float
   Y as float

endtype

type frog
   Pos as coordXY
   blinktime as Float
   state as Integer
   walktime as Float
   jumptime as Float
   target as coordXY
endtype

type vehicle
   Pos as coordXY
   Colour as Integer
endtype

global Froggie as frog
dim Car(5) as vehicle
dim Truck(5) as vehicle
dim LogSmall(27) as vehicle

Froggie.Pos.X = screen width()/2
Froggie.Pos.Y = 500
Froggie.blinktime = 0
Froggie.state = faceup
Froggie.walktime = 0
Froggie.jumptime = 0

for i = 0 to array count(Car())/2
   Car(i).Pos.X = rnd(screen width())
   Car(i).Pos.Y = 410
   Car(i).Colour = rnd(2)
next i
for i = array count(Car())/2 to array count(Car())
   Car(i).Pos.X = rnd(screen width())
   Car(i).Pos.Y = 374
   Car(i).Colour = rnd(2)
next 1

for i = 0 to array count(Truck())/2
   Truck(i).Pos.X = rnd(screen width())
   Truck(i).Pos.Y = 290
   Truck(i).Colour = rnd(2)
next i

for i = array count(Truck())/2 to array count(Truck())
   Truck(i).Pos.X = rnd(screen width())
   Truck(i).Pos.Y = 318
   Truck(i).Colour = rnd(2)
next i

for i = 0 to 3
   LogSmall(i).Pos.X = rnd(screen width())
   LogSmall(i).Pos.Y = 200
   LogSmall(i).Colour = 0
next i

for i = 4 to 7
   LogSmall(i).Pos.X = rnd(screen width())
   LogSmall(i).Pos.Y = 176
   LogSmall(i).Colour = 1
next i

for i = 8 to 11
   LogSmall(i).Pos.X = rnd(screen width())
   LogSmall(i).Pos.Y = 152
      LogSmall(i).Colour = 0
next i

for i = 12 to 15
   LogSmall(i).Pos.X = rnd(screen width())
   LogSmall(i).Pos.Y = 128
   LogSmall(i).Colour = 1
next i

for i = 16 to 19
   LogSmall(i).Pos.X = rnd(screen width())
   LogSmall(i).Pos.Y = 104
      LogSmall(i).Colour = 0
next i

for i = 20 to 23
   LogSmall(i).Pos.X = rnd(screen width())
   LogSmall(i).Pos.Y = 80
   LogSmall(i).Colour = 1
next i

for i = 24 to 27
   LogSmall(i).Pos.X = rnd(screen width())
   LogSmall(i).Pos.Y = 56
      LogSmall(i).Colour = 0
next i

ink GREEN,0

`****************** MAIN LOOP ******************

do
cls
draw_staticcomponents()
get_movement()
move_cars()
draw_cars()
move_trucks()
draw_trucks()
move_logs()
draw_logs()


select Froggie.state
   case faceup                `************* FROGGIE STATE = FACEUP *************
      draw_frog()
   endcase

   case facedown              `************* FROGGIE STATE = FACEDOWN ***********
      draw_upsidedownfrog()
   endcase

   case jumpup                `************* FROGGIE STATE = JUMPUP *************
      do_jumpup()
      draw_frog()
   endcase

   case jumpdown              `************* FROGGIE STATE = JUMPDOWN ***********
      draw_upsidedownfrog()
      do_jumpdown()
   endcase

   case squished
      draw_squishedfrog()
      death_squish()
   endcase

   case drowned
      draw_drownedfrog()
      death_drowned()
   endcase

   case default
      draw_frog()
   endcase
endselect

if Froggie.state <> squished AND Froggie.state <> drowned
   check_collision()
endif

`print_ascii()
sync
loop

`************************************************ END OF MAIN LOOP ***********
`*****************************************************************************

`Check the keys for WASD movement.
Function get_movement()

if keystate(17) = 1 AND Froggie.state = faceup AND debounce = 0    `If 'W' pressed and facing up - JUMP!
   Froggie.state = jumpup
   debounce = 1
endif

if keystate(31) = 1 AND Froggie.state = facedown AND debounce = 0   `If 'S' pressed and facing down - JUMP!
   Froggie.state = jumpdown
   debounce = 1
endif

if Froggie.state < jumpup
   if keystate(17) = 1                          `W for up
      Froggie.walktime = Froggie.walktime +1
      Froggie.state = faceup
   endif

   if keystate(31) = 1                          `S for down
      Froggie.walktime = Froggie.walktime +1
      Froggie.state = facedown
   endif

   if keystate(30) = 1                          `A for left
      Froggie.Pos.X = Froggie.Pos.X -2
      Froggie.walktime = Froggie.walktime +1
   endif

   if keystate(32) = 1                          `D for right
      Froggie.Pos.X = Froggie.Pos.X +2
      Froggie.walktime = Froggie.walktime +1
   endif
endif

if keystate(17) = 0 AND keystate(31) = 0
   debounce = 0
endif

collide_screen()        `Do not allow outside screen boundries.

endfunction

`Stop Froggie from moving outside the screen shape.
Function collide_screen()

if Froggie.Pos.X <0+5
   Froggie.Pos.X = 0+5
endif

if Froggie.Pos.X > screen width() -10
   Froggie.Pos.X = screen width() -10
endif

if Froggie.Pos.Y < 0+25
   Froggie.Pos.Y = 0+25
endif

if Froggie.Pos.Y > screen height() -15
   Froggie.Pos.Y = screen height() -15
endif

endfunction

`Draw our froggie the right way up.  There are two animated states - leap and rest.
Function draw_frog()

ink GREEN,0

if Froggie.state = faceup     `Animation for 'rest'
   text Froggie.Pos.X-2,Froggie.Pos.Y,CHR$(130)
   text Froggie.Pos.X+2,Froggie.Pos.Y,CHR$(130)
   text Froggie.Pos.X-6,Froggie.Pos.Y+4,"="
   text Froggie.Pos.X+6,Froggie.Pos.Y+4,"="
   text Froggie.Pos.X-6,Froggie.Pos.Y-1,"\"
   text Froggie.Pos.X+6,Froggie.Pos.Y-1,"/"
endif

if Froggie.state = jumpup     `Animation for 'leap'
   text Froggie.Pos.X-2,Froggie.Pos.Y,CHR$(130)
   text Froggie.Pos.X+2,Froggie.Pos.Y,CHR$(130)
   text Froggie.Pos.X-5,Froggie.Pos.Y+3,"/"
   text Froggie.Pos.X-2,Froggie.Pos.Y+3,"/"
   text Froggie.Pos.X+5,Froggie.Pos.Y+3,"\"
   text Froggie.Pos.X+2,Froggie.Pos.Y+3,"\"
   text Froggie.Pos.X-7,Froggie.Pos.Y-1,"-"
   text Froggie.Pos.X+7,Froggie.Pos.Y-1,"-"
endif

if Froggie.walktime > 30
   Froggie.walktime = 0
endif

draw_frogeyes()            `Draw the eyes!  (Froggie blinks, so a different function for this)

endfunction


`Draw Froggies eyes (right way up)  He blinks over time.
Function draw_frogeyes()

ink WHITE,0
Froggie.blinktime = Froggie.blinktime +1

if Froggie.blinktime<200
   text Froggie.Pos.X-3,Froggie.Pos.Y-1,CHR$(176)
   text Froggie.Pos.X+3,Froggie.Pos.Y-1,CHR$(176)
else
   if Froggie.blinktime>200
      text Froggie.Pos.X-3,Froggie.Pos.Y-4,CHR$(172)
      text Froggie.Pos.X+3,Froggie.Pos.Y-4,CHR$(172)
   endif
endif

if Froggie.blinktime>205+rnd(10)
   Froggie.blinktime = 0
endif

endfunction


`Draw Froggie upsidedown.  Again, two animated 'frames'.
Function draw_upsidedownfrog()

ink GREEN,0

if Froggie.state = FACEDOWN
   text Froggie.Pos.X-2,Froggie.Pos.Y,CHR$(130)
   text Froggie.Pos.X+2,Froggie.Pos.Y,CHR$(130)
   text Froggie.Pos.X-6,Froggie.Pos.Y-4,"="
   text Froggie.Pos.X+6,Froggie.Pos.Y-4,"="
   text Froggie.Pos.X-6,Froggie.Pos.Y+1,"/"
   text Froggie.Pos.X+6,Froggie.Pos.Y+1,"\"
endif

if Froggie.state = JUMPDOWN
   text Froggie.Pos.X-2,Froggie.Pos.Y,CHR$(130)
   text Froggie.Pos.X+2,Froggie.Pos.Y,CHR$(130)
   text Froggie.Pos.X-5,Froggie.Pos.Y-3,"\"
   text Froggie.Pos.X-2,Froggie.Pos.Y-3,"\"
   text Froggie.Pos.X+5,Froggie.Pos.Y-3,"/"
   text Froggie.Pos.X+2,Froggie.Pos.Y-3,"/"
   text Froggie.Pos.X-7,Froggie.Pos.Y+1,"-"
   text Froggie.Pos.X+7,Froggie.Pos.Y+1,"-"
endif


if Froggie.walktime > 30
   Froggie.walktime = 0
endif

draw_upsidedownfrogeyes()

endfunction


Function draw_upsidedownfrogeyes()

ink WHITE,0
Froggie.blinktime = Froggie.blinktime +1

if Froggie.blinktime<200
   text Froggie.Pos.X-3,Froggie.Pos.Y+8,CHR$(176)
   text Froggie.Pos.X+3,Froggie.Pos.Y+8,CHR$(176)
else
   if Froggie.blinktime>200
      text Froggie.Pos.X-3,Froggie.Pos.Y+4,CHR$(172)
      text Froggie.Pos.X+3,Froggie.Pos.Y+4,CHR$(172)
   endif
endif

if Froggie.blinktime>205+rnd(10)
   Froggie.blinktime = 0
endif

endfunction



Function do_jumpup()

if Froggie.jumptime = 0
   Froggie.target.Y = Froggie.Pos.Y - 30
   Froggie.target.X = Froggie.Pos.X
endif

Froggie.jumptime = Froggie.jumptime + 1

if Froggie.jumptime < 5
   Froggie.Pos.Y = Froggie.Pos.Y - 6
endif

if Froggie.jumptime = 5
   Froggie.jumptime = 0
   Froggie.state = faceup
endif

endfunction


Function do_jumpdown()

if Froggie.jumptime = 0
   Froggie.target.Y = Froggie.Pos.Y + 30
   Froggie.target.X = Froggie.Pos.X
endif

Froggie.jumptime = Froggie.jumptime + 1

if Froggie.jumptime < 5
   Froggie.Pos.Y = Froggie.Pos.Y + 6
endif

if Froggie.jumptime = 5
   Froggie.jumptime = 0
   Froggie.state = facedown
endif

endfunction


Function draw_staticcomponents()

halfsolidline$ = CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
solidline$ = halfsolidline$ + halfsolidline$ + halfsolidline$ + halfsolidline$
halfgrassverge$ = "\\/|\\/\|//|/\||/|/\/||\\\\/|/\\//||\\/|\\/\|//|/\||/|/\/||\\\\/|/\\\||/|/\/||\\\\/|/\\/\/||\\\\/|/\\\||/|/"
grassverge$ = halfgrassverge$ + halfgrassverge$ + halfgrassverge$
halfriverbank$ = "           ~            ~          ~           ~          ~            ~            ~"
riverbank$ = halfriverbank$ + halfriverbank$  + halfriverbank$

ink YELLOW,0
text 0,440,solidline$               `Draw the bottom road edge
text 5,440,solidline$

ink DARKGREEN,0                     `Draw the bottommost grass verge
text 0,444,grassverge$
ink MIDGREEN,0
text -20,448,grassverge$
ink WHITE,0

for i = 0 to (screen width()/80)    `Draw the dotted road lines.
   text i*80,340,"___"
   text i*80,341,"___"
next i

ink DARKGREEN,0                     `Draw the other verge to the road, the upper one.
text 0,250,grassverge$
ink MIDGREEN,0
text -20,247,grassverge$
ink YELLOW,0

text 0,260,solidline$               `Draw the top road edge
text 5,260,solidline$

ink DARKBLUE,0                      `Draw some randomish river blueness.
text 0,220,riverbank$
text -30,200,riverbank$
text 10,180,riverbank$
text -15,160,riverbank$
text -60,140,riverbank$
text 8,120,riverbank$
text -18,100,riverbank$
text -78,80,riverbank$
text 2,60,riverbank$
text -65,40,riverbank$
if rnd(10) = 1
   ink PALEBLUE,0
   text rnd(screen width()),rnd(100)+100,"^"
endif
ink DARKGREEN,0
text 0,217,grassverge$
ink MIDGREEN,0
text -20,220,grassverge$
ink WHITE,0


ink DARKGREEN,0

`********** FIRST LILLYPAD! ***********
text 50,20,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
text 53,20,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)

text 45,28,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
text 50,28,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)

text 45,36,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
text 50,36,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)

text 50,44,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
text 53,44,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)

text 54,47,CHR$(130)+"  "+CHR$(130)
text 57,47,CHR$(130)+"  "+CHR$(130)

`********** SECOND LILLYPAD!! ************
text 200,20,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
text 203,20,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)

text 195,28,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
text 200,28,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)

text 195,36,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
text 200,36,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)

text 200,44,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
text 203,44,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)

text 204,47,CHR$(130)+"  "+CHR$(130)
text 207,47,CHR$(130)+"  "+CHR$(130)


`********** THIRD LILLYPAD!! ************
text 350,20,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
text 353,20,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)

text 345,28,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
text 350,28,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)

text 345,36,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
text 350,36,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)

text 350,44,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
text 353,44,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)

text 354,47,CHR$(130)+"  "+CHR$(130)
text 357,47,CHR$(130)+"  "+CHR$(130)


`********** FOURTH LILLYPAD!! ************
text 500,20,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
text 503,20,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)

text 495,28,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
text 500,28,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)

text 495,36,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
text 500,36,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)

text 500,44,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
text 503,44,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)

text 504,47,CHR$(130)+"  "+CHR$(130)
text 507,47,CHR$(130)+"  "+CHR$(130)

endfunction


Function check_collision()

temp_check = 0

if Froggie.Pos.Y < 220
   temp_check = 1
endif

` CHECK FOR FIRST LILLYPAD
if Froggie.Pos.Y <48 AND Froggie.Pos.X > 43 AND Froggie.Pos.X < 93
   temp_check = 2
endif

` CHECK FOR SECOND LILLYPAD
if Froggie.Pos.Y <48 AND Froggie.Pos.X > 193 AND Froggie.Pos.X < 243
   temp_check = 2
endif

` CHECK FOR THIRD LILLYPAD
if Froggie.Pos.Y <48 AND Froggie.Pos.X > 343 AND Froggie.Pos.X < 393
   temp_check = 2
endif

` CHECK FOR FOURTH LILLYPAD
if Froggie.Pos.Y <48 AND Froggie.Pos.X > 493 AND Froggie.Pos.X < 543
   temp_check = 2
endif

`CHECK CAR COLLISION!!
for i = 0 to array count(Car())

if Froggie.Pos.Y > Car(i).Pos.Y-20 AND Froggie.Pos.Y < Car(i).Pos.Y+10 AND Froggie.Pos.X > Car(i).Pos.X - 18 AND Froggie.Pos.X < Car(i).Pos.X + 36
   temp_check = 3
endif
next i

`CHECK TRUCK COLLISION!!
for i = 0 to array count(Truck())

if Froggie.Pos.Y > Truck(i).Pos.Y-20 AND Froggie.Pos.Y < Truck(i).Pos.Y+10 AND Froggie.Pos.X > Truck(i).Pos.X - 18 AND Froggie.Pos.X < Truck(i).Pos.X + 63
   temp_check = 3
endif
next i

`CHECK LOG COLLISION!!
for i = 0 to array count(LogSmall())

if Froggie.Pos.Y > LogSmall(i).Pos.Y-20 AND Froggie.Pos.Y < LogSmall(i).Pos.Y+20 AND Froggie.Pos.X > LogSmall(i).Pos.X - 60 AND Froggie.Pos.X < LogSmall(i).Pos.X + 10
   temp_check = 0
   if LogSmall(i).Colour = 0
      froggie_momentum = -1
   else
      froggie_momentum = 1
   endif
endif
next i

if froggie_momentum = -1
   Froggie.Pos.X = Froggie.Pos.X - 1
endif

if froggie_momentum = 1
   Froggie.Pos.X = Froggie.Pos.X + 1
endif


if temp_check = 1
   ink BLUE,0
   Froggie.walktime = 0
   Froggie.state = drowned

endif

if temp_check = 2
   set cursor screen width()/2-(text width("WIN WIN WIN WIN WIN!")/2),screen height()/2
   Print "WIN WIN WIN WIN WIN!"

endif

if temp_check = 3
   Froggie.walktime = 0
   Froggie.state = squished
endif

endfunction


Function draw_cars()

for i = 0 to array count(Car())
   if Car(i).Colour = 0
      ink RED,0
   else
      if Car(i).Colour = 1
         ink YELLOW,0
      else
         if Car(i).Colour = 2
            ink PALEBLUE,0
         endif
      endif
   endif
   text Car(i).Pos.X,Car(i).Pos.Y,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
   text Car(i).Pos.X-3,Car(i).Pos.Y,"("+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
   text Car(i).Pos.X+6,Car(i).Pos.Y-9,"/"+CHR$(130)+CHR$(130)+"\"
   text Car(i).Pos.X+3,Car(i).Pos.Y-9," "+CHR$(130)+CHR$(130)+CHR$(130)
   ink DARKBLUE,0
   text Car(i).Pos.X+2,Car(i).Pos.Y+3,"o  o"

next i

ink WHITE,0

endfunction


Function move_cars()

for i = 0 to array count(Car())

if Car(i).Colour = 0
   speed = 3
else
   speed = 2
endif

Car(i).Pos.X = Car(i).Pos.X - speed

if Car(i).Pos.X < -30
   Car(i).Pos.X = screen width()+10+rnd(20)
   Car(i).Colour = rnd(2)
endif

next i

endfunction


Function draw_trucks()

for i = 0 to array count(Truck())
   if Truck(i).Colour = 0
      ink RED,0
   else
      if Truck(i).Colour = 1
         ink YELLOW,0
      else
         if Truck(i).Colour = 2
            ink PALEBLUE,0
         endif
      endif
   endif
   text Truck(i).Pos.X,Truck(i).Pos.Y-9,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+" "+CHR$(130)
   text Truck(i).Pos.X-3,Truck(i).Pos.Y-9,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+" "+CHR$(130)+"\"

   text Truck(i).Pos.X,Truck(i).Pos.Y,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+"="+CHR$(130)
   text Truck(i).Pos.X-3,Truck(i).Pos.Y,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+"="+CHR$(130)+CHR$(130)
   ink DARKBLUE,0
   text Truck(i).Pos.X-2,Truck(i).Pos.Y+4,"O   O O"

next i

ink WHITE,0

endfunction



Function move_trucks()

for i = 0 to array count(Truck())

if Truck(i).Colour = 0
   speed = 3
else
   speed = 2
endif


Truck(i).Pos.X = Truck(i).Pos.X + speed

if Truck(i).Pos.X > screen width()+30
   Truck(i).Pos.X = -30-(rnd(10))
   Truck(i).Colour = rnd(2)
endif

next i

endfunction


Function reset_player()
wait 100
Froggie.Pos.X = screen width()/2
Froggie.Pos.Y = 500
Froggie.State = FACEUP

endfunction




Function draw_logs()

for i = 0 to array count(LogSmall())
   ink BROWN,0
   text LogSmall(i).Pos.X-50,LogSmall(i).Pos.Y-4,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
   text LogSmall(i).Pos.X-47,LogSmall(i).Pos.Y-4,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)

   text LogSmall(i).Pos.X-50,LogSmall(i).Pos.Y,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
   text LogSmall(i).Pos.X-47,LogSmall(i).Pos.Y,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)

   text LogSmall(i).Pos.X-50,LogSmall(i).Pos.Y+4,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)
   text LogSmall(i).Pos.X-47,LogSmall(i).Pos.Y+4,CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)+CHR$(130)

   ink LIGHTBROWN,0
   text Logsmall(i).Pos.X-45,LogSmall(i).Pos.Y-4,"-__ --"
   text LogSmall(i).Pos.X-47,LogSmall(i).Pos.Y-1,"_-  _-"
next i

endfunction


Function move_logs()

for i = 0 to array count(LogSmall())

if LogSmall(i).Colour = 0
   speed = -1
else
   speed = 1
endif


LogSmall(i).Pos.X = LogSmall(i).Pos.X + speed


if LogSmall(i).Colour = 1
   if LogSmall(i).Pos.X > screen width()+30
      LogSmall(i).Pos.X = -30-(rnd(10))
   endif
endif

if LogSmall(i).Colour = 0
   if LogSmall(i).Pos.X < -30
      LogSmall(i).Pos.X = screen width()+10+rnd(20)
   endif
endif

next i


endfunction


Function death_squish()

Froggie.walktime = Froggie.walktime + 1

if Froggie.walktime > 80
   reset_player()
endif

endfunction


Function draw_squishedfrog()

ink RED,0

text Froggie.Pos.X,Froggie.Pos.Y,"#"
text Froggie.Pos.X+3,Froggie.Pos.Y-2,"#"
text Froggie.Pos.X-4,Froggie.Pos.Y-1,"#"
text Froggie.Pos.X+1,Froggie.Pos.Y+3,"#"

text Froggie.Pos.X-(text width("SQUISH!")/2)+5,Froggie.Pos.Y-20,"SQUISH!"

endfunction


Function draw_drownedfrog()

if Froggie.walktime<5
   ink PALEBLUE,0
endif

if Froggie.walktime>5
   ink BLUE,0
endif

if Froggie.walktime>10
   ink DARKBLUE,0
endif

text Froggie.Pos.X-2,Froggie.Pos.Y,CHR$(130)
text Froggie.Pos.X+2,Froggie.Pos.Y,CHR$(130)
text Froggie.Pos.X-5,Froggie.Pos.Y+3,"/"
text Froggie.Pos.X-2,Froggie.Pos.Y+3,"/"
text Froggie.Pos.X+5,Froggie.Pos.Y+3,"\"
text Froggie.Pos.X+2,Froggie.Pos.Y+3,"\"
text Froggie.Pos.X-7,Froggie.Pos.Y-1,"-"
text Froggie.Pos.X+7,Froggie.Pos.Y-1,"-"

   text Froggie.Pos.X-(text width("SPLOOSH!")/2)+5,Froggie.Pos.Y-20,"SPLOOSH!"

endfunction


Function death_drowned()

Froggie.walktime = Froggie.walktime + 1

if Froggie.walktime > 100
   reset_player()
endif

endfunction








Function print_ascii()

for i = 130 to 160
print "Ascii:",i," = ",chr$(i)
next i

endfunction