IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Projet JEU en C


Sujet :

C

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2022
    Messages : 8
    Par défaut Projet JEU en C
    Bonjour à tous,

    Je suis étudiant et dans le cadre d'un projet je dois réaliser un jeu en langage C. J'ai déjà essayé de chercher comment créer une table en deux dimensions et l'initialiser à vide. De même pour incrémenter la valeur des jetons etc... (voir pièce jointe). Mais je débute dans ce langage et je n'arrive pas du tout à avancer sur ce projet et faire le rapprochement avec les cours reçus.

    Si quelqu'un pourrait m'aider ?

    Bonne soirée à vous

    Alex.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par ScaRed Voir le message
    J'ai déjà essayé de chercher comment créer une table en deux dimensions
    int tab[x][y].

    Citation Envoyé par ScaRed Voir le message
    et l'initialiser à vide.
    Le vide n'existe pas en informatique. Ce que tu peux faire, c'est l'initialiser à "n" en établissant la convention que "n=vide".
    Et si tu vas à la simplicité en disant "dans mon cas je choisis n=0" alors ça devient plus facile: int tab[x][y]={}.

    Citation Envoyé par ScaRed Voir le message
    De même pour incrémenter la valeur des jetons etc...
    Oh, faut faire un effort d'association aussi. for (i=0; i < (L * C - 1) / 2; i++) et à chaque "i" les joueurs posent leur jeton.
    Ton cours ne t'expliquera jamais comment faire un jeu. Il t'expliquera comment faire une boucle et ce sera à toi de dire "ok, si je dois jouer 15 fois ben j'ai besoin d'une boucle"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2022
    Messages : 8
    Par défaut
    [QUOTE=Sve@r;11892829]

    Je sais bien que je dois faire des efforts mais j'ai vraiment du mal à comprendre ce qu'on me demande, je passe des heures et je n'avance pas.

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Lorsqu'on a une problématique la première à chose à faire est d'extraire les variables nécessaires ainsi que leurs bornes.

    En partant de ce principe nous avons :
    • Un tableau à deux dimensions L et C. L et C doivent être impairs. Nous appellerons ce tableau plateau[][] ;
    • Les jetons sont bornés [1, (LxC-1)/2]. Nous pouvons donc utiliser la valeur 0 pour une case vide ;
    • Les jetons sont joués dans l’ordre croissant. Il nous faut une variable qui contient le tour actuellement joué borné aussi [1, (LXC-1)/2]. Nous nommerons cette variable tour ;


    En reprenant les explications précédentes initialisons ces variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /* Les valeurs de L et C sont ici arbitraires */
    int L=5, C=3;
    int tableau [L][C] = {}; // initialise le tableau avec toutes les valeurs à 0.
    int tour = 1;
    Remarque : Pour les valeurs de L et C il faudra écrire un code qui demande aux joueurs leur taille. Il faudra bien entendu s'assurer que L et C sont impairs.

    Ceci fait il faut maintenant créer une boucle comprisse entre [1 et (LxC-1)/2]. À chaque itération il faudra augmenter tour de 1. La boucle s'arrêtera lorsque tour sera supérieure à (LxC-1)/2.

    En sortie de la boucle on scrutera la case vide. Pour rappel son contenu est égale à 0. Une fois trouvée on prendra les valeurs qui l'encadrent pour déterminer qui a gagné.

    ------------------------

    Maintenant que la problématique est un peu plus détaillée comment déterminer dans ce tableau qui est rouge et qui est bleu ? Plusieurs solutions sont possibles :
    • Utiliser une structure qui contient la valeur du jeton et sa couleur ;
    • utiliser deux tableaux, un par couleur. Ça complique un peu l'affaire mais si tu ne connais pas les structures c'est la méthode à utiliser.


    Au cas où voila la structure à utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct {
    int num; // numéro du jeton
    int couleur; // 0 pour bleu et 1 pour rouge par exemple.
    }s_jeton;
    Remarque : L'utilisation de 0 et 1 pour les couleurs n'est pas anodin ici. Ça va permettre d'utiliser la vérification par FALSE et TRUE lorsqu'on déterminera qui a gagné.

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Bonjour,
    Citation Envoyé par gerald3d Voir le message
    Pour les valeurs de L et C il faudra écrire un code qui demande aux joueurs leur taille. Il faudra bien entendu s'assurer que L et C sont impairs
    Pourquoi impair ?
    (C'est peur-être précisé dans le fichier docx donné par le demandeur, mais j'ai pour principe de ne jamais ouvrir ce genre de document)

  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par droggo Voir le message
    Bonjour,

    Pourquoi impair ?
    (C'est peur-être précisé dans le fichier docx donné par le demandeur, mais j'ai pour principe de ne jamais ouvrir ce genre de document)
    Oui c'est précisé

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2022
    Messages : 8
    Par défaut Avancée
    Bonjour en prenant compte des conseils j'ai pu avancer sur le code mais j'ai quelques points où je bloque encore ?
    Pouvez-vous m'apporter certains éléments de réponses ?

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
     
    #include <stdlib.h> //pour maloc
    #include <stdio.h> 
    #include <stdbool.h> //pour les booleen
     
    int main()
    {
        int Plateau, pl;
        int L, C; // Ligne (L) et Colone (C)
        char * c;
        bool continuer;
     
        // Vérfier L et C sont impaires
        printf("Entrez un nombre de lignes :");
        scanf("%d", &L);
        while (L % 2 == 0)
        {
            printf("Mauvaise nombre entrez un nombre de ligne impaire :");
            scanf("%d", &L);
        }
     
        printf("Entrez un nombre de colones :");
        scanf("%d", &C);
     
        while (C % 2 == 0)
        {
            printf("Mauvaise nombre entrez un nombre de colone impaire :");
            scanf("%d", &C);
        }
     
        do
        {
            initialiserPlateau(&pl, L, C);
            printf("Voulez vous jouer (o ou n)"); // o pour oui, n pour non
            scanf("%c", &c); 
            if (c == 'o')
            {
                continuer = 1;
            }else
            {
                continuer = 0;
            }
            jouerPartie(&pl, L, C);
        } while (continuer == 1);
    }
     
    struct Plateau
    {
        int L;
        int C;
        int **tab;
    };
     
    void initialiserPlateau(Plateau *pl, int L, int C){
    pl -> L=L;
    pl -> C=C;
     
    //allocation
    pl -> tab = (int ) malloc(L * (sizeof(int)));
    int i, j;
    for (i = 0; i < L; i++)
    {
        pl -> tab[i] = (int ) malloc(C sizeof(int));
    }
     
    //initialisation
    for (i = 0; i < L; i++)
    {
        for (j = 0; i < C; j++)
        {
            pl -> tab[i][j] = 0;
        }
    }
    }
     
    void jouerPartie(Plateau pl, int L, int C){
        int nombre_tours = (LC-1)/2;
        int i;
        for(i=1; i <= nombre_tours; i++)
        {
    				clear();
            afficherPl(pl);
            ajouterPion(pl, 1, i); //ajouter au plateau pour le joueur 1 et le ième pion
            afficherPl(pl);
            ajouterPion(pl, 1, i); //ajouter au plateau pour le joueur 2 et ième pion
        }
     
        int j = verifierVainqueur(pl);
    }
     
    void ajouterPion(Plateau pl, int joueur, int i){
    		// déclarer 2 variables (int ligne = 2, int colonne = 4)
        // 2 scanf quelle ligne qu'elle colone
        // vérifier que la case exite et qu'elle n'est pas utiliser
    	 // Plateau : 3 lignes x 5 colonnes => pl.L <= lignes
    	// Case(2,4) 
    	//if( pl.tab[2][4] === 0) === false (case vide)
    	//if( pl.tab[2][4] === 0) === true (case vide)
    // pl.tab[2][4] = i
    	// printf("pion placé!"); wait / sleep(10)
    	}
     
    int verifierVainqueur(Plateau pl) {
    	int ligne, colonne;
    	int i, j;
    	for (i = 0; i < pl.L; i++) {
    		for (j = 0; j < pl.C; j++) {
    			if(pl.tab[i][j] == 0) {
    				ligne = i;
    				colonne = j;
    			}
    		} 
    	}
     
    	// la case vide est à la position (ligne, colonne)
     
    	int scoreJoueur1 = 0 , scoreJoueur2 = 0;
     
    	for (i=0; i <= ligne +1; i++) {
    		for (j=0; j <= colonne +1; j++) {
     
    		// pl.tab[i][j]  => couleur ?
    		if (couleur = "la couleur du joueur 1") {
    			scorejoueur1 = scoreJoueur1 + pl.tab[i][j];
    		}
    		else (couleur = "la couleur du joueur 2") {
    				scorejoueur2 = scorejoueur2 + pl.tab[i][j]
    		}
     
     
    		}
    	}
     
    	if (scoreJoueur1 > scoreJoueur2) {
    		return 1;
    	}
    	else if (scoreJoueur2 < scoreJoueur1) {
    		return 2;
    	}
    	else {
    		return 0;
    	}
    }

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ScaRed Voir le message
    Pouvez-vous m'apporter certains éléments de réponses ?
    Les éléments apportés par le compilateur ne sont pas assez explicites???
    On ne peut rien faire de plus que les reprendre

    Alors
    • en ligne 34 tu appelles initialiserPlateau(&pl, L, C). Mais "pl" est un int, donc &pl est un int étoile. Or la fonction attend un Plateau étoile...
    • ligne 36 tu appelles scanf("%c", &c). Mais "c" est un char étoile donc "&c" est un char étoile étoile. Or la fonction attend un char étoile...
    • ligne 37 tu compares "c" (un char étoile) avec 'o' (un entier)...
    • ligne 44 tu appelles jouerPartie() qui n'a pas été déclarée
    • ligne 55, 77, 92 et 104 tu travaille avec des "Plateau étoile" mais le type "Plateau" n'existe pas


    Voilà, à toi de jouer. C'est à toi de dire à ton programme comment et avec quoi il doit travailler.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Tu utilises une allocation dans le tas (malloc()). Pourquoi pas ? Mais si tu alloues il faut aussi penser à désallouer

  10. #10
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2022
    Messages : 8
    Par défaut
    Je n'ai pas compris pour l'histoire des étoiles en retouchant mon programme je l'ai complétement faussé ?
    Je n'ai jamais codé en C et cela est trop complexe pour moi.

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ScaRed Voir le message
    Je n'ai pas compris pour l'histoire des étoiles
    Pourtant c'est toi qui les as écrites !!!
    • ligne 10: char *c => char étoile c => c est donc de type "char étoile" (puisque le type se place avant le nom de la variable quand on la crée)
    • ligne 54: void initialiserPlateau(Plateau *pl, int L, int C) => Plateau étoile pl => pl est donc de type "plateau étoile" (pour la même raison)

    Moi je ne fais que lire ton code. Si maintenant tu ne sais pas pourquoi tu les mets quand tu les mets ni ce que cela signifie...

    Citation Envoyé par ScaRed Voir le message
    en retouchant mon programme je l'ai complétement faussé ?
    Bah, on ne peut pas fausser ce qui n'était déjà pas droit au départ. Mais si tu as mis des instructions au hasard en espérant que cela tomberait juste...
    Nom : images.jpg
