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

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.......

Recommended Answers

All 19 Replies

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....

Ask your question in a clear and concise manner.

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]

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.

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......?

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?

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.

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....

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???

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).

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;

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;

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]

You're shouting again, and i don't understand your question.

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

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?

commented: CAPS == SHOUTING you doofus -7

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.....:)

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.