void LittleSnake::setGameStateToPlayAgain() { log("Game State: PLAYAGAIN"); gameState = PLAYAGAIN; updateSnakeFace(snakePlayAgainFace); rotateSnakeHead(snakeDirection); renderSnake(0); menu->setVisible(true); }
void LittleSnake::initializeSnake() { snakeDirection = RIGHT; snakeNewDirection = RIGHT; snakeBodies = std::vector<SpriteBody*>(); snakeHeadBody = new SpriteBody(); snakeHeadBody->row = MAX_SCREEN_Y / 2; snakeHeadBody->col = MAX_SCREEN_X / 2; updateSnakeFace(snakeStandardFace); rotateSnakeHead(snakeDirection); for (int i = 0; i < initialSnakeBodyCount; ++i) { addSnakeBodySpriteBody(snakeHeadBody->row, snakeHeadBody->col - (i+1)); } renderSnake(0); }
void SRM_Render(Scene *scene) { int x, y, id; glClearColor(1.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); SMM_LoadIdentity(); glEnableVertexAttribArray(attrib_coord); glEnableVertexAttribArray(attrib_color); for(x = 0; x < SCENE_WIDTH; ++x) { for(y = 0; y < SCENE_HEIGHT; ++y) { id = SCENE_GetCell(scene, x, y); renderCell(id, x, y); } } renderItems(scene); renderSnake(scene); glDisableVertexAttribArray(attrib_coord); glDisableVertexAttribArray(attrib_color); SDL_GL_SwapWindow(window); }
void LittleSnake::updateSnake(float dt) { dtCount += dt; if (dtCount >= snakeMoveInterval) { dtCount -= snakeMoveInterval; } else { return; } if (gameState != PLAYING) return; int prevBodyRow = snakeHeadBody->row; int prevBodyCol = snakeHeadBody->col; snakeDirection = snakeNewDirection; if (snakeDirection == RIGHT) { snakeHeadBody->col++; } else if (snakeDirection == LEFT) { snakeHeadBody->col--; } else if (snakeDirection == UP) { snakeHeadBody->row++; } else { snakeHeadBody->row--; } if (isSnakeDead()) { log("Game State: DEAD"); updateSnakeFace(snakeDeadFace); rotateSnakeHead(snakeDirection); snakeHeadBody->row = prevBodyRow; snakeHeadBody->col = prevBodyCol; renderSnake(dt); CocosDenshion::SimpleAudioEngine::getInstance()->playEffect("audio/defeat.wav"); showGameFinishLabel("Defeat", Color3B(235, 66, 36)); gameState = DEAD; setGameStateToPlayAgainWithDelay(); return; } for (auto snakeBody : snakeBodies) { int tempRow = snakeBody->row; int tempCol = snakeBody->col; snakeBody->row = prevBodyRow; snakeBody->col = prevBodyCol; prevBodyRow = tempRow; prevBodyCol = tempCol; } if (isSnakeEatingRaspberry()) { log("Snake is eating raspberry"); raspberryBody->sprite->setVisible(false); raspberryAteCount++; updateSnakeFace(snakeYummyFace); rotateSnakeHead(snakeDirection); SpriteBody *lastSnakeBody = snakeBodies.back(); addSnakeBodySpriteBody(lastSnakeBody->row, lastSnakeBody->col); if (raspberryAteCount >= raspberryToEatCount) { log("Game State: WIN"); renderSnake(dt); CocosDenshion::SimpleAudioEngine::getInstance()->playEffect("audio/victory.wav"); showGameFinishLabel("Victory", Color3B(86, 116, 185)); gameState = WIN; setGameStateToPlayAgainWithDelay(); return; } CocosDenshion::SimpleAudioEngine::getInstance()->playEffect("audio/eat_raspberry.wav"); spawnRaspberry(); } else { updateSnakeFace(snakeStandardFace); rotateSnakeHead(snakeDirection); } renderSnake(dt); }