begin process at 2012 05 29 22:24:46
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Base de données

 > 

Autre

 > 

Problème sur un programme en cours


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème sur un programme en cours

samedi 14 mars 2009 à 18:41:36 | Problème sur un programme en cours

LyoNell

Bonjour tout le monde !!
Je suis en Terminal S-Si ET notre professeur d'éléctronique nous à donnez un travail à faire pendant le week-end.
Il a pris un programme de l'un des ppe de la terminal de l'anné dernière et il nous à dit de le transformer.
Le PPE qu'il avait fait était un trivial pursuit avec la SDL .
Le professeur nous à donner la parti où les joueurs lance le dé en appuyant sur espace et se deplace avec les flèches du claviers, il a mit des commentaires à coté pour nous aider mais moi je ne comprend pas.
J'avoue que je suis plutôt nul en programmations mais je me rattrape sur les connecteurs logique .. heuresement ^^ Maintenant il va falloir que je bosse le programmation.
il nous a demander de changer le programme de façon à ce qu'il ne fasse plus jouer un joueur contre un autre mais un joueur contre l'ordinateur.
Donc il faudrait que le joueur un puisse jouer normalement et que le joueur 2 lance le dé automatiquement quand c'est à lui et choisisse une direction au hasard en fonction de sa postion sur le plateau ( par exemple : si il est en bas il choisi entre gauche et droite au hasard et si il est dans le coin droite il prend au hasard entre gauche et bas.
Bref si quelqu'un pouvait m'aider se serait vraiment sympa parce que je ne comprend pas grand chose à la SDL et j'ai essayé de chercher des programmes similaires mais je n'ai pas reussi ^^.
Donc merci d'avance à tout ceux qui auront essayer de m'aider !!

Voici le programme :

#include <stdio.h>
#include <stdlib.h>
#include <SDL-1.2.13/SDL.h>
#include <SDL-1.2.13/SDL_ttf.h>
#include <time.h>
#include <string.h>
#include "jeu.h"
#include "constantes.h"
#include "textes.h"



