Bug Affichage Pong ;( Help pls

Daryua -  
 Utilisateur anonyme -
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL_image.h>

#include "jeu.h"
#include "constantes.h"

void jouer(SDL_Surface *ecran){
    int contin = 1, sensLargeur = 0, sensHauteur = 0;
    SDL_Surface *ping[2] = {NULL}, *ball = NULL;
    SDL_Rect positionPing[2], positionBall;
    SDL_Event event;
    int tempsActuel = 0, tempsPrecedent = 0;
    tempsActuel = SDL_GetTicks();

    positionPing[0].x = 0;
    positionPing[1].x = LARGEUR_FENETRE - LARGEUR_PING;
    positionPing[0].y = 0;
    positionPing[1].y = (HAUTEUR_FENETRE/2) - (HAUTEUR_PING/2);
    positionBall.x = (LARGEUR_FENETRE/2) - (LARGEUR_BALL/2);
    positionBall.y = (HAUTEUR_FENETRE/2) - (HAUTEUR_BALL/2);

    ping[0] = IMG_Load("j1.png");
    ping[1] = IMG_Load("j2.png");
    ball = IMG_Load("balle.png");

    while(contin != 0){
        SDL_PollEvent(&event);
        switch(event.type){
        case SDL_QUIT:
            contin = 0;
            break;
        case SDL_KEYDOWN:

                switch(event.key.keysym.sym){
                case SDLK_ESCAPE:
                    contin = 0;
                    break;
                case SDLK_UP:
                    colision(&positionPing[0], HAUT);
                    break;
                case SDLK_DOWN:
                    colision(&positionPing[0], BAS);
                    break;
                }
        break;
        }

        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
        mouvementBall(&positionBall, &positionPing[0], &positionPing[1], &sensLargeur, &sensHauteur);
        SDL_BlitSurface(ball, NULL, ecran, &positionBall);
        SDL_BlitSurface(ping[0], NULL, ecran, &positionPing[0]);
        SDL_BlitSurface(ping[1], NULL, ecran, &positionPing[1]);
        deplacementOrdi(positionBall, &positionPing[1], sensLargeur, sensHauteur);
        SDL_Flip(ecran);
    }
}

void colision(SDL_Rect *pos, int direction){
    switch(direction){
    case HAUT:
        if(pos->y < 0)
            break;
        pos->y--;
        break;
    case BAS:
        if(pos->y > (HAUTEUR_FENETRE - HAUTEUR_PING))
            break;
        pos->y++;
        break;

    }
}

void mouvementBall(SDL_Rect *pos, SDL_Rect *ping1, SDL_Rect *ping2, int *sensLargeur, int *sensHauteur){
    int tempsA = 0, tempsP = 0;
    tempsA = SDL_GetTicks();
    if(tempsA - tempsP > 30){
        tempsP = tempsA;

        sensBallLargeur(sensLargeur, ping1, ping2, *pos, sensHauteur);
        sensBallHauteur(*pos, sensHauteur);

        switch(*sensLargeur){
        case 0:
            switch(*sensHauteur){
            case 0:
                pos->y--; //haut a gauche
                break;
            case 1:
                pos->y++; // bas a gauche
                break;
            }
            pos->x--;
            break;
        case 1:
            switch(*sensHauteur){
            case 0:
                pos->y--; //haut a droite
                break;
            case 1:
                pos->y++; // bas a droite
                break;
            }
            pos->x++;
            break;
        }
    }
}

void sensBallLargeur(int *sens, SDL_Rect *ping1, SDL_Rect *ping2, SDL_Rect pos, int *sensHauteur){

    int yballDebut = pos.y + 1;
    int yballFin = pos.y + HAUTEUR_BALL - 1;
    int yPingDebut = ping1->y + 1;
    int yPingFin = ping1->y + HAUTEUR_PING -1;
    int yPing2Debut = ping2->y + 1;
    int yPing2Fin = ping2->y + HAUTEUR_PING -1;

    if(((yballDebut >= yPingDebut && yballDebut <= yPingFin) || (yballFin >= yPingDebut && yballFin <= yPingFin)) && pos.x < ping1->x + LARGEUR_PING){
        *sens = 1;

    }
    if(((yballDebut >= yPing2Debut && yballDebut <= yPing2Fin) || (yballFin >= yPing2Debut && yballFin <= yPing2Fin)) && pos.x > ping2->x - LARGEUR_PING){
        *sens = 0;
    }

}
void sensBallHauteur(SDL_Rect pos, int *sensHauteur){
    if(pos.y <= 0){
        *sensHauteur = 1;
    }
    if(pos.y >= HAUTEUR_FENETRE){
        *sensHauteur = 0;
    }

}

void deplacementOrdi(SDL_Rect pos, SDL_Rect *positionPing2, int sensLargeur, int sensHauteur){
    int i = 0;
    if(sensLargeur == 1){
        for(i = 0; i < pos.y + (HAUTEUR_BALL /2); i++){
            if(sensHauteur == 0)
                positionPing2->y++;


            if(sensHauteur == 1)
                positionPing2->y++;

        }

    }
}


J'ai un probleme avec ce code, quand je le lance, tout fonctionne parfaitement mais (il faut toujours un mais) la raquette de l'IA bug quand elle change de position (par bug j'entends bug d'affichage, l'image ne s'affiche qu'aprés avoir fixé une possition) Et pour un rendu plus fluide j'aimerais bien que l'affichage soit fluide et non aprés avoir fixé la position ..

1 réponse

Utilisateur anonyme
 
.



--
0