UnderwareDESIGN

PlayBASIC => Show Case => Topic started by: ATLUS on October 31, 2008, 03:22:53 PM

Title: BallDown=)
Post by: ATLUS on October 31, 2008, 03:22:53 PM
when that beside saw such play on telephones. Has Thought to do her(it) on PlayBasic. ;D And here is that was got for 2 work hourses.
Can be Kevin will add her(its) afterwards in list example :)
Manual:
Sense:
it is necessary using platforms to hold ball on medium of the screen that he not go upwards or bottom of the screen
control:
left arrow left turn
right arrow right turn
down turn jump down
secrets=):
If you score > 1000 and < 1200 prize time and on screen to appear piece of the ball which add 2 lifes

[pbcode]
; PROJECT : DBS
; AUTHOR  : ATLUS
; CREATED : 31.10.2008


; EDITED  : 31.10.2008
; ---------------------------------------------------------------------

setfps 60
//////backdrop screen
Steps=36
   Dim Palette(Steps)
   Dim Palette2(Steps)

   For lp=0 to steps
      Palette(lp)=rndrgb()   
next
//*************************************   
;//////render to images///////////////////////////////
createimage 1,220,5
rendertoimage 1
ShadeBox 0,0,220,5,RndRGB(),RndRGB(),RndRGB(),RndRGB()
rendertoscreen

createimage 2,30,30
rendertoimage 2
circleC 15,15,15,1,rndRGB()
rendertoscreen
///*******************////////////////////////////////
//////////////////////////////////////creating sprites
;player
createsprite 14
spriteimage 14,2
centerspritehandle 14
//prize
CreateImage 3,45,45
RenderPhongImage 3,xl,yl,RGB(250, 5, 67),200,7.0
createsprite 45
spriteimage 45,3
SpriteCollision 45,On
spriteCollisionClass 45,%0010
SpriteCollisionMode 45,1
//platforms
for Sprites=1 to 5
CreateSprite Sprites
    SpriteImage Sprites,1
    CenterSpriteHandle Sprites
    x=Rnd(GetScreenWidth()-32)
    y=Rnd(GetScreenHeight()-32)
    PositionSprite sprites,x,y
    SpriteCollision Sprites,On
    SpriteCollisionClass Sprites,%0010
    SpriteCollisionMode Sprites,1
next
/////////////////////////////////


/////////////////////////////////exist dynamic
x1=rndrange(20,780)
x2=rndrange(20,780)
x3=rndrange(20,780)
x4=rndrange(20,780)
x5=rndrange(20,780)
y1=rndrange(10,590)
y2=rndrange(10,590)
y3=rndrange(10,590)
y4=rndrange(10,590)
y5=rndrange(10,590)

xp=400
yp=15
//////////////////////////life parametres and score
lv=3
score=0
speed#=2
xprize=rndrange(20,780)
yprize=700


do
cls rgb(0,0,0)

PositionSprite 14,xp#,yp;position player
////////////control NPC
if leftkey()=true then xp#=xp#-(6+speed#)
if xp#<0 then xp#=0
if rightkey()=true then xp#=xp#+(6+speed#)
if xp#>800 then xp#=800
if downkey()=true
   yp=yp+33
   flushkeys
   endif
/////////////////////////////////
//*****creating platforms
positionsprite 1,x1,y1
positionsprite 2,x2,y2
positionsprite 3,x3,y3
positionsprite 4,x4,y4
positionsprite 5,x5,y5
//////move platforms
y1=y1-speed#
y2=y2-speed#
y3=y3-speed#
y4=y4-speed#
y5=y5-speed#
//////
if y1<0 then y1=600:x1=rndrange(20,780)
if y2<0 then y2=600:x2=rndrange(20,780)
if y3<0 then y3=600:x3=rndrange(280,520)
if y4<0 then y4=600:x4=rndrange(20,280)
if y5<0 then y5=600:x5=rndrange(520,780)

yp=yp+5;gravitation player
/////colision contact
ThisSprite=SpriteHit(14,GetFirstSprite(),%0010)
if ThisSprite>0 then yp=yp-10:score=score+1:speed#=speed#+0.0001
///pizeup
prizeup=SpriteHit(14,45,%0010)
if prizeup>0 then lv=lv+2:yprize=700

////minus lifes
if yp>610 then lv=lv-1:yp=10:xp#=rndrange(20,780)
if yp<-5 then lv=lv-1:xp#=rndrange(20,780):yp=10



DrawBackDrop(780,40,600,Steps,Palette())

/////display play statistick
print "Life:"+Str$(lv)
print "score:"+str$(score)
//position prize
///prize time up
if score>1000 and score<1200 then yprize=yprize-3
if yprize<-5 then yprize=600:xprize=rndrange(20,780)

positionsprite 45,xprize,yprize

drawallsprites
sync
loop
////backdrop function Thanks Kevin!!!
Function DrawBackDrop(Xpos#,Ypos#,Radius#,Steps,Colours())
   Static BaseAngle#=Wrapangle(Baseangle#,1.0)

   segmentsize#=360.0/Steps
   c1=Colours(0)
   c2=Colours(1)

   firstc2=c2

   #if PBVersion<=170
      lockbuffer
   #endif
   
   for vert=0 to steps-1
      c3=Colours(Vert+1)

      angle#=BaseAngle#+(vert*segmentsize#)
      x2#=xpos#+cosRadius(angle#,Radius#)
      y2#=ypos#+sinRadius(angle#,Radius#)

      if Vert+1<Steps
         angle#=BaseAngle#+(vert+1)*segmentsize#
      else
         angle#=BaseAngle#+0*segmentsize#
         c3=FirstC2
      endif

      x3#=xpos#+cosRadius(angle#,Radius#)
      y3#=ypos#+sinRadius(angle#,Radius#)

      GouraudTri xpos#,ypos#,c1,x2#,y2#,c2,x3#,y3#,c3
      c2=c3
   next


   #if PBVersion<=170
      unlockbuffer
   #endif

EndFunction

[/pbcode]
Title: Re: BallDown=)
Post by: kevin on November 02, 2008, 01:50:37 AM
  Neat little game,  Here's a slightly cleaned up version.  This version uses an array to store the walls in, so it can easily expanded to use more or less walls.