void unJoueur(SDL_Surface *ecran, int pion1, int pion2)
{
    SDL_Surface *plateau=NULL, *pionUn=NULL, *pionDeux=NULL, *imageDe=NULL, *rectangle1=NULL, *rectangle2=NULL;
    SDL_Surface *etoileG1=NULL, *etoileD1=NULL, *etoileH1=NULL, *etoileAL1=NULL, *etoileSN1=NULL, *etoileSL1=NULL;
    SDL_Surface *etoileG2=NULL, *etoileD2=NULL, *etoileH2=NULL, *etoileAL2=NULL, *etoileSN2=NULL, *etoileSL2=NULL;
    SDL_Rect positionPlateau, positionPionUn, positionPionDeux, positionUn, positionDeux, posPlateau, positionImageDe, position;
    SDL_Rect posEtoileG1, posEtoileD1, posEtoileH1, posEtoileAL1, posEtoileSN1, posEtoileSL1;
    SDL_Rect posEtoileG2, posEtoileD2, posEtoileH2, posEtoileAL2, posEtoileSN2, posEtoileSL2;
    SDL_Event event;
    int continuer=1, joueurActuel=1, rejouer=0, nombreDe=0, camembert1[6]={0}, camembert2[6]={0};

    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));

    etoileG1=etoileD1=etoileH1=etoileAL1=etoileSN1=etoileSL1=SDL_LoadBMP("sprites/star.bmp");
    posEtoileG1.x=10; posEtoileG1.y=30;
    posEtoileD1.x=75; posEtoileD1.y=30;
    posEtoileH1.x=75; posEtoileH1.y=65;
    posEtoileAL1.x=75; posEtoileAL1.y=95;
    posEtoileSN1.x=10; posEtoileSN1.y=95;
    posEtoileSL1.x=10; posEtoileSL1.y=65;

    etoileG2=etoileD2=etoileH2=etoileAL2=etoileSN2=etoileSL2=SDL_LoadBMP("sprites/star.bmp");
    posEtoileG2.x=880; posEtoileG2.y=30;
    posEtoileD2.x=955; posEtoileD2.y=30;
    posEtoileH2.x=955; posEtoileH2.y=65;
    posEtoileAL2.x=955; posEtoileAL2.y=95;
    posEtoileSN2.x=890; posEtoileSN2.y=65;
    posEtoileSL2.x=890; posEtoileSL2.y=95;

    switch(pion1)
    {
        case VERT:
            pionUn=SDL_LoadBMP("sprites/vert.bmp"); // image du premier pion
        break;
        case BEIGE:
            pionUn=SDL_LoadBMP("sprites/beige.bmp"); // image du premier pion
        break;
        case JAUNE:
            pionUn=SDL_LoadBMP("sprites/jaune.bmp"); // image du premier pion
        break;
        case BLEU:
            pionUn=SDL_LoadBMP("sprites/bleu.bmp"); // image du premier pion
        break;
        case ORANGE:
            pionUn=SDL_LoadBMP("sprites/orange.bmp"); // image du premier pion
        break;
        case ROUGE:
            pionUn=SDL_LoadBMP("sprites/rouge.bmp"); // image du premier pion
        break;
    }
    switch(pion2)
    {
        case VERT:
            pionDeux=SDL_LoadBMP("sprites/vert.bmp"); // image du deuxieme pion
        break;
        case BEIGE:
            pionDeux=SDL_LoadBMP("sprites/beige.bmp"); // image du deuxieme pion
        break;
        case JAUNE:
            pionDeux=SDL_LoadBMP("sprites/jaune.bmp"); // image du deuxieme pion
        break;
        case BLEU:
            pionDeux=SDL_LoadBMP("sprites/bleu.bmp"); // image du deuxieme pion
        break;
        case ORANGE:
            pionDeux=SDL_LoadBMP("sprites/orange.bmp"); // image du deuxieme pion
        break;
        case ROUGE:
            pionDeux=SDL_LoadBMP("sprites/rouge.bmp"); // image du deuxieme pion
        break;
    }

    SDL_SetColorKey(pionUn, SDL_SRCCOLORKEY, SDL_MapRGB(pionUn->format, 0, 0, 255)); // transparence du premier pion*/
    SDL_SetColorKey(pionDeux, SDL_SRCCOLORKEY, SDL_MapRGB(pionDeux->format, 0, 0, 255)); // transparence du deuxième pion

    plateau=SDL_LoadBMP("plateau.bmp"); // Image du plateau
    positionPlateau.x=-23; // Position du plateau
    positionPlateau.y=-12;

    positionUn.x=5; // Placement du pion 1 au départ
    positionUn.y=8;

    positionDeux.x=17; // Placement du pion 2 au départ
    positionDeux.y=8;


    rectangle1 = SDL_LoadBMP("sprites/tab1.bmp");
    rectangle2 = SDL_LoadBMP("sprites/tab2.bmp");


    while(continuer) // Boucle principale
    {
        texteJoueur(ecran, joueurActuel); //Affiche quel joueur doit jouer
        if(joueurActuel==1)
        {
            SDL_SetAlpha(pionUn, SDL_SRCALPHA, 255);
            SDL_SetAlpha(pionDeux, SDL_SRCALPHA, 64);
        }
        else
        {
            SDL_SetAlpha(pionUn, SDL_SRCALPHA, 64);
            SDL_SetAlpha(pionDeux, SDL_SRCALPHA, 255);
        }
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_KEYDOWN :
                switch(event.key.keysym.sym)
                {
                    case SDLK_ESCAPE : // Retourne au menu principal
                        continuer=0;
                        break;
                    case SDLK_SPACE :
                        if(nombreDe==0)
                            nombreDe=(rand()%6)+1; // Nombre aléatoire entre 1 et 6 pour le dé
                        break;
                    case SDLK_UP :
                        if(joueurActuel==1 && nombreDe!=0)
                        {
                            rejouer=deplacement(ecran, pionUn, &positionUn, HAUT, nombreDe);
                            if(rejouer==0) // Si le joueur a pu se déplacer :
                            {
                                nombreDe=0; // Le dé est réinitialisé
                                rejouer=affichageQuestion(ecran, &positionUn, &camembert1); // La question est affichée
                                if(rejouer==0) // Si il n'était pas sur une case rejouer ou qu'il n'a pas bien répondu à la question, c'est au joueur 2
                                    joueurActuel=2;
                            }
                            rejouer=0;
                        }
                        else if(joueurActuel==2 && nombreDe!=0)
                        {
                            rejouer=deplacement(ecran, pionDeux, &positionDeux, HAUT, nombreDe);
                            if(rejouer==0)
                            {
                                nombreDe=0;
                                rejouer=affichageQuestion(ecran, &positionDeux, &camembert2);
                                if(rejouer==0)
                                    joueurActuel=1;
                            }
                            rejouer=0;
                        }
                        break;
                    case SDLK_DOWN :
                        if(joueurActuel==1 && nombreDe!=0)
                        {
                            rejouer=deplacement(ecran, pionUn, &positionUn, BAS, nombreDe);
                            if(rejouer==0)
                            {
                                nombreDe=0;
                                rejouer=affichageQuestion(ecran, &positionUn, &camembert1);
                                if(rejouer==0)
                                    joueurActuel=2;
                            }
                            rejouer=0;
                        }
                        else if(joueurActuel==2 && nombreDe!=0)
                        {
                            rejouer=deplacement(ecran, pionDeux, &positionDeux, BAS, nombreDe);
                            if(rejouer==0)
                            {
                                nombreDe=0;
                                rejouer=affichageQuestion(ecran, &positionDeux, &camembert2);
                                if(rejouer==0)
                                    joueurActuel=1;
                            }
                            rejouer=0;
                        }
                        break;
                    case SDLK_LEFT :
                        if(joueurActuel==1 && nombreDe!=0)
                        {
                            rejouer=deplacement(ecran, pionUn, &positionUn, GAUCHE, nombreDe);
                            if(rejouer==0)
                            {
                                nombreDe=0;
                                rejouer=affichageQuestion(ecran, &positionUn, &camembert1);
                                if(rejouer==0)
                                    joueurActuel=2;
                            }
                            rejouer=0;
                        }
                        else if(joueurActuel==2 && nombreDe!=0)
                        {
                            rejouer=deplacement(ecran, pionDeux, &positionDeux, GAUCHE, nombreDe);
                            if(rejouer==0)
                            {
                                nombreDe=0;
                                rejouer=affichageQuestion(ecran, &positionDeux, &camembert2);
                                if(rejouer==0)
                                    joueurActuel=1;
                            }
                            rejouer=0;
                        }
                        break;
                    case SDLK_RIGHT :
                        if(joueurActuel==1 && nombreDe!=0)
                        {
                            rejouer=deplacement(ecran, pionUn, &positionUn, DROITE, nombreDe);
                            if(rejouer==0)
                            {
                                nombreDe=0;
                                rejouer=affichageQuestion(ecran, &positionUn, &camembert1);
                                if(rejouer==0)
                                    joueurActuel=2;
                            }
                            rejouer=0;
                        }
                        else if(joueurActuel==2 && nombreDe!=0)
                        {
                            rejouer=deplacement(ecran, pionDeux, &positionDeux, DROITE, nombreDe);
                            if(rejouer==0)
                            {
                                nombreDe=0;
                                rejouer=affichageQuestion(ecran, &positionDeux, &camembert2);
                                if(rejouer==0)
                                    joueurActuel=1;
                            }
                            rejouer=0;
                        }
                        break;
                }
                break;
        }

        positionPionUn.x=positionUn.x * TAILLE_BLOC; // position réelle du premier pion
        positionPionUn.y=positionUn.y * TAILLE_BLOC;

        positionPionDeux.x=positionDeux.x * TAILLE_BLOC; // position réelle du deuxieme pion
        positionPionDeux.y=positionDeux.y * TAILLE_BLOC;

        if(nombreDe==1)
            imageDe=SDL_LoadBMP("sprites/face_un.bmp");
        else if(nombreDe==2)
            imageDe=SDL_LoadBMP("sprites/face_deux.bmp");
        else if(nombreDe==3)
            imageDe=SDL_LoadBMP("sprites/face_trois.bmp");
        else if(nombreDe==4)                          //Chargement des images du dé
            imageDe=SDL_LoadBMP("sprites/face_quatre.bmp");
        else if(nombreDe==5)
            imageDe=SDL_LoadBMP("sprites/face_cinq.bmp");
        else if(nombreDe==6)
            imageDe=SDL_LoadBMP("sprites/face_six.bmp");

        positionImageDe.x=11 * TAILLE_BLOC;
        positionImageDe.y=8 * TAILLE_BLOC;

        posPlateau=positionPlateau;
        SDL_BlitSurface(plateau, NULL, ecran, &posPlateau);
        SDL_BlitSurface(pionUn, NULL, ecran, &positionPionUn);
        SDL_BlitSurface(pionDeux, NULL, ecran, &positionPionDeux);
        position.x=0;
        position.y=0;
        SDL_BlitSurface(rectangle1, NULL, ecran, &position);
        position.x=LARGEUR_FENETRE-rectangle2->w;
        SDL_BlitSurface(rectangle2, NULL, ecran, &position);

        /* Camemberts du joueur 1 */
        if(camembert1[GEOGRAPHIE-1]==1)
            SDL_BlitSurface(etoileG1, NULL, ecran, &posEtoileG1);
        if(camembert1[HISTOIRE-1]==1)
            SDL_BlitSurface(etoileH1, NULL, ecran, &posEtoileH1);
        if(camembert1[DIVERTISSEMENT-1]==1)
            SDL_BlitSurface(etoileD1, NULL, ecran, &posEtoileD1);
        if(camembert1[ARTS_ET_LITTERATURE-1]==1)
            SDL_BlitSurface(etoileAL1, NULL, ecran, &posEtoileAL1);
        if(camembert1[SCIENCES_ET_NATURE-1]==1)
            SDL_BlitSurface(etoileSN1, NULL, ecran, &posEtoileSN1);
        if(camembert1[SPORTS_ET_LOISIRS-1]==1)
            SDL_BlitSurface(etoileSL1, NULL, ecran, &posEtoileSL1);

        /* Camemberts du joueur 2 */
        if(camembert2[GEOGRAPHIE-1]==1)
            SDL_BlitSurface(etoileG2, NULL, ecran, &posEtoileG2);
        if(camembert2[HISTOIRE-1]==1)
            SDL_BlitSurface(etoileH2, NULL, ecran, &posEtoileH2);
        if(camembert2[DIVERTISSEMENT-1]==1)
            SDL_BlitSurface(etoileD2, NULL, ecran, &posEtoileD2);
        if(camembert2[ARTS_ET_LITTERATURE-1]==1)
            SDL_BlitSurface(etoileAL2, NULL, ecran, &posEtoileAL2);
        if(camembert2[SCIENCES_ET_NATURE-1]==1)
            SDL_BlitSurface(etoileSN2, NULL, ecran, &posEtoileSN2);
        if(camembert2[SPORTS_ET_LOISIRS-1]==1)
            SDL_BlitSurface(etoileSL2, NULL, ecran, &posEtoileSL2);

        /* Image du dé si la valeur est différente de 0 */
        if(nombreDe!=0)
            SDL_BlitSurface(imageDe, NULL, ecran, &positionImageDe);

        SDL_Flip(ecran); // mise à jour de l'écran
    }
    SDL_FreeSurface(plateau);
    SDL_FreeSurface(pionUn);
    SDL_FreeSurface(pionDeux);
    SDL_FreeSurface(imageDe);
    SDL_FreeSurface(rectangle1);
    SDL_FreeSurface(rectangle2);
}

