3D 아키텍처응용 기말고사 - wonjun7572/3D-Architecture-application GitHub Wiki
기말고사
내용
엔진을 제작하고, 이용하여 게임을 제작하세요. 녹화할 영상은 게임입니다.
github에 제출되는 코드는 엔진 및 게임코드입니다.
정적라이브러리화를 통해 분리하였습니다.
OpenGLSample은 엔진 프로젝트이고 FinalTest는 게임 프로젝트입니다.
지구가 태양을 피하는 게임입니다. 태양은 위에서 아래로 떨어지게 되고 지구는 방향키를 통해 좌,우로 움직이게됩니다. (화면밖으로 나가지 못하게 범위를 정해줬습니다.)
playsound 함수를 통해 배경음악을 넣어줬습니다.
태양과 지구가 충돌하게 되면 게임이 끝나고 지구멸망이라는 글이 뜨게됩니다. 'R'버튼을 눌러 다시 시작하면 됩니다.
opengl 충돌체크는 "https://stackoverflow.com/questions/17674722/check-collision-of-objects-c-sharp-3d-x-y-z" 을 활용하여 만들었습니다.
충돌체크 파트
bool CheckCollision(CompositeObject* one, CompositeObject* two)
{
bool collisionX = one->position.x + 1.0 >= (two->position.x) / 2 && (two->position.x) / 2 + 1 >= one->position.x;
bool collisionY = one->position.y + 1.0 >= (two->position.y) / 2 && (two->position.y) / 2 + 1 >= one->position.y;
bool collisionZ = one->position.z + 1.0 >= (two->position.z) / 2 && (two->position.z) / 2 + 1 >= one->position.z;
return collisionX && collisionY && collisionZ;
}
사운드 파트
#pragma comment(lib, "Winmm.lib")
PlaySound(TEXT("InLakeBGM.wav"), NULL, SND_ASYNC | SND_FILENAME | SND_LOOP);
좌,우 움직이는 파트
if (glfwGetKey(renderer->window, GLFW_KEY_RIGHT) == GLFW_PRESS) {
if (position.x < 12.0f)
{
position.x += 0.15f;
}
}
if (glfwGetKey(renderer->window, GLFW_KEY_LEFT) == GLFW_PRESS) {
if (position.x > -12.0f)
{
position.x -= 0.15f;
}
}
메테오 떨어지는 부분 x는 랜덤으로 생성되고 y는 아래로 떨어지는 파트
position.y -= speed;
if (position.y < -25.0f)
{
int random = rand() % 2 + 1;
float randomPos = rand() / (float)RAND_MAX * (40.0f);
speed = rand() / (float)RAND_MAX * (0.01f) + (0.1f);
if (random == 1)
{
this->setPosition(randomPos, 60.0f, 0);
}
else if (random == 2)
{
this->setPosition(-(randomPos), 20.0f, 0);
}
}