Esempio n. 1
0
void LittleSnake::setGameStateToPlayAgain()
{
    log("Game State: PLAYAGAIN");
    gameState = PLAYAGAIN;
    updateSnakeFace(snakePlayAgainFace);
    rotateSnakeHead(snakeDirection);
    renderSnake(0);

    menu->setVisible(true);
}
Esempio n. 2
0
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);
}
Esempio n. 3
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);
}
Esempio n. 4
0
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);
}