int deplacement(SDL_Surface *ecran, SDL_Surface *pion, SDL_Rect *positionPion, int direction, int nbrDepl)
{
    SDL_Rect positionFinalePion; // La position du dé
    int sens;
    srand(time(NULL));

        switch(direction)
        {
            case HAUT :
                sens=HAUT;
                if(positionPion->y==BAS_PLATEAU && positionPion->x!=GAUCHE_PLATEAU && positionPion->x!=DROITE_PLATEAU)
                        sens=IMMOBILE;
                for(nbrDepl; nbrDepl>0; nbrDepl--)
                {
                    if(positionPion->y==HAUT_PLATEAU)
                    {
                        if(positionPion->x==GAUCHE_PLATEAU)
                            sens=DROITE;
                        else if(positionPion->x==DROITE_PLATEAU)
                            sens=GAUCHE;
                        else if(sens==HAUT)
                            sens=IMMOBILE;
                    }
                    if(sens==HAUT)
                        positionPion->y--;
                    else if(sens==GAUCHE)
                        positionPion->x--;
                    else if(sens==DROITE)
                        positionPion->x++;
                    else if(sens==IMMOBILE)
                    {
                        nbrDepl=0;
                        return 1;
                    }
                    positionFinalePion.x=positionPion->x * TAILLE_BLOC;
                    positionFinalePion.y=positionPion->y * TAILLE_BLOC;
                    SDL_BlitSurface(pion, NULL, ecran, &positionFinalePion);
                    SDL_Flip(ecran);
                    SDL_Delay(500);
                }
                break;
            case BAS :
                sens=BAS;
                if(positionPion->y==HAUT_PLATEAU && positionPion->x!=GAUCHE_PLATEAU && positionPion->x!=DROITE_PLATEAU)
                        sens=IMMOBILE;
                for(nbrDepl; nbrDepl>0; nbrDepl--)
                {
                    if(positionPion->y==BAS_PLATEAU)
                    {
                        if(positionPion->x==GAUCHE_PLATEAU)
                            sens=DROITE;
                        else if(positionPion->x==DROITE_PLATEAU)
                            sens=GAUCHE;
                        else if(sens==BAS)
                            sens=IMMOBILE;
                    }
                    if(sens==BAS)
                        positionPion->y++;
                    else if(sens==GAUCHE)
                        positionPion->x--;
                    else if(sens==DROITE)
                        positionPion->x++;
                    else if(sens==IMMOBILE)
                    {
                        nbrDepl=0;
                        return 1;
                    }
                    positionFinalePion.x=positionPion->x * TAILLE_BLOC;
                    positionFinalePion.y=positionPion->y * TAILLE_BLOC;
                    SDL_BlitSurface(pion, NULL, ecran, &positionFinalePion);
                    SDL_Flip(ecran);
                    SDL_Delay(500);
                }
                break;
            case GAUCHE :
                sens=GAUCHE;
                if(positionPion->x==DROITE_PLATEAU && positionPion->y!=HAUT_PLATEAU && positionPion->y!=BAS_PLATEAU)
                        sens=IMMOBILE;
                for(nbrDepl; nbrDepl>0; nbrDepl--)
                {
                    if(positionPion->x==GAUCHE_PLATEAU)
                    {
                        if(positionPion->y==HAUT_PLATEAU)
                            sens=BAS;
                        else if(positionPion->y==BAS_PLATEAU)
                            sens=HAUT;
                        else if(sens==GAUCHE)
                            sens=IMMOBILE;
                    }
                    if(sens==HAUT)
                        positionPion->y--;
                    else if(sens==BAS)
                        positionPion->y++;
                    else if(sens==GAUCHE)
                        positionPion->x--;
                    else if(sens==IMMOBILE)
                    {
                        nbrDepl=0;
                        return 1;
                    }
                    positionFinalePion.x=positionPion->x * TAILLE_BLOC;
                    positionFinalePion.y=positionPion->y * TAILLE_BLOC;
                    SDL_BlitSurface(pion, NULL, ecran, &positionFinalePion);
                    SDL_Flip(ecran);
                    SDL_Delay(500);
                }
                break;
            case DROITE :
                sens=DROITE;
                if(positionPion->x==GAUCHE_PLATEAU && positionPion->y!=HAUT_PLATEAU && positionPion->y!=BAS_PLATEAU)
                        sens=IMMOBILE;
                for(nbrDepl; nbrDepl>0; nbrDepl--)
                {
                    if(positionPion->x==DROITE_PLATEAU)
                    {
                        if(positionPion->y==HAUT_PLATEAU)
                            sens=BAS;
                        else if(positionPion->y==BAS_PLATEAU)
                            sens=HAUT;
                        else if(sens==DROITE)
                            sens=IMMOBILE;
                    }
                    if(sens==HAUT)
                        positionPion->y--;
                    else if(sens==BAS)
                        positionPion->y++;
                    else if(sens==DROITE)
                        positionPion->x++;
                    else if(sens==IMMOBILE)
                    {
                        nbrDepl=0;
                        return 1;
                    }
                    positionFinalePion.x=positionPion->x * TAILLE_BLOC;
                    positionFinalePion.y=positionPion->y * TAILLE_BLOC;
                    SDL_BlitSurface(pion, NULL, ecran, &positionFinalePion);
                    SDL_Flip(ecran);
                    SDL_Delay(500);
                }
                break;
        }

    return 0;
}



Cette discussion est classée dans : ecran, sdl, positionpion, rejouer, if


Répondre à ce message

Sujets en rapport avec ce message

SDL [ par lushkah ] bjr, j'ai un pb avec la SDL  en C, je débutes et j'ai passer la nuit a essayer de faire une disparition en fondu, j'essayes de programmer un jeu de da SDL porbleme [ par fahdovski ] IL Y'A EXECUTION MAIS LE PC PLANTE IL DEVIENT TRES LENT, MAIS POURQUOI??????jE TRAVAILLE SUR CODE::BLOCKS SOUS LINUXAVANT CA MARCHAIS IMPEC QUESQUI C' Texture avec OpenGl [ par Zakata ] Bonjour,Voila j'ai un petit soucis avec les textures et OpenGl. J'ai dans l'espoir de réussir à mettre une image de fond sur une fenetre OpenGl. J'ai probleme en c [ par enfer06 ] bonjour, j'ai un probleme dans un jeu en C : lorsque mon avion touche un mur, il n'explose pas. voici le code : #include #include #include #includ SDL animation [ par supermael ] Bonjour tout le monde, je commence un petit jeux, pour m'entrainer. Il sera en vue de profil (on ne peut bouger que vers la droite ou vers la gauche) Arguments et pointeur. [ par moumouteb ] Bonjours. Voici le bout de code qui pose problème:int Jeu (*ecran) {     ecran = SDL_SetVideoMode(Fenetre.x, Fenetre.y, 32, SDL_HWSURFACE | SDL_DOUBLE Probleme avec un dégradé [ par hugo7 ] Bonjour voila mon problème.J'utilise la librairie SDL et je cret un dégradé allant du noir au blanc qui marche très bien avec ce code : intmain( affichage jeu mémory en sdl!!! [ par snakers07 ] bonjour, on m'a conseillé de mettre un nouveau post pour avoir de l'aide!!! voila mon probleme,je viens de programmer le jeu du mémory, mais en langag Programme Trop Lent [ par Lemng ] Bonjour tout le monde,voici mon problème : j'utilise la SDL pour programmer un jeu se jouant a l'aide du clavier et de la souris de la manière suivant


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,967 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales