c++ opengl 사각형 피하기

ars518의 이미지

간단한 게임을 만들고 싶어서 고민하다 글을 올려봅니다
타이머로 움직이는 사각형을 피하는 게임인데 도움 구해봅니다
vs2015 C++ 환경입니다.

#include
#include
#include
#include
#include

float vel = 10.0f;
float vel2 = 10.0f;
float vel3 = 10.0f;
float X, C, D = 0.0f;
float A, B;

void MyDisplay() {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON); // 1번째 장애물
glColor3f(1.0, 1.0, 1.0);
glVertex3f(-100.0f + X, 80.0f, 0.0f);
glVertex3f(-90.0f + X, 80.0f, 0.0f);
glVertex3f(-90.0f + X, 70.0f, 0.0f);
glVertex3f(-100.0f + X, 70.0f, 0.0f);
glEnd();

glBegin(GL_POLYGON); // 두번째 장애물
glColor3f(1.0, 0.0, 1.0);
glVertex3f(-100.0f + C, 40.0f, 0.0f);
glVertex3f(-80.0f + C, 40.0f, 0.0f);
glVertex3f(-80.0f + C, 30.0f, 0.0f);
glVertex3f(-100.0f + C, 30.0f, 0.0f);
glEnd();

glBegin(GL_POLYGON); // 세번째 장애물
glColor3f(0.0, 0.0, 0.1);
glColor3f(0.0, 1.0, 0.0);
glVertex3f(-10.0f + D, 10.0f, 0.0f);
glVertex3f(10.0f + D, 10.0f, 0.0f);
glVertex3f(10.0f + D, -10.0f, 0.0f);
glVertex3f(-10.0f + D, -10.0f, 0.0f);
glEnd();

glBegin(GL_POLYGON); // 닿으면 끝
glColor3f(1.0, 1.0, 0.0);
glVertex3f(100.0f, 100.0f, 0.0f);
glVertex3f(-100.0f, 100.0f, 0.0f);
glVertex3f(-100.0f, 90.0f, 0.0f);
glVertex3f(100.0f, 90.0f, 0.0f);
glEnd();

glBegin(GL_TRIANGLES); //비행기
glVertex3f(0.0f + B, -95.0f+A , 0.0f);
glVertex3f(-5.0f + B, -100.0f + A, 0.0f);
glVertex3f(5.0f + B, -100.0f + A, 0.0f);
glEnd();
glFlush();
}
void MyReshape(int NewWidth, int NewHeight) {
GLfloat nRange = 100.0f;
if (NewHeight == 0) NewHeight = 1;
glViewport(0, 0, NewWidth, NewHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (NewWidth <= NewHeight)
glOrtho(-nRange, nRange, -nRange*NewHeight / NewWidth,
nRange*NewHeight / NewWidth, -nRange, nRange);
else
glOrtho(-nRange*NewWidth / NewHeight, nRange*NewWidth / NewHeight, -nRange,
nRange, -nRange, nRange);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

void MyKeyboard(unsigned char KeyPressed, int X, int Y) {
}

void MySpecial(int key, int X, int Y) {
if (A==185) {
exit(0);
}
if (key == GLUT_KEY_UP) {
A += 5.0f;
}
if (key == GLUT_KEY_DOWN) {
A -= 5.0f;
}
if (key == GLUT_KEY_LEFT) {
B -= 5.0f;
}
if (key == GLUT_KEY_RIGHT) {
B += 5.0f;
}
}

void MyTimer(int Value) {
D = D + vel;
if ((D > 80 && vel > 0) || (D < -80 && vel <= 0)) vel *= -1;
glutPostRedisplay();
glutTimerFunc(40, MyTimer, 1); //세번째 장애물 타이머
}
void MyTimer2(int Value) {
X = X + vel2;
if ((X > 180 && vel2 > 0) || (X < 10 && vel2 < 0))
vel2 *= -1;

C = C + vel3;
if ((C > 170 && vel3 > 0) || (C < 10 && vel3 < 0))
vel3 *= -1;

glutPostRedisplay();
glutTimerFunc(40, MyTimer2, 2);
}
void initFunc() {
glClearColor(0.0, 0.0, 0.0, 1.0);
glColor3f(0.0, 0.0, 0.0);

}

int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowSize(500, 500);
glutInitWindowPosition(0, 0);
glutCreateWindow("네모피하기");
initFunc();
glutDisplayFunc(MyDisplay);
glutReshapeFunc(MyReshape);
glutKeyboardFunc(MyKeyboard);
glutSpecialFunc(MySpecial);
glutTimerFunc(40, MyTimer, 1);
glutTimerFunc(40, MyTimer2, 2);
glutMainLoop();
return 0;
}

문제는 움직이는 오브젝트들에 닿으면 게임이 끝나게 하고싶은데 아무리 생각해봐도 좋은수가 안떠오르더군요
도움을 구해봅니다 ㅠ

shint의 이미지

OpenGL Game Programming 으로 찾아보시면. 여러가지 있네요.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.