[pbcode]
   setfps 60
//////backdrop screen
   Steps=36
   Dim Palette(Steps)
   For lp=0 to steps
      Palette(lp)=rndrgb()   
   next

//*************************************   
;//////render to images///////////////////////////////
createimage 1,220,5
rendertoimage 1
ShadeBox 0,0,220,5,RndRGB(),RndRGB(),RndRGB(),RndRGB()
rendertoscreen

createimage 2,30,30
rendertoimage 2
circleC 15,15,15,1,rndRGB()
rendertoscreen
///*******************////////////////////////////////
//////////////////////////////////////creating sprites
;player
createsprite 14
spriteimage 14,2
centerspritehandle 14
//prize
CreateImage 3,45,45
RenderPhongImage 3,xl,yl,RGB(250, 5, 67),200,7.0
createsprite 45
spriteimage 45,3
SpriteCollision 45,On
spriteCollisionClass 45,%0010
SpriteCollisionMode 45,1




Type TWalls
      Spr
Endtype

Dim wall(5) as twalls


//create platforms
for Wall=1 to 5
      Xpos=rndrange(20,780)
      ypos=rndrange(10,590)
     Spr=newSprite(xpos,ypos,1)
     Wall(wall).Spr=spr
    CenterSpriteHandle Spr
    SpriteCollision Spr,On
    SpriteCollisionClass Spr,%0010
    SpriteCollisionMode Spr,1
next
/////////////////////////////////



// Playerss Stuff
xp=400
yp=15
//////////////////////////life parametres and score
lv=3
score=0
speed#=2
xprize=rndrange(20,780)
yprize=700


do
   cls rgb(0,0,0)

   ////////////control NPC
   PositionSprite 14,xp#,yp;position player
   if leftkey()=true then xp#=xp#-(6+speed#)
   if rightkey()=true then xp#=xp#+(6+speed#)
   Xp#=ClipRange(xp#,0,800)

   if downkey()=true   
         yp=yp+33
         flushkeys
   endif


/////////////////////////////////
//////move platforms
      For lp=1 to 5
         if Wall(lp)
            Spr=Wall(lp).Spr      
            MoveSprite Spr,0,-Speed#
            if GetSpriteY(Spr)<0
               PositionSprite Spr,rndrange(20,780),600
            endif
         endif
      next


   /////colision contact
      ThisSprite=SpriteHit(14,GetFirstSprite(),%0010)
      if ThisSprite>0
            Ypos=GetSpriteY(ThisSprite)
            Yp=Ypos-15
            score=score+1
            // Bump Speed
            speed#=speed#+0.0001
      else
         yp=yp+5;gravitation player
      endif



      prizeup=SpritesOverlap(14,45)
      if prizeup>0 then lv=lv+2:yprize=700

      ////minus lifes
      if yp>610 then lv=lv-1:yp=10:xp#=rndrange(20,780)
      if yp<-5 then lv=lv-1:xp#=rndrange(20,780):yp=10

      DrawBackDrop(780,40,600,Steps,Palette())

      /////display play statistick
      print "Life:"+Str$(lv)
      print "score:"+str$(score)
      //position prize   
      ///prize time up

      if score>1000 and score<1200 then yprize=yprize-3
      if yprize<-5 then yprize=600:xprize=rndrange(20,780)

      positionsprite 45,xprize,yprize

      drawallsprites
   sync
loop




////backdrop function Thanks Kevin!!!
Function DrawBackDrop(Xpos#,Ypos#,Radius#,Steps,Colours())
   Static BaseAngle#=Wrapangle(Baseangle#,1.0)

   segmentsize#=360.0/Steps
   c1=Colours(0)
   c2=Colours(1)

   firstc2=c2

   #if PBVersion<=170
      lockbuffer
   #endif
   
   for vert=0 to steps-1
      c3=Colours(Vert+1)

      angle#=BaseAngle#+(vert*segmentsize#)
      x2#=xpos#+cosRadius(angle#,Radius#)
      y2#=ypos#+sinRadius(angle#,Radius#)

      if Vert+1<Steps
         angle#=BaseAngle#+(vert+1)*segmentsize#
      else
         angle#=BaseAngle#+0*segmentsize#
         c3=FirstC2
      endif

      x3#=xpos#+cosRadius(angle#,Radius#)
      y3#=ypos#+sinRadius(angle#,Radius#)

      GouraudTri xpos#,ypos#,c1,x2#,y2#,c2,x3#,y3#,c3
      c2=c3
   next

   #if PBVersion<=170
      unlockbuffer
   #endif

EndFunction

[/pbcode]

Title: Re: BallDown=)
Post by: ATLUS on November 02, 2008, 05:17:50 AM
 :o Thanks for arrays idea!! I much thought as easier do move walls now has seen
Title: Re: BallDown=)
Post by: kevin on November 03, 2008, 05:24:03 AM
    Learning to use arrays is an important step towards making better and easier to maintain programs.   While confusing at first,  mastering them will open up a world of possibilities.   My advice, hit the help files and tutorials board (http://www.underwaredesign.com/forums/index.php?board=24.0).  
Title: Re: BallDown=)
Post by: ATLUS on November 03, 2008, 09:28:15 AM
Thanks!!! I lear this!!!