the code is only a five level puzzle game. I am using SDL, opengl, C++, and codeblocks with the mingw32 compiler to make it. I know it has nothing to with SDL becuase I have installed a Devpack for SDL. also i can only execute it once then I must restart the IDE to run it again.
#include "SDL.h"
#include "SDL_opengl.h"
#include <iostream>
#include <math.h>
using namespace std;
bool checkCollision(float Ax,float Ay,float Aw,float Ah,int Bx, int By, int Bw, int Bh)
{
if (Ay + Ah < By ) return false;
else if (Ay > By + Bh) return false;
else if (Ax + Aw < Bx) return false;
else if (Ax > Bx + Bw ) return false;
else if (Ax + Aw > Bx) return true;
return true;
}
/*bool check (float px, float py, float ph, float pw, int obx[], int oby[],int obh[],int obw[])// use arrays with numbers then during check intriment a variable inside array []
{
int c = 0;
int b = 0;
int a = 0;
int i = 0;
int counter = 0;
int fx = 0;
while (checkCollision(px,py,ph,pw,obx[c],oby[b],obh[a],obw[i]) == false && (c <= 13 || b <= 11 || a <= 13 || i <= 10))
{
if (counter == 1 + fx)
{
c++;
if (checkCollision(px,py,ph,pw,obx[c],oby[b],obh[a],obw[i]) == true)
{
return true;
}
}
else if (counter == 2 + fx)
{
b++;
if (checkCollision(px,py,ph,pw,obx[c],oby[b],obh[a],obw[i]) == true)
{
return true;
}
}
else if (counter == 3 + fx)
{
a++;
if (checkCollision(px,py,ph,pw,obx[c],oby[b],obh[a],obw[i]) == true)
{
return true;
}
}
else if (counter == 4 + fx)
{
i++;
if (checkCollision(px,py,ph,pw,obx[c],oby[b],obh[a],obw[i]) == true)
{
return true;
}
}
counter++;
fx+=4;
}
return false;
}*/
int main(int argc, char* argv[])
{
SDL_Init( SDL_INIT_EVERYTHING );
SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 8);
SDL_GL_SetAttribute( SDL_GL_BUFFER_SIZE, 32);
SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16);
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1);
SDL_WM_SetCaption( "stack 52" , NULL );
SDL_SetVideoMode( 600,400,32, SDL_OPENGL);
glClearColor(1,1,1,1); // RGBA
glViewport(0,0,600,400);
glShadeModel(GL_SMOOTH);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glEnable(GL_DEPTH_TEST);
cout << "open gl is running";
SDL_Event event;
bool isRunning = true, isAlive = true;
float xpers = 15;
float ypers = 375;
float wpers = 12.5;
float hpers = 26;
int moves = 52;
int r = 0;
int g = 0;
int b = 0;
int T = 0;
struct LineVector
{
float x;
float y;
};
bool left = false;
bool right = false;
bool up = false;
bool lvl1 = true;
bool lvl2,lvl3,lvl4,lvl5 = false;
//main loop
while ( isRunning )
{
while (SDL_PollEvent(&event) )
{
//EVENTS
if (event.type == SDL_QUIT)
{
isRunning = false;
}
if (event.type == SDL_KEYUP && event.key.keysym.sym == SDLK_ESCAPE)
{
isRunning = false;
}
int c = 1;
if (event.type == SDL_KEYUP && event.key.keysym.sym == SDLK_SPACE)
{
while (c <= 2)
{
ypers = ypers + 150;
xpers = xpers + 60;
LineVector Gravity;
Gravity.x = +0.0f; //Since gravity acts only in vertical direction
Gravity.y = -9.8f;
}
// will add wall jump by setting collision detection for the map with variable
up = true;
}
if (event.type == SDL_KEYDOWN)
{
if(event.key.keysym.sym == SDLK_RIGHT)
{
right = true;
}
else if (event.key.keysym.sym == SDLK_LEFT)
{
left = true;
}
}
else if (event.type == SDL_KEYUP)
{
if (event.key.keysym.sym == SDLK_RIGHT)
{
right = false;
}
else if (event.key.keysym.sym == SDLK_LEFT)
{
left = false;
}
}
}
if (moves == 48)
{
hpers = 24;
//insert new pic after each
}
if (moves == 44)
{
hpers = 22;
}
if (moves == 40)
{
hpers = 20;
}
if (moves == 36)
{
hpers = 18;
}
if (moves == 32)
{
hpers = 16;
}
if (moves == 28)
{
hpers = 14;
}
if (moves == 24)
{
hpers = 12;
}
if (moves == 20)
{
hpers = 10;
}
if (moves == 16)
{
hpers = 8;
}
if (moves == 12)
{
hpers = 6;
}
if (moves == 8)
{
hpers = 4;
}
if (moves == 4)
{
hpers = 2;
}
if (moves == 0)
{
hpers = 0;
isRunning = false;
}
//event logic
//LOGIC
if (isRunning == false)
{
SDL_Quit();
}
if (right == true)
{
xpers += 50;
moves--;
}
if (left == true)
{
xpers -= 50;
moves--;
}
if (up == true)
{
moves--;
}
if (lvl1 == false)
{
lvl2 = true;
}
if (lvl2 == false)
{
lvl3 = true;
}
if (lvl3 == false)
{
lvl4 = true;
}
if (lvl4 == false)
{
lvl5 = true;
}
if (lvl5 == true)
{
SDL_Quit();
}
if (xpers >= 600 - wpers || xpers <= 0)
{
xpers = -xpers;
}
if (ypers < 0 - hpers || ypers >= 400)
{
ypers = -ypers;
}
//rendering to the screen
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glOrtho(0,600,400,0,-1,1);
while (isAlive)
{
glColor4ub(255,49,3,255);
glBegin(GL_QUADS);// GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_QUADS, GL_TRIANGLES, GL_POLIGON
glVertex2f (xpers,ypers);
glVertex2f (xpers + wpers,ypers);
glVertex2f (xpers + wpers,ypers + hpers);
glVertex2f (xpers,ypers + hpers);
glEnd();
LineVector Gravity;
Gravity.x = +0.0f; //Since gravity acts only in vertical direction
Gravity.y = -9.8f;
ypers -= Gravity.y;
}
while (lvl1 == true)
{
float eox[8] = {0,75,35,85,130,155,455,450};
float seox[9] = {75,115,25,125,110,155,160,450,549};
float eoy[8] = {375,350,250,225,200,125,100,70};
float seoy[9] = {375,275,360,350,225,200,175,100,70};
glBegin(GL_LINES);
glColor4ub (0,0,0,255);
glVertex2f (eox[0],eoy[0]);//startu
glVertex2f (seox[0],seoy[0]);//u
glEnd();
glBegin(GL_LINES);
glColor4ub (0,0,0,255);
glVertex2f (eox[1],eoy[0]);//eoxu
glVertex2f (seox[1],seoy[1]);//u
glEnd();
glBegin(GL_LINES);
glColor4ub(0,0,0,255);
glVertex2f (eox[0],eoy[1]);//eoxu
glVertex2f (seox[2],seoy[2]);//u
glEnd();
glBegin(GL_LINES);
glColor4ub (0,0,0,255);
glVertex2f (eox[2],eoy[1]);//eoxu
glVertex2f (seox[0],seoy[3]);//u
glEnd();
glBegin(GL_LINE_STRIP);
glColor4ub (0,0,0,255);
glVertex2f (eox[1],eoy[2]);//eoxu
glVertex2f (seox[3],seoy[5]);//u
glVertex2f (eox[3],eoy[2]);//eoxu
glVertex2f (seox[4],seoy[0]);
glEnd();
glBegin(GL_LINES);
glVertex2f (eox[4], eoy[3]);//eoxu
glVertex2f (seox[5],seoy[5]);//u
glEnd();
glBegin(GL_QUADS);
glColor4ub (r = 205, g = 133,b = 63 ,255);
glVertex2f (eox[5],eoy[6]);//eoxu
glVertex2f (seox[6],seoy[6]);//u
glVertex2f (eox[6],eoy[5]);//eoxu
glVertex2f (seox[7],seoy[7]);//u
glEnd();
glBegin(GL_LINES);
glColor4ub (r = 0, g = 0,b = 0 ,255);
glVertex2f (eox[7],eoy[6]);//eoxu
glVertex2f (seox[7],seoy[8]);//u
glEnd();
glBegin(GL_LINES);
glColor4ub (0,0,0 ,255);
glVertex2f (eox[7],eoy[7]);//eoxu
glVertex2f (seox[8],seoy[8]);//
glEnd();
int xx = 370;
int inc = 549;
for (int d = 0; d <= 2; d++)
{
glBegin(GL_TRIANGLES);
glColor4ub (0,0,0 ,255);
glVertex2f (inc + 8.5,xx);//top
glVertex2f (inc + 17,xx + 30);//far point
glVertex2f (inc, xx + 30);//near point
inc += 17;
glEnd();
while (xx == 370)
{
SDL_Quit();
}
}
if ((xpers >= 530) && (ypers = 0))
{
lvl1 = false;
xpers = 31;
ypers = 300;
hpers = 26;
}
while ((r == 205) && (g == 133) && (b == 63))
{
SDL_Delay(100);
xpers = xpers - 10;
while (lvl5 == true && xpers > 150)
{
xpers -= 5;
}
}
while (checkCollision(xpers,ypers,wpers,hpers,eox[T],seox[T],eoy[T],seoy[T]) == true)
{
if ((ypers + hpers > eoy[T]) || (ypers < seoy[T]))
{
ypers = -ypers;
}
if ((xpers + wpers > eox[T]) || (xpers < seox[T]))
{
xpers = -xpers;
if (up == true)
{
int x = 1;
while (x == 1)
{
ypers -= 150;
}
}
}
T++;
}
}
while (lvl2)
{
float twox[6] = {31,221,371,391,411,561};//6
float twoy[3] = {300,200,100};
float two_x[6] = {181,371,221,391,411,561};
float two_y[5] = {300,400,200,250,100};
for (int d = 10; d >= 0; d--)
{
int xx = 0;
int yy = 1.5 * xx;
glBegin(GL_TRIANGLES);
glColor4ub(0,0,0,255);
glVertex2f(0,0 + xx);
xx += 40;
glVertex2f(30,0 + xx);
glVertex2f(0,0 + yy);
}
glBegin(GL_QUADS);
glColor4ub(0,0,0,255);
glVertex2f(twox[0],twoy[0]);
glVertex2f(two_x[0],twoy[0]);
glVertex2f(two_x[0],two_y[0]);
glVertex2f(twox[0],two_y[0]);
glEnd();
int xx = 20;
for (int d=0;d<=2;d++)
{
glBegin(GL_TRIANGLES);
glVertex2f(181 + xx - 20,400);
glVertex2f(181 + .5 * xx,370);
glVertex2f(181 + xx,400);
xx = 40;
glEnd();
}
glBegin(GL_QUADS);
glColor4ub(0,0,0,255);
glVertex2f(twox[1],twoy[1]);
glVertex2f(two_x[1],two_y[2]);
glVertex2f(twox[2],twoy[1]);
glVertex2f(two_x[2], two_y[1]);
xx = 20;
glEnd();
for (int d=0;d<=2;d++)
{
glBegin(GL_TRIANGLES);
glVertex2f(371 + xx - 20,400);
glVertex2f(371 + .5 * xx,370);
glVertex2f(371 + xx,400);
xx = 40;
glEnd();
}
glBegin(GL_LINES);
glVertex2f(twox[3],twoy[1]);
glVertex2f(two_x[3],two_y[3]);
glEnd();
glBegin(GL_LINES);
glVertex2f(twox[3],twoy[1]);
glVertex2f(two_x[3],0);
glEnd();
glBegin(GL_QUADS);
glVertex2f(twox[4],twoy[2]);
glVertex2f(two_x[5],two_y[4]);
glVertex2f(twox[5],twoy[1]);
glVertex2f(two_x[4], two_y[1]);
glEnd();
xx = 20;
for (int d=0;d<=2;d++)
{
glBegin(GL_TRIANGLES);
glVertex2f(561 + xx - 20,400);
glVertex2f(561 + .5 * xx,370);
glVertex2f(561 + xx,400);
xx = 40;
glEnd();
}
if ((xpers >= 530) && (ypers == 0))
{
lvl2 = false;
xpers = 0;
ypers = 320;
hpers = 26;
}
T = 0;
while (checkCollision(xpers,ypers,wpers,hpers,twox[T],twoy[T],two_x[T],two_y[T]) == true)
{
if ((ypers + hpers > twoy[T]) || (ypers < two_y[T]))
{
ypers = -ypers;
if (up == true)
{
int x = 1;
while (x == 1)
{
ypers -= 150;
}
}
}
if ((xpers + wpers > twox[T]) || (xpers < two_x[T]))
{
xpers = -xpers;
}
T++;
}
}
while (lvl3)
{
for (int d = 1; d <= 30; d++)
{
glBegin(GL_TRIANGLES);
float incrimentTwenty = 0;
glVertex2f (incrimentTwenty, 400);
incrimentTwenty += 20;
glVertex2f (incrimentTwenty + 10,370);
glVertex2f (incrimentTwenty + 20,400);
glEnd();
}
struct blocks
{
float x1;
float y1;
float x2;
float y2;
};
blocks one;
one.x1 = 0;
one.y1 = 80;
one.x2 = 100;
one.y2 = 30;
glBegin(GL_QUADS);
glVertex2f (one.x1, one.y1);
glVertex2f (one.x1 + one.x2, one.y1);
glVertex2f (one.x1 + one.x2, one.y1 + one.y2);
glVertex2f (one.x1, one.y1 + one.y2);
glEnd();
while (one.x1 >= 0)
{one.x1 += 15;}
while(one.x1 + one.x2 >= 600)
{one.x1 -= 15;}
blocks two;
two.x1 = 0;
two.y1 = 320;
two.x2 = 100;
two.y2 = 30;
glBegin(GL_QUADS);
glVertex2f (two.x1, two.y1);
glVertex2f (two.x1 + two.x2, two.y1);
glVertex2f (two.x1 + two.x2, two.y1 + two.y2);
glVertex2f (two.x1, two.y1 + two.y2);
glEnd();
while(checkCollision(xpers,ypers,wpers,hpers,two.x1,two.x2,two.y1,two.y2))
{
if ((ypers + hpers > two.y1) || (ypers < two.y1 + two.y2))
{
ypers = -ypers;
if (up == true)
{
int x = 1;
while (x == 1)
{
ypers -= 150;
}
}
}
if ((xpers + wpers > two.x1) || (xpers < two.x2 + two.x1))
{
xpers = -xpers;
}
}
while(checkCollision(xpers,ypers,wpers,hpers,one.x1,one.x2,one.y1,one.y2))
{
if ((ypers + hpers > one.y1) || (ypers < one.y1 + one.y2))
{
ypers = -ypers;
if (up == true)
{
int x = 1;
while (x == 1)
{
ypers -= 150;
}
}
}
if ((xpers + wpers > one.x1) || (xpers < one.x2 + one.x1))
{
xpers = -xpers;
}
}
while (two.x1 >= 0)
{two.x1 += 20;}
while(two.x1 + two.x2 > 600)
{two.x1 -= 20;}
//add springs when collision is added
if ((xpers >= 530) && (ypers == 0))
{
lvl3 = false;
xpers = 575;
ypers = 50;
hpers = 26;
}
}
while (lvl4)
{
int x1 = 550;
int y1 = 0;
int y2 = 50;
int x2 = 0;
while (y2 == 50)
{
int counter = 1;
counter++;
if (counter % 10 != 0)
{
glBegin(GL_LINES);
glVertex2f(x1,y2);
glVertex2f(x1,y1);
glEnd();
}
else
{
glBegin(GL_LINES);
glVertex2f(0,0);
glVertex2f(0,0);
glEnd();
}
if ((ypers + hpers > y1) || (ypers < y1 + y2))
{
ypers = -ypers;
if (up == true)
{
int x = 1;
while (x == 1)
{
ypers -= 150;
}
}
}
if ((xpers + wpers > x1) || (xpers < x2 + x1))
{
xpers = -xpers;
}
}
float x[7] = {600,550,200,525,510,525,517};
float y[3] = {50,133,325};
float xx[4] = {0,200,0,510};
float yy[3] = {50,133,325};
glBegin(GL_LINES);
glVertex2f(x[0],y[0]);//x1,y1
glVertex2f(xx[0],yy[0]);//xx1,yy1
glEnd();
glBegin(GL_LINES);
glColor4ub (r = 205, g = 133,b = 63 ,255);
glVertex2f(x[1],y[0]);//x2,y1
glVertex2f(xx[1],yy[1]);
glEnd();
glBegin(GL_LINES);
glVertex2f(xx[1],y[1]);
glVertex2f(xx[2],yy[1]);
glEnd();
glBegin(GL_TRIANGLES);
glVertex2f(x[3],y[2]);
glVertex2f(xx[3],yy[2]);
glVertex2f(x[4],y[2]);
glEnd();
glBegin(GL_TRIANGLES);// button to connect
glVertex2f(x[5],y[2]);
glVertex2f(xx[3],yy[2]);
glVertex2f(x[6],y[2]);
glEnd();
if ((xpers == x[6]) && (ypers == y[2]))
{
xpers += 30;
ypers -= 40;
}
T = 0;so
while (checkCollision(xpers,ypers,wpers,hpers,x[T],y[T],xx[T],yy[T]))
{
if ((ypers + hpers > y[T]) && (ypers < yy[T]))//come back to this to fix object var to progress through
{
ypers = -ypers;
if (up == true)
{
//int xas = 1;
for (int xas = 1; xas < 2; xas++)
{
ypers -= 150;
}
//xas++;
}
}
if ((xpers + wpers > x[T]) && (xpers < xx[T]))
{
xpers = -xpers;
}
T++;
}
if (ypers >= 140 && ypers <= 250)
{
if (xpers == 0)
{
lvl4 = false;
xpers = 150;
ypers = 350;
}
}
}
while (lvl5)
{
int xs[13] = {0,249,249,299,300,350,400,380,420,600,560,500,520};
int ys[12] = {0,400,270,320,350,270,220,170,250,70,0};
int hs[12] = {50,249,299,350,300,400,380,420,560,600,520,500};
int ws[10] = {340,270,320,350,270,220,170,250,70,0};
int x = 100;
float y = (1/250) * (x - 150) + 380;
float height = 0;
float width = 0;
glBegin(GL_LINE_STRIP);//since the arc is not a closed curve, this is a strip now
glColor4ub(r = 205,g = 133,b = 63,255);
// int y = (1/250) * (x - 150) + 380;
for(int ii = 100; ii < 200; ii++)
{
glVertex2f(x,y);
x++;
glVertex2f(x,y);
}
glEnd();
while (checkCollision(xpers,ypers,wpers,hpers,x,y,height,width))
{
if (ypers + hpers <= y)
{
ypers -= ypers;
if (up == true)
{
int xas = 1;
while (x == 1)
{
ypers -= 150;
}
xas++;
}
else if (xpers + wpers <= x)
{
xpers -= xpers;
}
}
glBegin(GL_LINES);
glVertex2f(xs[0],ys[0]);
glVertex2f(hs[0],ws[0]);
glEnd();
glBegin(GL_LINES);
glVertex2f(xs[1],ys[1]);
glVertex2f(hs[0],ws[0]);
glEnd();
int flo = 3;
for (int n = 0;n < 117;n++)
{
glBegin(GL_TRIANGLES);
glVertex2f(246 + flo,0);
glVertex2f(249 + flo,20);
glVertex2f(249 + flo,0);
glEnd();
flo += 3;
}
glBegin(GL_QUADS);
glColor4ub(0,255,0,255);
glVertex2f(xs[2],ys[2]);
glVertex2f(hs[1],ws[1]);
glVertex2f(xs[3],ys[3]);
glVertex2f(hs[1],ws[2]);
glEnd();
glBegin(GL_QUADS);
glColor4ub(0,255,0,255);
glVertex2f(xs[4],ys[3]);
glVertex2f(hs[3],ws[2]);
glVertex2f(xs[5],ys[4]);
glVertex2f(hs[4],ws[3]);
glEnd();
glBegin(GL_QUADS);
glColor4ub(0,255,0,255);
glVertex2f(xs[5],ys[3]);
glVertex2f(hs[5],ws[2]);
glVertex2f(xs[6],ys[4]);
glVertex2f(hs[3],ws[3]);
glEnd();
glBegin(GL_QUADS);
glColor4ub(0,255,0,255);
glVertex2f(xs[7],ys[5]);
glVertex2f(hs[7],ws[4]);
glVertex2f(xs[8],ys[6]);
glVertex2f(hs[6],ws[5]);
glEnd();
glBegin(GL_QUADS);
glColor4ub(0,255,0,255);
glVertex2f(xs[9],ys[7]);// gg = 600, xi = 170
glVertex2f(hs[8],ws[6]);// uu = 560, rp = 170
glVertex2f(xs[10],ys[8]);// yl = 560, mn = 250
glVertex2f(hs[9],ws[7]);// ad = 600, eke = 250
glEnd();
glBegin(GL_QUADS);
glColor4ub(0,255,0,255);
glVertex2f(xs[11],ys[9]);// jdf = 500, gk = 70
glVertex2f(hs[10],ws[8]);// yiu = 520, fj = 70
glVertex2f(xs[12],ys[10]);// to = 520, ks = 0
glVertex2f(hs[11],ws[9]);// wnf = 500, sls = 0
glEnd();
if ((xpers >= 530) && (ypers == 0))
{
lvl5 = false;
}
T = 0;
while (checkCollision(xpers,ypers,wpers,hpers,xs[T],ys[T],hs[T],ws[T]) == true)
{
if ((ypers + hpers > ys[T]) || (ypers < ws[T]))
{
ypers = -ypers;
if (up == true)
{
int x = 1;
while (x == 1)
{
ypers -= 150;
}
}
}
if ((xpers + wpers > xs[T]) && (xpers < hs[T]))
{
xpers = -xpers;
}
T++;
}
}
glPopMatrix();
SDL_GL_SwapBuffers();
SDL_Delay(1);
}
}
std::cin.get();
SDL_Quit();
return 0;
}