Computer Science Canada Programming C, C++, Java, PHP, Ruby, Turing, VB   Username:   Password: Wiki   Blog   Search   Turing   Chat Room  Members
help wit random placement of astroids
Author Message
vagyb

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?

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 boulder1Y every 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

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     colorback (black)                                          cls     Pic.Draw (boulderPic, boulder1X, boulder1Y, picMerge)     Pic.Draw (boulder2Pic, boulder2X, boulder2Y, picMerge)     Pic.Draw (boulder3Pic, boulder3X, boulder3Y, picMerge)      Pic.Draw (shipPic, shipX - spaceX, shipY - spaceY, picMerge)     View.Update end loop

is this wat u meant i should do?
vagyb

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 !

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     colorback (black)     cls     Pic.Draw (boulderPic, boulder1X, boulder1Y, picMerge)     Pic.Draw (boulder2Pic, boulder2X, boulder2Y, picMerge)     Pic.Draw (boulder3Pic, boulder3X, boulder3Y, picMerge)     Pic.Draw (boulder4Pic, boulder4X, boulder4Y, picMerge)     Pic.Draw (shipPic, shipX - spaceX, shipY - spaceY, picMerge)     View.Update end loop
guruguru

Posted: Mon May 24, 2004 3:20 pm   Post subject: (No subject)

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:  2989 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 !
 Display posts from previous: All Posts1 Day7 Days2 Weeks1 Month3 Months6 Months1 Year Oldest FirstNewest First

Page 1 of 2  [ 17 Posts ]
Goto page 1, 2  Next
 Jump to:  Select a forum  CompSci.ca ------------ - Network News - General Discussion     General Forums   -----------------   - Hello World   - Featured Poll   - Contests     Contest Forums   -----------------   - DWITE   - [FP] Contest 2006/2008   - [FP] 2005/2006 Archive   - [FP] 2004/2005 Archive   - Off Topic     Lounges   ---------   - User Lounge   - VIP Lounge     Programming -------------- - General Programming     General Programming Forums   --------------------------------   - Functional Programming   - Logical Programming   - C     C   --   - C Help   - C Tutorials   - C Submissions   - C++     C++   ----   - C++ Help   - C++ Tutorials   - C++ Submissions   - Java     Java   -----   - Java Help   - Java Tutorials   - Java Submissions   - Ruby     Ruby   -----   - Ruby Help   - Ruby Tutorials   - Ruby Submissions   - Turing     Turing   --------   - Turing Help   - Turing Tutorials   - Turing Submissions   - PHP     PHP   ----   - PHP Help   - PHP Tutorials   - PHP Submissions   - Python     Python   --------   - Python Help   - Python Tutorials   - Python Submissions   - Visual Basic and Other Basics     VB   ---   - Visual Basic Help   - Visual Basic Tutorials   - Visual Basic Submissions     Education ----------- - Student Life   Graphics and Design ----------------------- - Web Design     Web Design Forums   ---------------------   - (X)HTML Help   - (X)HTML Tutorials   - Flash MX Help   - Flash MX Tutorials   - Graphics     Graphics Forums   ------------------   - Photoshop Tutorials   - The Showroom   - 2D Graphics   - 3D Graphics     Teams ------ - dTeam Public

 Style: Appalachia blueSilver eMJay subAppalachia subBlue subCanvas subEmjay subGrey subSilver subVereor Search: