/**************************************************************************//** * @author Paul Blasi * * @par Description: * Stores the state of the pressed key and does an initial update of the left * player. Also handles the key presses for space, which pauses, escape, which * exits the game, and +/-, which incresses and decreases the speed of the ball * respectively. * * @param[in] key - the key that was pressed * @param[in] x - the x position of the mouse when the key was pressed * @param[in] y - the y position of the mouse when the key was pressed * *****************************************************************************/ void Keyboard(unsigned char key, int x, int y) { KEYSTATE[key] = true; if ((KEYSTATE['w'] || KEYSTATE['W']) && !PAUSED) { LEFT_PLAYER.ChangeYSpeed(PADDLE_INC); } if ((KEYSTATE['a'] || KEYSTATE['A']) && !PAUSED) { LEFT_PLAYER.ChangeXSpeed((-1)*PADDLE_INC); } if ((KEYSTATE['s'] || KEYSTATE['S']) && !PAUSED) { LEFT_PLAYER.ChangeYSpeed(-1 * PADDLE_INC); } if ((KEYSTATE['d'] || KEYSTATE['D']) && !PAUSED) { LEFT_PLAYER.ChangeXSpeed(PADDLE_INC); } if (KEYSTATE['+'] && !PAUSED) { BALL.IncreaseMinVelocity(); } if (KEYSTATE['-'] && !PAUSED) { BALL.DecreaseMinVelocity(); } if (KEYSTATE[' ']) { PAUSED = !PAUSED; if (PAUSED) { glutPostRedisplay(); } else { glutTimerFunc(30, Animate, 0); } } if (KEYSTATE[ESCAPE_KEY]) { glutExit(); } }
/**************************************************************************//** * @author Paul Blasi * * @par Description: * Stores the state of the special key that was released. * * @param[in] key - the special key that was pressed * @param[in] x - the x position of the mouse when the key was pressed * @param[in] y - the y position of the mouse when the key was pressed * *****************************************************************************/ void SpecialKeys(int key, int x, int y) { SPECKEYSTATE[key] = true; if (SPECKEYSTATE[GLUT_KEY_LEFT] && !PAUSED) { RIGHT_PLAYER.ChangeXSpeed(-1 * PADDLE_INC); } if (SPECKEYSTATE[GLUT_KEY_RIGHT] && !PAUSED) { RIGHT_PLAYER.ChangeXSpeed(PADDLE_INC); } if (SPECKEYSTATE[GLUT_KEY_UP] && !PAUSED) { RIGHT_PLAYER.ChangeYSpeed(PADDLE_INC); } if (SPECKEYSTATE[GLUT_KEY_DOWN] && !PAUSED) { RIGHT_PLAYER.ChangeYSpeed(-1 * PADDLE_INC); } }
/**************************************************************************//** * @author Paul Blasi * * @par Description: * Updates each of the paddles x and y speeds every 1/3rd of a second * *****************************************************************************/ void UpdatePaddles() { if ((KEYSTATE['w'] || KEYSTATE['W']) && !PAUSED) { LEFT_PLAYER.ChangeYSpeed(PADDLE_INC); } else if (LEFT_PLAYER.Y_Vel() > 0) { if (LEFT_PLAYER.Y_Vel() < PADDLE_DEC) { LEFT_PLAYER.ResetYSpeed(); } else { LEFT_PLAYER.ChangeYSpeed(-1 * PADDLE_DEC); } } if ((KEYSTATE['a'] || KEYSTATE['A']) && !PAUSED) { LEFT_PLAYER.ChangeXSpeed((-1)*PADDLE_INC); } else if (LEFT_PLAYER.X_Vel() < 0) { if (LEFT_PLAYER.X_Vel() > -1 * PADDLE_DEC) { LEFT_PLAYER.ResetXSpeed(); } else { LEFT_PLAYER.ChangeXSpeed(PADDLE_DEC); } } if ((KEYSTATE['s'] || KEYSTATE['S']) && !PAUSED) { LEFT_PLAYER.ChangeYSpeed(-1 * PADDLE_INC); } else if (LEFT_PLAYER.Y_Vel() < 0) { if (LEFT_PLAYER.Y_Vel() > -1 * PADDLE_DEC) { LEFT_PLAYER.ResetYSpeed(); } else { LEFT_PLAYER.ChangeYSpeed(PADDLE_DEC); } } if ((KEYSTATE['d'] || KEYSTATE['D']) && !PAUSED) { LEFT_PLAYER.ChangeXSpeed(PADDLE_INC); } else if (LEFT_PLAYER.X_Vel() > 0) { if (LEFT_PLAYER.X_Vel() < PADDLE_DEC) { LEFT_PLAYER.ResetXSpeed(); } else { LEFT_PLAYER.ChangeXSpeed(-1 * PADDLE_DEC); } } if (SPECKEYSTATE[GLUT_KEY_LEFT] && !PAUSED) { RIGHT_PLAYER.ChangeXSpeed(-1 * PADDLE_INC); } else if (RIGHT_PLAYER.X_Vel() < 0) { if (RIGHT_PLAYER.X_Vel() > -1 * PADDLE_DEC) { RIGHT_PLAYER.ResetXSpeed(); } else { RIGHT_PLAYER.ChangeXSpeed(PADDLE_DEC); } } if (SPECKEYSTATE[GLUT_KEY_RIGHT] && !PAUSED) { RIGHT_PLAYER.ChangeXSpeed(PADDLE_INC); } else if (RIGHT_PLAYER.X_Vel() > 0) { if (RIGHT_PLAYER.X_Vel() < PADDLE_DEC) { RIGHT_PLAYER.ResetXSpeed(); } else { RIGHT_PLAYER.ChangeXSpeed(-1 * PADDLE_DEC); } } if (SPECKEYSTATE[GLUT_KEY_UP] && !PAUSED) { RIGHT_PLAYER.ChangeYSpeed(PADDLE_INC); } else if (RIGHT_PLAYER.Y_Vel() > 0) { if (RIGHT_PLAYER.Y_Vel() < PADDLE_DEC) { RIGHT_PLAYER.ResetYSpeed(); } else { RIGHT_PLAYER.ChangeYSpeed(-1 * PADDLE_DEC); } } if (SPECKEYSTATE[GLUT_KEY_DOWN] && !PAUSED) { RIGHT_PLAYER.ChangeYSpeed(-1 * PADDLE_INC); } else if (RIGHT_PLAYER.Y_Vel() < 0) { if (RIGHT_PLAYER.Y_Vel() > -1 * PADDLE_DEC) { RIGHT_PLAYER.ResetYSpeed(); } else { RIGHT_PLAYER.ChangeYSpeed(PADDLE_DEC); } } }