0

--------------------------------------------------------------------------------

HELLO FRIENDS...
I M MAKING A GAME WHICH IS CALLED "RAMP GAME".
THIS GAME CONSIST OF
1) A BALL, 2) A BASKET, 3) SOME LINES ( which can be place anywhere by the user with in the boundary walls).

HERE IS TEH LINK....
SNIP
u can see what it looks like....

now what i m here for?....is i dont know how to bounce a ball w.r.t the collision angle..... i don't know how to move lines at run time.....
i should no my problems here, so u can understand what i m trying to say...

1) Setting the lines at run time.
2) When ball collides with the lines then it should reflect w.r.t the angle of
reflection.

ONE MORE THING......there is a restriction that the game should be made on "OPENGL".

PLEASE HELP ME OUT WHO KNOWS OPENGL.......

4
Contributors
19
Replies
20
Views
7 Years
Discussion Span
Last Post by ammadkhan
Featured Replies
  • 1
    Salem 5,138   7 Years Ago

    Running around YELLING and [URL="http://cboard.cprogramming.com/game-programming/119061-ramp-game.html"]cross-posting all over the web[/URL] won't make it happen any quicker. Read More

  • I'm not shouting my friend... First tell me how can i attach my file here in the thread? then will understand my problem... Read More

0

well is there any rule not to ask our problems here ??????
can any1 help me here then plz tell me.....
my cprogramming thread is closed , i don't know y....

0

ok....
1)i want to set the lines at run time.( w.r.t. x-axis,y-axis,clockwise and anti-clockwise)
2)i want to detect collision of a circle with the lines(which may be in slope), and after collision the circle should bounce in a paricular direction.....
[edit]
using OPENGL
[/edit]

0

ok....

1)i want to set the lines at run time.( w.r.t. x-axis,y-axis,clockwise and anti-clockwise)

Ok whats the problem. In your drawFunc have the (X_i,Y_i,Z_i)
and the (X_f, Y_f, Z_f) as variables and change it accordingly. Maybe
if '+' is pressed, increase the length of each X coord by 1 unit...

2)i want to detect collision of a circle with the lines(which may be in slope), and after collision the circle should bounce in a paricular direction.....

Option # 1) Check if the lines is within the circle's position. The
circle position has an X,Y,Z coordinate. If the line is within the area
of the circle then there is a collision. And move the circle -x.

Option # 2) Check if the circle + radius is within the Top height
and the low height of the line. If so then check if its X position + radius
is within the lines X coordinate of the line. If so then there is a collision and
move circle to -x, maybe by making its x velocity = -x velocity.

0

Can i change the line positions by not making any function of darwline()????
I m using opengl in which i can use
GLBegin(gl_lines);
And i m working in 2D.....
And can u plz help me in coding manners??? or pseudo code????
if it doesn't matter to u......?

0

I have this Piece of code to bounce a ball.....

#include <gl/glut.h>  // Also included gl.h, glu.h
#include <Math.h>     // Needed for sin, cos
#define PI 3.14159265f
      
// Global variables
char title[] = "Bouncing Ball (2D)";  // Windowed mode's title
int windowWidth  = 640;     // Windowed mode's width
int windowHeight = 480;     // Windowed mode's height
int windowPosX   = 50;      // Windowed mode's top-left corner x
int windowPosY   = 50;      // Windowed mode's top-left corner y
   
GLfloat ballRadius = 0.5f;   // Radius of the bouncing ball
GLfloat xPos = 0.0f;         // Ball's (x, y) position
GLfloat yPos = 0.0f;
GLfloat xPosMax, xPosMin, yPosMax, yPosMin; // Ball's (x, y) bounds
GLdouble xLeft, xRight, yBottom, yTop;      // Projection clipping area
GLfloat xSpeed = 0.02f;      // Ball's speed in x and y directions
GLfloat ySpeed = 0.007f;
int refreshMillis = 30;      // Refresh period in milliseconds
      
// Initialize OpenGL Graphics
void initGL() {
   glClearColor(0.0, 0.0, 0.0, 1.0); // Set background (clear) color to black
}
   
// Callback handler for window re-paint event
void display() {
   glClear(GL_COLOR_BUFFER_BIT);    // Clear the color buffer
   
   glLoadIdentity();                // Reset model-view matrix
   glTranslatef(xPos, yPos, 0.0f);  // Translate to (xPos, yPos)
   // Use triangular segments to form a circle
   glBegin(GL_TRIANGLE_FAN);
      glColor3f(0.0f, 0.0f, 1.0f);  // Blue
      glVertex2f(0.0f, 0.0f);       // Center of circle
      int numSegments = 100;
      GLfloat angle;
      for (int i = 0; i < numSegments; i++) {
         angle = i * 2.0f * PI / numSegments;  // 360 deg for all segments
         glVertex2f(cos(angle) * ballRadius, sin(angle) * ballRadius);
      }
      glVertex2f(ballRadius, 0.0f);     // Last vertex
   glEnd();
   
   glutSwapBuffers();  // Swap front and back buffers (of double buffered mode)
   
   // Animation Control - compute the location for the next refresh
   xPos += xSpeed;
   yPos += ySpeed;
   // Check if the ball exceeds the edges
   if (xPos > xPosMax) {
      xPos = xPosMax;
      xSpeed = -xSpeed;
   } else if (xPos < xPosMin) {
      xPos = xPosMin;
      xSpeed = -xSpeed;
   }
   if (yPos > yPosMax) {
      yPos = yPosMax;
      ySpeed = -ySpeed;
   } else if (yPos < yPosMin) {
      yPos = yPosMin;
      ySpeed = -ySpeed;
   }
}
   
