
-----------------------------------
Holec
Wed Jan 17, 2007 4:51 pm

My 2ed Program ---PinBall---
-----------------------------------
This is my first pinball game ,  ( i know some of my collisions are messed up) but just wondering if there are any improvments that i could make (other then a starting screen, i have it on but i cleared it up so it dosent get in the way) , so suggestions would be help-full. And if possable i would like to get help on my collisions there a "little" bugged {PS: please dont be so critical only my first year of programming, and im trying to enjoy it  :o , learning most of it on my own but it would help to get some good advice. }

 --enjoy-- 




const TOP := maxy + 300

var hitBottom, hitLeft, hitRight, hitTop, hitPaddle, hitPaddleL, hitPaddleR : boolean
var DT : int

var xdir : int
var ydir : int

var kolor : int

var x : int
var y : int
var r : int

var score:int

var WinID : int

var paddleX, paddleY, paddleSize, paddleSpeed : int
var font1, font2 : int

var iWindow : int := Window.Open ("graphics: max; max, nocursor, nobuttonbar")
colourback (black)
cls
drawfilloval (540, 620, 60, 60, red)

drawfilloval (300, 280, 60, 60, 24)
drawfilloval (230, 280, 50, 50, black)
drawfilloval (370, 280, 50, 50, black)
drawfilloval (300, 210, 50, 50, black)
drawfilloval (300, 350, 50, 50, black)    
    
Draw.FillArc (310, 620, 155, 100, 25, 150, brightred)

Draw.FillBox (0, 0, 40, maxy, 46)
Draw.FillBox (0, maxy, maxx - 400, maxy - 40, 46)
Draw.FillBox (maxx - 400, maxy, maxx - 440, 0, 46)
drawfillbox (0, maxy, 100, maxy - 100, 46)
drawfilloval (60, maxy - 70, 50, 50, black)
drawfilloval (501, 583, 70, 70, black)


var x9 : array 1 .. 3 of int := init (410, 330, 340)
var y9 : array 1 .. 3 of int := init (480, 500, 450)
Draw.FillPolygon (x9, y9, 3, red)


drawfillbox (40, 400, 135, 500, 53)
drawfillbox (60, 430, 135, 475, black)
drawfillbox (60, 400, 110, 475, black)
drawfillbox (111, 375, 150, 400, 53)
drawfillbox (135, 250, 150, 375, 53)
drawfilloval (55, 345, 10, 10, blue)
drawfilloval (105, 330, 10, 10, blue)
drawfilloval (65, 280, 10, 10, blue)

drawfilloval (350, 570, 10, 10, blue)
drawfilloval (430, 575, 10, 10, blue)
drawfilloval (385, 530, 10, 10, blue)


Draw.ThickLine (500,440,570,500,2,red)
Draw.ThickLine (500,380,570,440,2,red)
drawfilloval (550,450,10,10,brightblue)


procedure makePaddle (var paddlePicID, NoPaddlePicID : int)
    Draw.FillBox (paddleX, paddleY, paddleX + paddleSize, paddleY + 5, black)
    NoPaddlePicID := Pic.New (paddleX, paddleY, paddleX + paddleSize, paddleY + 5)
    Draw.FillBox (paddleX, paddleY, paddleX + paddleSize, paddleY + 5, yellow)
    paddlePicID := Pic.New (paddleX, paddleY, paddleX + paddleSize, paddleY + 5)
end makePaddle

procedure movePaddle (paddlePicID, NoPaddlePicID, x1, x2 : int)
    Pic.Draw (NoPaddlePicID, x1, paddleY, picCopy)
    Pic.Draw (paddlePicID, x2, paddleY, picCopy)
end movePaddle

process paddle
    var paddlePicID, NoPaddlePicID : int
    var mouseX, mouseY, button, newX : int
    makePaddle (paddlePicID, NoPaddlePicID)
    Pic.Draw (paddlePicID, paddleX, paddleY, picCopy)

    loop
        Mouse.Where (mouseX, mouseY, button)
        if (mouseX < maxx - 5 - paddleSize div 2) then
            newX := max (mouseX - paddleSize div 2, 5)
        else
            newX := maxx - 5 - paddleSize
        end if
        if abs (newX - paddleX) > 2 then
            movePaddle (paddlePicID, NoPaddlePicID, paddleX, newX)
            paddleX := newX
        end if
    end loop
end paddle


DT := 5

paddleX := 5
paddleY := 7
paddleSize := 50
paddleSpeed := 20

xdir := 1
ydir := Rand.Int (1, 100)
kolor := brightred    %colourset (rnd)
r := 5
score:=0

x := maxx div 2 - 200
const a := -0.006
var yAxis := maxx div 2
var bump := Rand.Int (70, 900)
y := round (a * (yAxis - x) ** 2 + bump)

