Posted: Mon May 24, 2004 12:52 pm Post subject: help wit random placement of astroids
here is my code and when i try to put the x and y values of the astroids to random they get messed up and keep repeating in same place, could someone take a look at my code and tell me how i can put the astroids in a different location every time they come?
Sponsor Sponsor
SuperGenius
Posted: Mon May 24, 2004 1:14 pm Post subject: (No subject)
your problem is that you have defined your variables as random numbers and the start of your program, and then not called randint again to change them. To fix this you need to call randint for your variables inside your main loop so they will have different values each time the loop executes
vagyb
Posted: Mon May 24, 2004 1:20 pm Post subject: (No subject)
i think i understand wat u mean but once i do that the rocks start flashing on the screen :S, if any1 is kind enough could u try to fix it or do w/e SuperGenius is tryin to say and post the code here again? or explain to me in other simplier way?
guruguru
Posted: Mon May 24, 2004 1:39 pm Post subject: (No subject)
Ok. You have variable boulder1Y. Then you make a random number and assign it to variable number4. Lets say that the random number outputed 150. number4 is equal to 150. Then you makeboulder1Y equal to number4- so now boudler1Y is equal to 150.
Then you begin your loop. The first time through the loop, the boulder is drawn at boulder1Y- which is 150. The second time it is draw and boulder1Y, which again is 150 because you have never changed the value of it.
To solve your problem, you have assign a random number to boulder1Yevery time it reaches the end of the screen. What you could do is change this code:
code:
if boulder1X + boulderWidth <= 0 then
boulder1X := maxx
else
boulder1X -= 1
end if
to...
code:
if boulder1X + boulderWidth <= 0 then
boulder1X := maxx
randint (boulder1Y, 120, 170)
else
boulder1X -= 1
end if
The same principle applies to all the other Y values. For the x values, instead of resetting the X value to maxx when it reaches the end of the screen, make it equal to a random number. (e.g. randint (boulder1X, 0, maxx).
SuperGenius
Posted: Mon May 24, 2004 1:41 pm Post subject: (No subject)
try to run this example, and press both option. Now look at the code. You will see that each of the two options is the same 5 lines of code, but in a different order. What it means is whenever the line
code:
randint (num, 0, 10)
is called the var 'num' is assigned a new value within the specified range.
vagyb
Posted: Mon May 24, 2004 1:45 pm Post subject: (No subject)
i think i kinda understood wat u mean, but what about this code? where do i put it? if you are nice enough could u plz put the stuff u said in the code and post it here, i will be VERY VERY grateful
code:
randint (number1, 10, 40)
randint (number2, 250, 350)
randint (number3, 300, maxx)
randint (number4, 120, 170)
randint (number5, 450, 550)
randint (number6, 240, 300)
var boulder1X := number3
var boulder1Y := number4
var boulder2X := number1
var boulder2Y := number2
var boulder3X := number5
var boulder3Y := number6
guruguru
Posted: Mon May 24, 2004 1:51 pm Post subject: (No subject)
That code is fine. However you can make it more efficient. Simply plug in boulder1X and the rest into the randint function instead of number1 etc...
Change:
var boulder1X := number3
to
var boulder1X
randint(boulder1X, 300, maxx)
And do that for the rest of the boulder variables, then you can get rid of the number1's.
And no I will not post the code... the exact code to replace is right there ! And I'm not going to do the rest of the variables for you because I don't have that much spare time .
vagyb
Posted: Mon May 24, 2004 1:54 pm Post subject: (No subject)
lol alrite i think i got it now, thx alot
Sponsor Sponsor
vagyb
Posted: Mon May 24, 2004 2:00 pm Post subject: (No subject)
k i thnk i did wat u said, but problem is the rocks r still flashing, here is the code
code:
setscreen ("graphics:400;400,position:middle;centre,nobuttonbar,title:Space")
const margin : int := 10
var number1 : int
var number2 : int
var number3 : int
var number4 : int
var number5 : int
var number6 : int
var spacePic : int
var shipPic : int
var boulderPic : int
var boulder2Pic : int
var boulder3Pic : int
var spaceWidth, spaceHeight, boulderWidth, boulder2Width, boulder3Width : int
var spaceX, spaceY : int
var shipX, shipY : int
var shipWidth, shipHeight : int
var chars : array char of boolean
shipPic := Pic.FileNew ("ship.jpg")
spacePic := Pic.FileNew ("spacepic.bmp")
boulderPic := Pic.FileNew ("boulder.bmp")
boulder2Pic := Pic.FileNew ("boulder2.bmp")
boulder3Pic := Pic.FileNew ("boulder3.bmp") setscreen ("graphics:400;400,position:middle;centre,nobuttonbar,title:Space")
shipWidth := Pic.Width (shipPic)
shipHeight := Pic.Width (shipPic)
spaceWidth := Pic.Width (spacePic)
spaceHeight := Pic.Height (spacePic)
boulderWidth := Pic.Width (boulderPic)
boulder2Width := Pic.Width (boulder2Pic)
boulder3Width := Pic.Width (boulder2Pic)
spaceX := (spaceWidth - maxx) div 2
spaceY := (spaceHeight - maxy) div 2
shipX := (spaceWidth - shipWidth) div 2
shipY := (spaceHeight - shipHeight) div 2
setscreen ("graphics:450;350,offscreenonly")
loop
var boulder1X : int
var boulder1Y : int
var boulder2X : int
var boulder2Y : int
var boulder3X : int
var boulder3Y : int
randint (boulder2X, 10, 40)
randint (boulder2Y, 250, 350)
randint (boulder1X, 300, maxx)
randint (boulder1Y, 120, 170)
randint (boulder3X, 450, 550)
randint (boulder3Y, 240, 300)
Input.KeyDown (chars)
if chars (KEY_UP_ARROW) then
shipY += 2
elsif chars (KEY_DOWN_ARROW) then
shipY -= 2
end if
if boulder1X + boulderWidth <= 0 then
boulder1X := maxx
randint (boulder1X, 300, maxx)
else
boulder1X -= 1
end if
if boulder2X + boulder2Width <= 0 then
boulder2X := maxx
randint (boulder2X, 250, 350)
else
boulder2X -= 1
end if
if boulder3X + boulder2Width <= 0 then
boulder3X := maxx
randint (boulder3X, 450, 500)
else
boulder3X -= 1
end if
if shipX - margin < 0 then
shipX := margin
elsif shipX + shipWidth > spaceWidth - margin then
shipX := spaceWidth - margin - shipWidth
end if
if shipY - margin < 0 then
shipY := margin
elsif shipY + shipWidth > spaceWidth - margin then
shipY := spaceWidth - margin - shipWidth
end if
if shipY - margin < margin then
shipY := margin
elsif shipY + shipWidth > spaceWidth - margin then
shipY := spaceWidth - margin - shipWidth
end if
if shipX - shipX < margin then
spaceX := shipX - margin
elsif (shipX + shipWidth) - spaceX > maxx - margin then
spaceX := shipX + shipWidth - maxx + margin
end if
if shipY - spaceY < margin then
spaceY := shipY - margin
elsif (shipY + shipHeight) - spaceY > maxy - margin then
spaceY := shipY + shipHeight - maxy + margin
end if
Posted: Mon May 24, 2004 2:08 pm Post subject: (No subject)
omg wow i think i just solved the problem, ignore what i rote above. wow i'm so happy lol
guruguru
Posted: Mon May 24, 2004 2:13 pm Post subject: (No subject)
Umm... no that's not at all what I said ! Read the above posts... first I never said anything about putting variable stuff in the loop except for regenerated a value for the y values. And then you made it regenerate it x values.. AHHHHHHHHHH!!!! Well... read my above posts and good luck !
EDIT: Glad you solved it! Ask away for other problems !
vagyb
Posted: Mon May 24, 2004 2:49 pm Post subject: (No subject)
k this is the final code that works hehe, except i have 1 problem. when i move the spaceship up, it does not go till the end of the screen but stops bout 75% before reaching the screen. so basically when i press up arrow the spaceship goes up to a certain point but does not reach the top of the border
code:
setscreen ("graphics:400;400,position:middle;centre,nobuttonbar,title:Space")
const margin : int := 10
var number1 : int
var number2 : int
var number3 : int
var number4 : int
var number5 : int
var number6 : int
var spacePic : int
var shipPic : int
var boulderPic : int
var boulder2Pic : int
var boulder3Pic : int
var boulder4Pic : int
var spaceWidth, spaceHeight, boulderWidth, boulder2Width, boulder3Width, boulder4Width : int % We need to know the width of the boulder picture
var spaceX, spaceY : int
var shipX, shipY : int
var shipWidth, shipHeight : int
var chars : array char of boolean
shipPic := Pic.FileNew ("ship.jpg")
spacePic := Pic.FileNew ("spacepic.bmp")
boulderPic := Pic.FileNew ("boulder.bmp")
boulder2Pic := Pic.FileNew ("boulder2.bmp")
boulder3Pic := Pic.FileNew ("boulder3.bmp")
boulder4Pic := Pic.FileNew ("boulder4.bmp")
setscreen ("graphics:400;400,position:middle;centre,nobuttonbar,title:Space")
shipWidth := Pic.Width (shipPic)
shipHeight := Pic.Width (shipPic)
spaceWidth := Pic.Width (spacePic)
spaceHeight := Pic.Height (spacePic)
boulderWidth := Pic.Width (boulderPic)
boulder2Width := Pic.Width (boulder2Pic)
boulder3Width := Pic.Width (boulder3Pic)
boulder4Width := Pic.Width (boulder4Pic)
spaceX := (spaceWidth - maxx) div 2
spaceY := (spaceHeight - maxy) div 2
shipX := (spaceWidth - shipWidth) div 2
shipY := (spaceHeight - shipHeight) div 2
var boulder1X : int := 10
var boulder1Y : int := 200
var boulder2X : int := 200
var boulder2Y : int := 244
var boulder3X : int := 300
var boulder3Y : int := 111
var boulder4X : int := 400
var boulder4Y : int := 222
setscreen ("graphics:450;350,offscreenonly")
loop
Input.KeyDown (chars)
if chars (KEY_UP_ARROW) then
shipY += 3
elsif chars (KEY_DOWN_ARROW) then
shipY -= 3
end if
if boulder1X + boulderWidth <= 0 then
boulder1X := maxx
randint (boulder1Y, 1, maxy)
else
boulder1X -= 2
end if
if boulder2X + boulder2Width <= 0 then
boulder2X := maxx
randint (boulder2Y, 1, maxy)
else
boulder2X -= 2
end if
if boulder3X + boulder3Width <= 0 then
boulder3X := maxx
randint (boulder3Y, 1, maxy)
else
boulder3X -= 2
end if
if boulder4X + boulder4Width <= 0 then
boulder4X := maxx
randint (boulder4Y, 1, maxy)
else
boulder4X -= 2
end if
if shipX - margin < 0 then
shipX := margin
elsif shipX + shipWidth > spaceWidth - margin then
shipX := spaceWidth - margin - shipWidth
end if
if shipY - margin < 0 then
shipY := margin
elsif shipY + shipWidth > spaceWidth - margin then
shipY := spaceWidth - margin - shipWidth
end if
if shipY - margin < margin then
shipY := margin
elsif shipY + shipWidth > spaceWidth - margin then
shipY := spaceWidth - margin - shipWidth
end if
if shipX - shipX < margin then
spaceX := shipX - margin
elsif (shipX + shipWidth) - spaceX > maxx - margin then
spaceX := shipX + shipWidth - maxx + margin
end if
if shipY - spaceY < margin then
spaceY := shipY - margin
elsif (shipY + shipHeight) - spaceY > maxy - margin then
spaceY := shipY + shipHeight - maxy + margin
end if
Posted: Mon May 24, 2004 3:20 pm Post subject: (No subject)
Please post boulder4Pic picture.
vagyb
Posted: Mon May 24, 2004 3:39 pm Post subject: (No subject)
oops my bad lol its the same as all except name is boulder4, but here it is
boulder4.bmp
Description:
Filesize:
12.73 KB
Viewed:
4953 Time(s)
guruguru
Posted: Mon May 24, 2004 4:30 pm Post subject: (No subject)
When testing to see if shipY is greater than maxy, you add the ships width to shipY, when you should be using the ships height. In your tests, you use a varibale called shipHeight, however check its initialization. You actually make shipHeight equal to shipWidth. Change:
code:
shipHeight := Pic.Width (shipPic)
to
code:
shipHeight := Pic.Height (shipPic)
Little things like that can be really annoying and hard to find . Game looks good! Are you planning to make it so you have to avoid the rocks? That'd be better !