int main(int argc, char *argv[]) { Setup(); bool done = false; SDL_Event event; PreProcesses(); const Uint8* keys = SDL_GetKeyboardState(NULL); Paddle p1(-0.9); Paddle p2(0.9); float angle[] = { 45, 135, 225, 315 }; int choice = floor(rand() % 4); Ball ball(0.0005, angle[choice]); GLuint wins = LoadTexture("wins.png", GL_RGBA); while (!done) { while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT || event.type == SDL_WINDOWEVENT_CLOSE) { done = true; } else if (event.type == SDL_KEYDOWN){ if (event.key.keysym.scancode == SDL_SCANCODE_SPACE){ p1.Reset(-0.9); p2.Reset(0.9); choice = floor(rand() % 4); ball.Reset(angle[choice]); } } } if (CollisionX(ball)){ ball.d_y = -ball.d_y; } if (CollisionY(ball, p1, p2)){ if (ball.x > 0){ ball.d_x = -abs(ball.d_x); } else { ball.d_x = abs(ball.d_x); } } PaddleMovement(keys, p1.y, p2.y); Update(ball); Render(p1, p2, ball, wins); SDL_GL_SwapWindow(displayWindow); } SDL_Quit(); return 0; }
void Movement(unsigned char key, int x, int y) { //Obrót zrealizowany jest jako rotacja wektora od oczu obserwatora do punktu na który patrzy wokó³ wektora wskazuj¹cego 'w górê' od obserwatora, //a nastêpnie wyliczenie nowego punktu skupienia wzroku obserwatora jako przesuniêcie punktu oczu o zrotowany wczeœniej wektor. //Przesuniêcie to translacja punktu po³o¿enia obserwatora i punktu skupienia jego wzroku o znormalizowany wektor od oczu do obserwowanego punktu //(w taki sposób modu³ tego wektora nie ulega zmianie). glm::vec4 vrot; glm::vec3 move; int i = 1, j = 1; if (key == 'a' || key == 'd' ) { vrot = glm::rotate(glm::mat4(1.0f), key == 'a' ? 3.0f : -3.0f, m_up)*glm::vec4(m_center - m_eye, 0); m_center = m_eye + glm::vec3(vrot); } else if ((key == 'w' || key == 's') && direction == 0) { move = glm::normalize(m_center - m_eye); move *= 0.2; if (key == 's')move *= -1; if (fly || !CollisionX(move, i)) { m_eye.x += move.x; m_center.x += move.x; p_i = i; } if (fly || !CollisionZ(move, j)) { m_eye.z += move.z; m_center.z += move.z; p_j = j; } if (fly) { m_eye.y += move.y; m_center.y += move.y; } } else if (key == 'c') { if (M[p_i][p_j] == 'u')Up(); else if (M[p_i][p_j] == 'd')Down(); } else if (key == 'm') { M.Show(cur_layer); printf("%d %d\n", p_i, p_j); } else if (key == 'f')fly = !fly; }