fork paddle


% MAIN PROGRAM

loop
color (white)
     locate (3,80)
 put "Score: ", score
    delay (DT)
    ydir := -round (a * (yAxis - x) ** 2 + bump) + round (a * (yAxis - x - xdir) ** 2 + bump)

    hitPaddle := false
    for j : x - r + xdir .. x + r + xdir
        if whatdotcolour (j, 12) = yellow and y - r + ydir  0 then
            yAxis := round (-sqrt (abs ((y - bump) / a)) + x)
        else
            yAxis := round (sqrt (abs ((y - bump) / a)) + x)
        end if

        xdir := xdir * -1

    else
        % check for boundaries
        hitBottom := (y = TOP - r - ydir - 5)
        hitLeft := (x = maxx - 5 - r - xdir)
        if (hitBottom = true) then
            exit
        elsif (hitTop = true) then
            yAxis := 2 * x - yAxis
        elsif hitLeft = true then
            yAxis := -yAxis
            xdir := -xdir
        elsif hitRight = true then
            yAxis := maxx + (maxx - yAxis)
            xdir := -xdir
        end if
        Draw.FillOval (x, y, r, r, black)
    end if
    x := x + xdir
    y := round (a * (yAxis - x) ** 2 + bump)
    Draw.FillOval (x, y, r, r, kolor)

    if whatdotcolour (x - 11, y) not= 7 then
        xdir *= -1
        score:=score+10
    end if
    if whatdotcolour (x + 11, y) not= 7 then
        xdir *= -1
        score:=score+10
    end if
    if whatdotcolour (x, y - 11) not= 7 and y - 11 > 0 then
        ydir *= -1
        score:=score+10
    end if
    if whatdotcolour (x, y + 11) not= 7 then
        ydir *= -1
        score:=score+10
    end if
   

end loop

if score>=100 then
cls 
    locate (20,20)
    put "Level 2"
    delay (2000) 
    cls
DT:=4
end if

if score>=200 then
cls 
    locate (20,20)
    put "Level 3"
    delay (2000) 
    cls
DT:=3
end if

%end

========================================
Also i know my lvls are screwed, also if your ball does not appear or the ball is stuck into two objects; reset the game (another bug)

-----------------------------------
CodeMonkey2000
Wed Jan 17, 2007 5:43 pm

RE:My 2ed Program ---PinBall---
-----------------------------------
please use code tags, and the game is flickery. try useing View.Update and setscreen offscreenonly

-----------------------------------
Holec
Wed Jan 17, 2007 5:52 pm

RE:My 2ed Program ---PinBall---
-----------------------------------
kk, i will keep the tags in mind, but i thought i made my varables pretty clear but might just might be in my opinion. And i dont know too much about flickering, only problem im having so far is the ball ocasionally flickers but again, just might be my computer.

-----------------------------------
CodeMonkey2000
Wed Jan 17, 2007 6:02 pm

Re: My 2ed Program ---PinBall---
-----------------------------------
const TOP := maxy + 300

var hitBottom, hitLeft, hitRight, hitTop, hitPaddle, hitPaddleL, hitPaddleR : boolean
var DT : int

var xdir : int
var ydir : int

var kolor : int

var x : int
var y : int
var r : int

var score:int

var WinID : int

var paddleX, paddleY, paddleSize, paddleSpeed : int
var font1, font2 : int

var iWindow : int := Window.Open ("graphics: max; max, nocursor, nobuttonbar")
colourback (black)
cls
drawfilloval (540, 620, 60, 60, red)

drawfilloval (300, 280, 60, 60, 24)
drawfilloval (230, 280, 50, 50, black)
drawfilloval (370, 280, 50, 50, black)
drawfilloval (300, 210, 50, 50, black)
drawfilloval (300, 350, 50, 50, black)

Draw.FillArc (310, 620, 155, 100, 25, 150, brightred)

Draw.FillBox (0, 0, 40, maxy, 46)
Draw.FillBox (0, maxy, maxx - 400, maxy - 40, 46)
Draw.FillBox (maxx - 400, maxy, maxx - 440, 0, 46)
drawfillbox (0, maxy, 100, maxy - 100, 46)
drawfilloval (60, maxy - 70, 50, 50, black)
drawfilloval (501, 583, 70, 70, black)


var x9 : array 1 .. 3 of int := init (410, 330, 340)
var y9 : array 1 .. 3 of int := init (480, 500, 450)
Draw.FillPolygon (x9, y9, 3, red)