// Call back when the windows is re-sized.
void reshape(GLsizei weight, GLsizei height) {
   if (height == 0) height = 1;               // To prevent divide by 0
   GLfloat aspect = (GLfloat)weight / height; // Get aspect ratio
   
   // Set the viewport to cover the entire window
   glViewport(0, 0, weight, height);
   
   // Adjust the aspect ratio of clipping area to match the viewport
   glMatrixMode(GL_PROJECTION); // Select the Projection matrix
   glLoadIdentity();            // Reset
   if (weight <= height) {
      xLeft   = -1.0;
      xRight  = 1.0;
      yBottom = -1.0 / aspect;
      yTop    = 1.0 / aspect;
   } else {
      xLeft   = -1.0 * aspect;
      xRight  = 1.0 * aspect;
      yBottom = -1.0;
      yTop    = 1.0;
   }
   gluOrtho2D(xLeft, xRight, yBottom, yTop);
   xPosMin = xLeft + ballRadius;
   xPosMax = xRight - ballRadius;
   yPosMin = yBottom + ballRadius;
   yPosMax = yTop - ballRadius;
   
   // Reset the model-view matrix
   glMatrixMode(GL_MODELVIEW); // Select the model-view matrix
   glLoadIdentity();           // Reset
}
   
// Animation timer function
void Timer(int value) {
	glutPostRedisplay();    // Post a paint request to activate display()
	glutTimerFunc(refreshMillis, Timer, 0); // subsequent timer call at milliseconds
}
   
// main function - GLUT run as a Console Application
int main(int argc, char** argv) {
   glutInit(&argc, argv);            // Initialize GLUT
   glutInitDisplayMode(GLUT_DOUBLE); // Enable double buffered mode
   glutInitWindowSize(windowWidth, windowHeight);  // Initial window width and height
   glutInitWindowPosition(windowPosX, windowPosY); // Initial window top-left corner (x, y)
   glutCreateWindow(title);      // Create window with given title
   glutDisplayFunc(display);     // Register callback handler for window re-paint
   glutReshapeFunc(reshape);     // Register callback handler for window re-shape
   glutTimerFunc(0, Timer, 0);   // First timer call immediately
   initGL();                     // Our own OpenGL initialization
   glutMainLoop();               // Enter event-processing loop
   return 0;
}

Can u explain me what Timer() and reshape() do here inthis piece of code?

0

Okay, you clearly didn't write that code, so before you go any further, do you actually understand any of this or have a knowledge of OpenGL at all? if not, read a book or tutorial first then give it a shot.

i want to detect collision of a circle with the lines(which may be in slope), and after collision the circle should bounce in a paricular direction.....

If you want to bounce off an angled surface, your problem requires some physics, so unless you really know your stuff, don't consider this an easily achievable task.

0

I know the physics thing .......but i don't know how interact both the things......:(
I mean i can make a class of VECTOR working for 2D, it can find the dot product, addition, subtraction and all.
But i don't how interact this class with the circle to find collision detection....

0

This code is running good ... but I'm unable to make the ball fall down.
Plz tell what changes i should make to create gravity effects???

0

This code is running good ... but I'm unable to make the ball fall down.
Plz tell what changes i should make to create gravity effects???

Constantly increment ySpeed by however strong you want the gravity to be.

Somewhere in your game loop, try:

ySpeed += 0.5f;

or a value of your choice (better stored as a constant variable).

0

I have changed these lines of code

GLfloat xSpeed = 0.0f;      // Ball's speed in x and y directions
GLfloat ySpeed = 0.05f;

Now the ball is moving in y-axis only...
And William where i should make these changes u r talking ??

ySpeed += 0.5f;
0

Pretty much anywhere in your game loop, if you want an exact position, I would put it directly before the lines:

// Animation Control - compute the location for the next refresh
xPos += xSpeed;
yPos += ySpeed;
0

Thanks William it is working......

// Animation Control - compute the location for the next refresh
   ySpeed -= 0.04f;
   xPos += xSpeed;
   yPos += ySpeed;

NOW I HAVE A QUESTION, IF THE BALL DETECTS ANY COLLISION IN BETWEEN THE SCREEN WILL IT MOVEIN X-AXIS OR NOT????
I MEAN I SET THESE LINES OF CODE

GLfloat xSpeed = 0.0f;      // Ball's speed in x and y directions
GLfloat ySpeed = 0.001f;

[edit]
which means ( GLfloat xSpeed = 0.0f; ) this will effect the ball to move in x-axis if the ball detects any sloped line ....right?
[/edit]

1

I'm not shouting my friend...
First tell me how can i attach my file here in the thread?
then will understand my problem...

-2

http://www.4shared.com/file/129694854/34018122/ramp.html
CHECK THIS OUT , I HAVE MADE A .bmp FOR U.
[EDIT]
NOW U CAN SEE THE SLOPED LINES TO WHICH THE BALL IS INTERSECTING,
NOW AFTER INTERSECTION THE BALL WILL TRAVEL BOTH THE AXIS i.e X AND Y.
I WRITE THIS LINE IN MY CODING

GLfloat xSpeed = 0.0f;      // Ball's speed in x and y directions
GLfloat ySpeed = 0.001f;

WHICH MEANS BALL HAS ONLY ySpeed BUT NOT xSpeed, WHICH FURTHER MEANS THE BALL WILL MOVE IN ONLY ONE DIRECTION i.e Y-AXIS.
U GOT ME NOW?

Votes + Comments
CAPS == SHOUTING you doofus
0

Well , Thanks William..... That was very very helpful....
Sorry because my English is not that much strong to specify my question correctly.......
But u helped anyways.....:)

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.