void initDefaultBall(Ball *ball) { ball->x = FPMAKE((DEFAULT_COURT_WIDTH/2 - DEFAULT_BALL_WIDTH/2),0); ball->y = FPMAKE((DEFAULT_COURT_HEIGHT/2 - DEFAULT_BALL_HEIGHT/2),0); ball->xVel = 0; ball->yVel = 0; ball->height = FPMAKE(DEFAULT_BALL_HEIGHT,0); ball->width = FPMAKE(DEFAULT_BALL_WIDTH,0); }
void assembleDefaultPongGame() { gPngGame.ball = &ball; gPngGame.paddleOne = &paddleOne; gPngGame.paddleTwo = &paddleTwo; gPngGame.court = &court; gPngGame.useGravity = 1; gPngGame.gravity = 1; gPngGame.epsilon = FPMAKE(2,8); }
void initDefaultCourt(Court *court) { court->width = FPMAKE(DEFAULT_COURT_WIDTH,0); court->height = FPMAKE(DEFAULT_COURT_HEIGHT,0); court->x = FPMAKE(SCREEN_START_X, 0); court->y = FPMAKE(SCREEN_START_Y, 0); court->leftAccAreaWidth = FPMAKE(DEFAULT_LEFT_ACCAREA_WIDTH,0); court->leftAccAreaX = FPMAKE(DEFAULT_LEFT_ACCAREA_X,0); court->rightAccAreaWidth = FPMAKE(DEFAULT_RIGHT_ACCAREA_WIDTH,0); court->rightAccAreaX = FPMAKE(DEFAULT_RIGHT_ACCAREA_X,0); }
void initDefaultPaddleTwo(Paddle *paddle2) { paddle2->x = FPMAKE(DEFAULT_RIGHT_ACCAREA_X,0); paddle2->y = FPMAKE(DEFAULT_COURT_HEIGHT/2,0); paddle2->xVel = FPMAKE(0,0); paddle2->yVel = FPMAKE(0,0); paddle2->height = FPMAKE(DEFAULT_PADDLE_HEIGHT,0); paddle2->width = FPMAKE(DEFAULT_PADDLE_WIDTH,0); }
void initDefaultPaddleOne(Paddle *paddle1) { paddle1->x = FPMAKE(DEFAULT_LEFT_ACCAREA_WIDTH,0); paddle1->y = FPMAKE(DEFAULT_COURT_HEIGHT/2,0); paddle1->xVel = FPMAKE(0,0); paddle1->yVel = FPMAKE(0,0); paddle1->height = FPMAKE(DEFAULT_PADDLE_HEIGHT,0); paddle1->width = FPMAKE(DEFAULT_PADDLE_WIDTH,0); }
#include <stdlib.h> #include <time.h> static int firstTimeRandom = 1; GravityDirection randomGravityDirection() { int randomNumber; if(firstTimeRandom) { srand(time(NULL)); firstTimeRandom = 0; } randomNumber = rand() % 9; return (GravityDirection)randomNumber; } const GPINT gravityStepPositive = FPMAKE(0,1); const GPINT gravityStepNegative = -1 * FPMAKE(0,1); void updateGravity(GPngGame *gPngGame) { switch(gPngGame->gravityDirection) { case noGravity: gPngGame->xGravity = 0; gPngGame->yGravity = 0; break; case northGravity: gPngGame->xGravity = 0; gPngGame->yGravity = gravityStepNegative; break; case northEastGravity: gPngGame->xGravity = gravityStepPositive; gPngGame->yGravity = gravityStepNegative; break;
void initGameObjects(StartState startState) { initDefaultBall(&ball); initDefaultCourt(&court); initDefaultPaddleOne(&paddleOne); initDefaultPaddleTwo(&paddleTwo); gPngGame.isPlayerOneHuman = 0; gPngGame.isPlayerTwoHuman = 0; switch(startState) { case straightLeft: paddleTwo.x = FPMAKE(280,0); paddleTwo.y = FPMAKE(FPINT(gPngGame.court->y), 0); setBallXVel(-1*FPMAKE(0, 8), &ball); break; case straightLeftPaddleTopCollision: paddleTwo.x = FPMAKE(280,0); paddleTwo.y = FPMAKE(FPINT(gPngGame.court->y), 0); paddleOne.x = FPMAKE(35,0); paddleOne.y = FPMAKE(110,0); paddleOne.xVel = FPMAKE(0,0); paddleOne.yVel = FPMAKE(-1,0); ball.x = FPMAKE(45,0); ball.y = FPMAKE(100-DEFAULT_BALL_HEIGHT-8,0); ball.xVel = FPMAKE(-1,0); ball.yVel = FPMAKE(0,0); setBallXVel(-1*FPMAKE(0, 8), &ball); break; case straightLeftPaddleBottomCollision: paddleTwo.x = FPMAKE(280,0); paddleTwo.y = FPMAKE(FPINT(gPngGame.court->y), 0); paddleOne.x = FPMAKE(35,0); paddleOne.y = FPMAKE(90,0); paddleOne.xVel = FPMAKE(0,0); paddleOne.yVel = FPMAKE(1,0); ball.x = FPMAKE(45,0); ball.y = FPMAKE(100+DEFAULT_PADDLE_HEIGHT+8,0); ball.xVel = FPMAKE(-1,0); ball.yVel = FPMAKE(0,0); setBallXVel(-1*FPMAKE(0, 8), &ball); break; case straightLeftPaddleNonTopCollision: paddleOne.x = FPMAKE(24,0); paddleOne.y = FPMAKE(100,0); paddleOne.yVel = 0; paddleOne.xVel = MAX_PADDLE_SPEED_X; ball.x = FPMAKE(34+DEFAULT_PADDLE_WIDTH,0); ball.y = FPMAKE(100-DEFAULT_BALL_HEIGHT+1, 0); ball.xVel = MIN_BALL_SPEED_X; ball.yVel = 0; break; case straightRightNonTopCollision: paddleOne.x = FPMAKE(344-paddleTwo.width,0); paddleTwo.y = FPMAKE(100,0); paddleTwo.yVel = 0; paddleTwo.xVel = MIN_PADDLE_SPEED_X; ball.x = FPMAKE(334-ball.width,0); ball.y = FPMAKE(100-DEFAULT_BALL_HEIGHT+1, 0); ball.xVel = MAX_BALL_SPEED_X; ball.yVel = 0; break; case straightRightPaddleTopCollision: paddleTwo.x = FPMAKE(280,0); paddleTwo.y = FPMAKE(110, 0); paddleTwo.xVel = FPMAKE(0,0); paddleTwo.yVel = FPMAKE(-1,0); paddleOne.x = FPMAKE(35,0); paddleOne.y = FPMAKE(110,0); ball.x = FPMAKE(270,0); ball.y = FPMAKE(100-DEFAULT_BALL_HEIGHT-8,0); ball.xVel = FPMAKE(1,0); ball.yVel = FPMAKE(0,0); setBallXVel(FPMAKE(0, 8), &ball); break; case straightRightPaddleBottomCollision: paddleTwo.x = FPMAKE(280,0); paddleTwo.y = FPMAKE(90,0); paddleTwo.xVel = FPMAKE(0,0); paddleTwo.yVel = FPMAKE(1,0); paddleOne.x = FPMAKE(35,0); paddleOne.y = FPMAKE(90,0); ball.x = FPMAKE(270,0); ball.y = FPMAKE(100+DEFAULT_PADDLE_HEIGHT+8,0); ball.xVel = FPMAKE(1,0); ball.yVel = FPMAKE(0,0); setBallXVel(FPMAKE(0, 8), &ball); break; case straightRightPaddleRearCollision: paddleOne.x = FPMAKE(DEFAULT_LEFT_ACCAREA_X + DEFAULT_LEFT_ACCAREA_WIDTH - DEFAULT_PADDLE_WIDTH, 0); paddleOne.y = FPMAKE(100,0); ball.x = FPMAKE(FPINT(paddleOne.x) - DEFAULT_BALL_WIDTH - 5, 0); ball.y = FPMAKE(100,0); setBallXVel(-1*FPMAKE(0, 6), &ball); setPaddleXVel(FPMAKE(-1,0), &paddleOne); break; case straightLeftPaddleRearCollision: paddleTwo.x = FPMAKE(DEFAULT_RIGHT_ACCAREA_X, 0); paddleTwo.y = FPMAKE(100,0); ball.x = FPMAKE(FPINT(paddleTwo.x) + DEFAULT_BALL_WIDTH + 5, 0); ball.y = FPMAKE(100,0); setBallXVel(FPMAKE(0, 6), &ball); setPaddleXVel(FPMAKE(1,0), &paddleTwo); break; case noStartState: gPngGame.isPlayerOneHuman = 1; gPngGame.isPlayerTwoHuman = 0; break; default: printf("default - please provide a value"); break; } assembleDefaultPongGame(); }