drawfillbox (40, 400, 135, 500, 53)
drawfillbox (60, 430, 135, 475, black)
drawfillbox (60, 400, 110, 475, black)
drawfillbox (111, 375, 150, 400, 53)
drawfillbox (135, 250, 150, 375, 53)
drawfilloval (55, 345, 10, 10, blue)
drawfilloval (105, 330, 10, 10, blue)
drawfilloval (65, 280, 10, 10, blue)

drawfilloval (350, 570, 10, 10, blue)
drawfilloval (430, 575, 10, 10, blue)
drawfilloval (385, 530, 10, 10, blue)


Draw.ThickLine (500,440,570,500,2,red)
Draw.ThickLine (500,380,570,440,2,red)
drawfilloval (550,450,10,10,brightblue)


procedure makePaddle (var paddlePicID, NoPaddlePicID : int)
Draw.FillBox (paddleX, paddleY, paddleX + paddleSize, paddleY + 5, black)
NoPaddlePicID := Pic.New (paddleX, paddleY, paddleX + paddleSize, paddleY + 5)
Draw.FillBox (paddleX, paddleY, paddleX + paddleSize, paddleY + 5, yellow)
paddlePicID := Pic.New (paddleX, paddleY, paddleX + paddleSize, paddleY + 5)
end makePaddle

procedure movePaddle (paddlePicID, NoPaddlePicID, x1, x2 : int)
Pic.Draw (NoPaddlePicID, x1, paddleY, picCopy)
Pic.Draw (paddlePicID, x2, paddleY, picCopy)
end movePaddle

process paddle
var paddlePicID, NoPaddlePicID : int
var mouseX, mouseY, button, newX : int
makePaddle (paddlePicID, NoPaddlePicID)
Pic.Draw (paddlePicID, paddleX, paddleY, picCopy)

loop
Mouse.Where (mouseX, mouseY, button)
if (mouseX < maxx - 5 - paddleSize div 2) then
newX := max (mouseX - paddleSize div 2, 5)
else
newX := maxx - 5 - paddleSize
end if
if abs (newX - paddleX) > 2 then
movePaddle (paddlePicID, NoPaddlePicID, paddleX, newX)
paddleX := newX
end if
end loop
end paddle


DT := 5

paddleX := 5
paddleY := 7
paddleSize := 50
paddleSpeed := 20

xdir := 1
ydir := Rand.Int (1, 100)
kolor := brightred %colourset (rnd)
r := 5
score:=0

x := maxx div 2 - 200
const a := -0.006
var yAxis := maxx div 2
var bump := Rand.Int (70, 900)
y := round (a * (yAxis - x) ** 2 + bump)

fork paddle


% MAIN PROGRAM

loop
color (white)
locate (3,80)
put "Score: ", score
delay (DT)
ydir := -round (a * (yAxis - x) ** 2 + bump) + round (a * (yAxis - x - xdir) ** 2 + bump)

hitPaddle := false
for j : x - r + xdir .. x + r + xdir
if whatdotcolour (j, 12) = yellow and y - r + ydir  0 then
yAxis := round (-sqrt (abs ((y - bump) / a)) + x)
else
yAxis := round (sqrt (abs ((y - bump) / a)) + x)
end if

xdir := xdir * -1

else
% check for boundaries
hitBottom := (y = TOP - r - ydir - 5)
hitLeft := (x = maxx - 5 - r - xdir)
if (hitBottom = true) then
exit
elsif (hitTop = true) then
yAxis := 2 * x - yAxis
elsif hitLeft = true then
yAxis := -yAxis
xdir := -xdir
elsif hitRight = true then
yAxis := maxx + (maxx - yAxis)
xdir := -xdir
end if
Draw.FillOval (x, y, r, r, black)
end if
x := x + xdir
y := round (a * (yAxis - x) ** 2 + bump)
Draw.FillOval (x, y, r, r, kolor)

if whatdotcolour (x - 11, y) not= 7 then
xdir *= -1
score:=score+10
end if
if whatdotcolour (x + 11, y) not= 7 then
xdir *= -1
score:=score+10
end if
if whatdotcolour (x, y - 11) not= 7 and y - 11 > 0 then
ydir *= -1
score:=score+10
end if
if whatdotcolour (x, y + 11) not= 7 then
ydir *= -1
score:=score+10
end if


end loop

if score>=100 then
cls
locate (20,20)
put "Level 2"
delay (2000)
cls
DT:=4
end if

if score>=200 then
cls
locate (20,20)
put "Level 3"
delay (2000)
cls
DT:=3
end if

%end 
here your code with offscreenonly and View.Update  :D

-----------------------------------
Holec
Wed Jan 17, 2007 6:06 pm

RE:My 2ed Program ---PinBall---
-----------------------------------
Thx ,lol i was wrong using offscreenonly and View.Update you can see the diffrence, thx