Affichages : 308
Taille : 9,7 Ko

    Citation Envoyé par ScaRed Voir le message
    Citation Envoyé par ScaRed Voir le message
    Je suis étudiant et dans le cadre d'un projet je dois réaliser un jeu en langage C
    Citation Envoyé par ScaRed Voir le message
    ...et faire le rapprochement avec les cours reçus.
    Je n'ai jamais codé en C et cela est trop complexe pour moi.
    Tu as reçu des cours et ton prof t'a donné un projet. Donc au choix
    • ce projet est d'un trop haut niveau par rapport à celui des cours... et dans ce cas c'est la même chose pour toute la classe => vous avez là un argument à faire valoir au prof
    • ce projet est d'un trop haut niveau pour toi tout seul parce que tu n'as pas écouté, pas fait les exercices, pas suivi les corrections, en résumé tu n'as pas bossé et dans ce cas... tu peux télécharger un tuto, le lire, faire des exercices, bref te remettre tout seul au niveau puis t'attaquer à ce TP. Ou alors attendre la correction. Tu pourras même venir la poster ici nous demander de te l'expliquer.
    • ce projet est d'un trop haut niveau pour toi tout seul parce que tu n'es pas fait pour la programmation et dans ce cas vaut mieux que tu arrêtes de suite plutôt que de t'obstiner et rater ta vie (tout en pourrissant celle de tes futurs collègues)

    Mais dans tous les cas on ne fera pas ce TP à ta place
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2022
    Messages : 8
    Par défaut
    C'est pas nécessaire de m'envoyer un message pour me dire que je vais pourrir la vide de mes futurs collègues.

    On est pas tous né en étant des "as" de la programmation meme toi je pense.

    Je suis venu sur ce forum pour me faire aider et non pour qu'on soit désagréable comme ça.

    A aucun moment je veux qu'on me fasse mon travail mais juste qu'on m'aide.

  13. #13
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 537
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 537
    Par défaut
    Citation Envoyé par ScaRed Voir le message
    Je n'ai pas compris pour l'histoire des étoiles en retouchant mon programme je l'ai complétement faussé ?
    Je n'ai jamais codé en C et cela est trop complexe pour moi.
    il faut reprendre votre cours de langage C et comprendre ce qu'est un pointeur en langage C.
    Après vous pouvez revenir mais d'abord comprendre ce qu'est un pointeur.

  14. #14
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ScaRed Voir le message
    C'est pas nécessaire de m'envoyer un message pour me dire que je vais pourrir la vide de mes futurs collègues.
    C'était une hypothèse parmis d'autres.

    Citation Envoyé par ScaRed Voir le message
    meme toi je pense.
    Nan. Mais moi j'ai téléchargé des tutos, je les ai lus, ai fait les exercices...

    Citation Envoyé par ScaRed Voir le message
    Je suis venu sur ce forum pour me faire aider et non pour qu'on soit désagréable comme ça.
    Ben oui mais en dessous d'un certain niveau tu veux quoi comme aide? Que je t'explique ce que c'est que char *c ou tableau *pl alors que c'est écrit dans les tutos (et peut-être aussi dans tes cours)? Que je t'explique pourquoi pl -> tab = (int ) malloc(L * (sizeof(int))) alors que tab est un char étoile étoile (donc pas un int !!!) ne peut pas fonctionner? Tu ne sais même pas ce qu'est un "char étoile", comment veux-tu pouvoir gérer correctement un "char étoile étoile" ???? Même le sens du mot "étoile" est inconnu pour toi !!!!!

    Citation Envoyé par ScaRed Voir le message
    A aucun moment je veux qu'on me fasse mon travail mais juste qu'on m'aide.
    Oui. Reste juste que tu nous expliques le sens que tu donnes toi au verbe "aider"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  15. #15
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2022
    Messages : 8
    Par défaut Problème
    Re tout le monde alors je viens de reprendre mon prgramme et là j'ai un soucis on m'affiche le message d'erreur suivant :

    Jeu.c:42:1: error: expected identifier or '(' before '{' token
    {
    ^
    Jeu.c:52:1: error: expected identifier or '(' before '{' token
    {
    ^



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #include<stdio.h>
    #include <stdlib.h> //maloc
    #include <stdbool.h> //booléen
     
     
    int main()
    {
        int L, C;
     
        //Vérfier L et C sont impaires
        printf("Entrez un nombre de lignes :");
        scanf("%d", &L);
        while (L % 2 == 0)
        {
            printf("ERREUR ! , nombre pair rentré veuillez entrer un nombre de ligne impaire :");
            scanf("%d", &L);
        }
     
        printf("Entrez un nombre de colones :");
        scanf("%d", &C);
     
        while (C % 2 == 0)
        {
            printf("ERREUR ! , nombre impair veuillez entrer un nombre de colone impaire :");
            scanf("%d", &C);
        }
     
    int tableau[2][2],i,j;
         for (i=0;i<L;i++)
               for (j=0;j<C;j++)
     
     
                             tableau[i][j]=0;
     
     
    }

    J'ai recherhcé sur internet plusieur manips mais rien n'y fait et cela m'empêche de travailler ?

  16. #16
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 788
    Par défaut
    Code compilé sans erreur chez moi. Mais évidemment, il n'y a pas de ligne 42 ni de ligne 52 ....

  17. #17
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ScaRed Voir le message
    J'ai recherhcé sur internet plusieur manips mais rien n'y fait
    Hé oui. Parce qu'internet ne contient que des infos écrites par d'autres mais que personne ne va écrire qu'il faut bien veiller à la parité correcte des parenthèses tellement c'est évident pour tout le monde, même pour ceux qui ne sont pas des "as" mais qui ont un minimum de logique.
    Internet n'est pas fait pour remplacer ton cerveau !!!

    Citation Envoyé par ScaRed Voir le message
    et cela m'empêche de travailler ?
    N'exagére tout de même pas trop sur les verbes extrêmes...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  18. #18
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2022
    Messages : 8
    Par défaut
    Toujours aussi aimable.
    T’es sur le serveur pour te prouver quelque chose ou pour rabaisser les gens ?
    Sans internet ton métier n’existerait pas alors bon…

  19. #19
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ScaRed Voir le message
    Toujours aussi aimable.
    Ah non, tu te trompes de personnage, lui c'est ici


    Citation Envoyé par ScaRed Voir le message
    T’es sur le serveur pour te prouver quelque chose ou pour rabaisser les gens ?
    Sur le forum, pas le serveur. Même sur ces termes assez basiques tu te rates...?

    Citation Envoyé par ScaRed Voir le message
    Sans internet ton métier n’existerait pas alors bon…
    Effectivement tu ne connais vraiment mais alors vraiment rien à l'informatique, qui est née (et que j'ai commencée) bien avant la création du net !!!
    Toutefois cela n'ayant absolument rien à voir avec le sujet de ce topic alors bon...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  20. #20
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Bon essayons de reprendre les bases .

    Il faut absolument que tu dessines un algorithme de ton jeu. Bien sûr je ne le ferai pas pour toi mais voici, en français ce que cela peut donner :

    1. Demander la taille du jeu
    2. Vérifier si la taille est conforme. Si non conforme retourner à la demande.
    3. Initialiser le jeu avec la taille conforme.
    4. Dans une boucle :
    5. Demander la position du jeton bleu.
    6. Vérifier si la position est vide. Si oui placer le jeton. Dans le cas contraire reposer la question.
    7. Demander la position du jeton rouge.
    8. Vérifier comme pour le jeton bleu si la position est vide. Si non, reposer la question.
    9. Incrémenter le tour de jeu.
    10. Si le tour est supérieur au nombre de tours maximal sortir de la boucle.
    11. Trouver la case vide restante.
    12. À partir de cette case calculer pour chaque couleur les totaux.
    13. Afficher le gagnant.


    Pour t'aiguiller un peu les points 3, 6, 8, 11 et 12 peuvent mais surtout doivent être écrit sous forme de fonction.

    Après ce petit point d'éclaircissement j'aimerai te parler un peu des tableaux. Quelque soit la dimension du tableau que tu déclares ton ordinateur chéri le traduira en un simple tableau à une dimension. Le C autorise une écriture plus claire avec les fameux [][][][] mais pour ma part je ne te trouve pas ça très clair. Ce n'est que mon avis bien sûr. Comme en C tu passes ton temps à manipuler des pointeurs je préfère déclarer des tableaux à une dimension. Je crée deux fonctions qui me permettent d'accéder par la suite à mes données en fonction des coordonnées transmises. Ça peut paraître un peu lourd dingue sur le moment mais pour mon pauvre cerveau fatigué ça lui paraît plus clair .

    Donc, en suivant ce principe voila ce que ça donne. Si je veux par exemple un tableau à deux dimensions, je déclare un simple tableau à une dimension. Par exemple 15 pour reprendre le sujet de l'exercice :
    Pour calculer les coordonnées rien de plus simple. Soit (x,y) ces coordonnées. Il suffit d'ajouter à x le multiple de la ligne fois la longueur d'une ligne. Ce qui se traduit par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    coordonnées = x + y * longueur de la ligne
    À partir de là je crée mes deux fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     /* retourne dans "jeton" la valeur de la case aux coordonnées (position_L, position_C) dans "tab".
     * Renvoie true si les coordonnées sont dans le champ d'application et si jeton est différent de null..
     */
    int get_piece_in_tab (int *plateau, int L, int C, int position_L, int position_C, int *jeton)
    {
      if (position_L > 0 &&
          position_L < L &&
          position_C > 0 &&
          position_C < L) {
        if (jeton) {
          *jeton = plateau [position_L + position_C * L];
          return 1;
        }
        return 0;
      }
     
      return 0;
    }
     
    /* Place la valeur "tour" à la position (position_L, position_C) dans "tab".
     * Renvoie true si les coordonnées sont valides et si la case était vide 
     */
    int set_piece_in_tab (int *plateau, int L, int C, int position_L, int position_C, int tour)
    {
      if (position_L > 0 &&
          position_L < L &&
          position_C > 0 &&
          position_C < position_C)
          if (plateau [position_L + position_C * L]==0) {
    	plateau [position_L + position_C * L]= tour;
    	return 1;
     
      return 0;
    }
    Houla ! Je vois tes yeux s'écarquiller. Tu es en train de t'arracher les cheveux . Pas de panique. Un peu d'explication s'impose.

    Tout d'abord, comme je n'ai pas créé de structure pour contenir le tableau et ses dimensions, je suis donc forcé de tout transmettre à chaque fonction (int *tab, int L et int C). Je te laisse le soin de faire autrement si tu désires un peu mieux structurer le code . Ensuite tu remarqueras que les fonctions renvoient un int. Mais il ne correspond en rien au résultat qu'on est en droit d'attendre. Le retour de ces fonctions est du type booléen (à toi d'utiliser bool si tu veux). Si les fonctions ont correctement fonctionné alors elles renvoient vraie (1). À l'inverse elles renvoient faux (0). Une évidence .

    Remarque : la fonction set_piece_in_tab (); peut en l’état répondre aux points 6 et 8 précédents. Le joueur donne une position. Tu exécutes alors la dite fonction. Son retour te dit si la case était valide et dans ce cas le coup et en même temps joué .

    Pour la fonction get_piece_in_tab (); je suis contraint d'ajouter un paramètre pour récupérer la valeur de la case. C'est le rôle de int *jeton. Je transmets un pointeur (l'adresse d'une variable int). Je peux donc changer la valeur de cette variable via son adresse. Bien entendu dans la fonction je vérifie que l'adresse transmise n'est pas nulle.

    -------------------------------------------

    Pour finir sur ce petit sujet l'allocation dans le tas ( malloc(); ) n'est pas forcément nécessaire sauf si tu autorises l'utilisateur à rentrer une taille de tableau gigantesque. Dans ce cas tu alloues et tu désalloues. C'est la seule chose à penser. Voila deux pseudo-codes pour voir comment faire avec et sans allocation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    /* Sans allocation. Attention à la taille du tableau. Grosso modo ne pas dépasser 1Mo sinon risque de dépassement de la pile et segfault à l'arrivée. */
    int main (int argc, char **argv)
    {
      int L=5, C = 3;
      int tab [L*C];
      ...
    }
     
    /* Avec allocation. Ici penser à désallouer lorsque l'utilisation de la mémoire allouée n'est plus nécessaire. */
    int main (int argc, char **argv)
    {
      int L=5, C = 3;
      int *tab = malloc (L*C*sizeof(int));
      /* Exécution du programme */
      if (tab) {
        ...
        /* Libération de la mémoire */
        free (tab);
      }
    }
    Dans les deux cas, lorsque tu transmets ton tableau aux différentes fonctions, tu transmets à chaque fois l'adresse. Donc aucune différence à l'utilisation .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Projet Jeu] - Moteur 2D avec GLScene / Asphyre
    Par Leobaillard dans le forum Langage
    Réponses: 61
    Dernier message: 06/05/2006, 18h26
  2. [Projet Jeu] - Lire un MP3 à partir d'un stream
    Par Leobaillard dans le forum Langage
    Réponses: 8
    Dernier message: 06/05/2006, 10h45
  3. Projet jeu RPG/moteur 3D isométrique avec SDL
    Par Milan111 dans le forum Projets
    Réponses: 4
    Dernier message: 13/04/2006, 22h01
  4. Cherche codeur(s) pour projet jeu 2D (graphs dispo)
    Par eRz0r dans le forum Projets
    Réponses: 1
    Dernier message: 09/02/2006, 09h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo