Esempio n. 1
0
void CDoubleLinkedList::addNodeBefore( CNode * pNode2, CNodeObject * pObject )
{
  CNode * pNode1 = pNode2->getPrevNode();
    
  if ( NULL == pNode1 ) {
    // There is no nodes before this node
    addNodeHead( pObject ); 	
  }
  else {
    // Add the node between the two
    insertNode( pNode1, pNode2, pObject );		 
  }
}
Esempio n. 2
0
void startSnake(Snake* snake,SDL_Rect* display,SDL_Point* applet) {
    snakeContext* context = (snakeContext*)malloc(sizeof(*context));

    context->snake = snake;
    context->display = display;
    context->applet = applet;
    snake->delay = 100;

    snake->timer = SDL_AddTimer(snake->delay,(SDL_TimerCallback)&runSnake,context);

    Mix_PlayMusic(snake->music,-1);

    //Agrego nodos a la seriente hasta conseguir los buscados
    for (int i = 0; i < snakeInitialLength-1; ++i)
        addNodeHead(snake);
}
Esempio n. 3
0
void moveSnake(Snake* snake,SDL_Rect* Display,SDL_Point* Applet) {
    if(snake && Display && Applet) {
        SDL_Point nextPos;
        snakeNode* node = snake->tail;

        if(!(snake->vecDirector.x || snake->vecDirector.y || snake->speed)) {
            printf("Snake sin velocidad o direccion\n");
            return;
        }
        //Calculo la nueva posicion de la cabeza de la serpiente
        nextPos.x = node->pos.x+snake->vecDirector.x*snake->speed;
        nextPos.y = node->pos.y+snake->vecDirector.y*snake->speed;

        //Testeo la colision con las paredes del escenario
        if(nextPos.x < 0 || nextPos.y < 0
                || nextPos.x > Display->w || nextPos.y > Display->h
                || snake->field.buff[(nextPos.x/snakeSize)+(nextPos.y/snakeSize)*snake->field.s.w]) {
            SDL_Event e;
            e.type = gameOverEventID;
            SDL_PushEvent(&e);
        } else {
            moveHeadToTail(snake);
            SDL_Point* pos = &snake->tail->pos;
            //Muevo la posicion de el nodo que va a ser la cabea
            snake->field.buff[(pos->x/snakeSize)+(pos->y/snakeSize)*snake->field.s.w]--;
            *pos = nextPos;
            snake->field.buff[(pos->x/snakeSize)+(pos->y/snakeSize)*snake->field.s.w]++;

            //Testeo la colision con la manzana
            if(Applet->x == nextPos.x && nextPos.y == Applet->y) {
                //Si me como una manzana, crezco y tiro otra
                for(int i = 0; i<4; i++)
                    addNodeHead(snake);
                launchApplet(Applet,Display);
                if(!(snake->nAppletMeals%5) && snake->delay >10)
                    snake->delay -= snake->delay/10;
                //Aumento el contador de manzanas comidas
                snake->nAppletMeals++;
                printf("Manzanas comidas %u\n",snake->nAppletMeals);
            }
        }

    }
}
Esempio n. 4
0
void launchSnake(drawableSnake* drawable,SDL_Rect* display) {
    if(drawable) {
        MapField* field = &drawable->snake.field;
        addNodeHead(&drawable->snake);
        field->s.w = display->w/snakeSize+1;
        field->s.h = display->h/snakeSize+1;
        if(!field->buff)
            field->buff = (byte*)malloc(sizeof(byte)*field->s.w*field->s.h);
        memset(field->buff,false,sizeof(bool)*field->s.w*field->s.h);

        SDL_Point* pos = &drawable->snake.head->pos;
        //Pongo centrado a la serpiente
        pos->x = display->w/2-snakeSize;
        pos->y = display->h/2-snakeSize;
        //Alineo la serpiente a multiplos del snakeSize
        pos->x -= pos->x%snakeSize;
        pos->y -= pos->y%snakeSize;

        //Pongo la posicion de la serpiente
        field->buff[(pos->x/snakeSize)+(pos->y/snakeSize)*field->s.w]++;

    }
}