Modified paddle to move in non-integer steps, created a ball with a function for updating based off of position relative to walls and paddle plus function to draw the ball
This commit is contained in:
parent
2f7a81dd9f
commit
54b9eb14f0
@ -17,8 +17,11 @@ typedef struct colour {
|
||||
double a;
|
||||
} colour;
|
||||
|
||||
void updateBall(double *ballX, double *ballY, double *ballVX, double *ballVY, double paddleX, int paddleWidth, int winWidth, int winHeight);
|
||||
|
||||
void drawPaddle(double paddleX, int paddleWidth, int paddleHeight, colour *c);
|
||||
void drawBall(double ballX, double ballY, colour *c);
|
||||
void drawBg(int winWidth, int winHeight, colour *c1, colour *c2);
|
||||
void drawPaddle(int paddleX, int paddleWidth, int paddleHeight, colour *c);
|
||||
|
||||
int main(void) {
|
||||
|
||||
@ -121,7 +124,11 @@ int main(void) {
|
||||
char moveX=0;
|
||||
|
||||
int paddleWidth=50;
|
||||
int paddleX=(winWidth/2)-(paddleWidth/2);
|
||||
double paddleX=(winWidth/2)-(paddleWidth/2);
|
||||
double ballX = 0;
|
||||
double ballY = 0;
|
||||
double ballVX = 0.2;
|
||||
double ballVY = -0.3;
|
||||
|
||||
/*
|
||||
* ----------------
|
||||
@ -170,7 +177,11 @@ int main(void) {
|
||||
}
|
||||
}
|
||||
|
||||
paddleX+=moveX*1;
|
||||
paddleX += moveX*0.1;
|
||||
|
||||
updateBall(&ballX, &ballY, &ballVX, &ballVY, paddleX, paddleWidth, winWidth, winHeight);
|
||||
ballX += ballVX*0.1;
|
||||
ballY += ballVY*0.1;
|
||||
|
||||
/*
|
||||
* ----------------
|
||||
@ -197,6 +208,7 @@ int main(void) {
|
||||
bgcol1.a = 1.0000; /*255*/ bgcol2.a = 1.0000; /*255*/
|
||||
|
||||
drawPaddle(paddleX, paddleWidth, winWidth, winHeight, &paddleCol);
|
||||
drawBall(ballX, ballY, &paddleCol);
|
||||
drawBg(winWidth, winHeight, &bgcol1, &bgcol2);
|
||||
|
||||
glFlush();
|
||||
@ -221,6 +233,32 @@ int main(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void updateBall(double *ballX, double *ballY, double *ballVX, double *ballVY, double paddleX, int paddleWidth, int winWidth, int winHeight) {
|
||||
double ballNX = *ballX + *ballVX;
|
||||
double ballNY = *ballY + *ballVY;
|
||||
double paddleRX = paddleX - (double)(winWidth / 2);
|
||||
double paddleRY = 20 - (double)(winHeight / 2);
|
||||
|
||||
if (ballNX > paddleRX && ballNY<paddleRY) {
|
||||
if (ballNX < paddleRX + paddleWidth) {
|
||||
*ballVY *= -1.0;
|
||||
}
|
||||
}
|
||||
|
||||
if (ballNX > winWidth / 2 || ballNX < (-1.0*winWidth/2)) {
|
||||
*ballVX *= -1.0;
|
||||
}
|
||||
if (ballNY > winHeight / 2) {
|
||||
*ballVY *= -1.0;
|
||||
}
|
||||
if (ballNY < (-1.0*winHeight/2)) {
|
||||
*ballX = 0;
|
||||
*ballY = 0;
|
||||
*ballVX = -0.1;
|
||||
*ballVY = -0.5;
|
||||
}
|
||||
}
|
||||
|
||||
void drawBg(int winWidth, int winHeight, colour *c1, colour *c2) {
|
||||
GLint matrixmode = 0;
|
||||
glGetIntegerv(GL_MATRIX_MODE, &matrixmode);
|
||||
@ -239,14 +277,14 @@ void drawBg(int winWidth, int winHeight, colour *c1, colour *c2) {
|
||||
glEnd();
|
||||
}
|
||||
|
||||
void drawPaddle(int paddleX, int paddleWidth, int winWidth, int winHeight, colour *c) {
|
||||
void drawPaddle(double paddleX, int paddleWidth, int winWidth, int winHeight, colour *c) {
|
||||
GLint matrixmode = 0;
|
||||
glGetIntegerv(GL_MATRIX_MODE, &matrixmode);
|
||||
glPushMatrix();
|
||||
glTranslated((GLdouble)(paddleX)-winWidth/2, (GLdouble)(20-winHeight/2), 0.0);
|
||||
|
||||
glBegin(GL_QUADS);
|
||||
glColor3f(c->r, c->g, c->b); //#666666
|
||||
glColor3f(c->r, c->g, c->b);
|
||||
glVertex3d(0.0, 0.0, 0.0);
|
||||
glVertex3d(0.0, 10.0, 0.0);
|
||||
glVertex3d((double)paddleWidth, 10.0, 0.0);
|
||||
@ -256,3 +294,21 @@ void drawPaddle(int paddleX, int paddleWidth, int winWidth, int winHeight, colou
|
||||
glPopMatrix();
|
||||
glMatrixMode(matrixmode);
|
||||
}
|
||||
|
||||
void drawBall(double ballX, double ballY, colour *c) {
|
||||
GLint matrixmode = 0;
|
||||
glGetIntegerv(GL_MATRIX_MODE, &matrixmode);
|
||||
glPushMatrix();
|
||||
glTranslated(ballX, ballY, 0.0);
|
||||
|
||||
glBegin(GL_QUADS);
|
||||
glColor3f(c->r, c->g, c->b);
|
||||
glVertex3d(0.0, 0.0, 0.0);
|
||||
glVertex3d(0.0, 8.0, 0.0);
|
||||
glVertex3d(8.0, 8.0, 0.0);
|
||||
glVertex3d(8.0, 0.0, 0.0);
|
||||
glEnd();
|
||||
|
||||
glPopMatrix();
|
||||
glMatrixMode(matrixmode);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user