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 :

Passage d'un tableau de structures en parametre dans une Fonction + IA et mode 2joueurs.


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Passage d'un tableau de structures en parametre dans une Fonction + IA et mode 2joueurs.
    je travail actuelement sur un projet de jeu tetris et j'ai du creer une structure comme suit:

    I) tout en haut du programme (avant le main) j'ai declarer et defini la structure:

    typedef struct block // un type block composé de 2 entiers.
    { int etat;
    int couleur;
    }block;

    block tab_block[30][20]; // un tableau de block.

    j'ai créer une fonction ou je dois passer mon tableau de block en entré.
    1)Prototype de la fonction:

    void IA(block tab_block[18][10],int type_block) // si je ne met pas les [18] [10] j'ai cette errererror: no match for 'operator[]' in 'tab_block[i]'|


    2) appel a la fonction:

    IA(tab_block,type_block); // en mettant les [18][10] dans le prototype j'arrive a passer la premiere erreur mais ça génere une erreur dans l'appel:

    |error: cannot convert 'block (*)[20]' to 'block (*)[10]' for argument '1' to 'void IA(block (*)[10], int)'|

    EDIT: j'ai résolue le probléme en faisant l'appel suivant: IA(tab_block[18][20],type_block) quel etait le probléme?

    II) je dois créer une IA (vous vous en etes un peux douté) pour mon jeu, si vous avez des codes sources en C pour des IA Tetris je pourrais m'en inspirer.

    III) comment faire pour lancer 2 instances de mon programme (EX: j'appuie sur la touche F2 sa lance une sorte de mode 2 joueurs ou une nouvelle fenetre s'ouvre pour qu'un 2 éme joueur ou l'ordinateur puisse jouer contre le premier.

    EDIT 2:
    IV) je rencontre un probléme. je dispose d'une fonction void move_gauche() qui permet a la piéce controllé (celle qui tombe) de bouger une fois a gauche.
    sauf que si j'appelle cette fonction (par simple pression d'un bouton dans un switch() le programme execute la fonction un trés grand nombre de fois (tellement qu'elle sort partiellement de la surface de jeu) alors que je n'ai appelé la fonction que UNE fois.

    a votre avis quel peut etre le probléme?

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Pourquoi passes-tu de 30;20 à 18;10?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 564
    Points : 7 640
    Points
    7 640
    Par défaut
    Bonjour,
    Citation Envoyé par ChallengerLy Voir le message
    void IA(block tab_block[18][10],int type_block) // si je ne met pas les [18] [10] j'ai cette errererror: no match for 'operator[]' in 'tab_block[i]'|
    Il faut savoir qu'en langage C, on ne peut passer un tableau à une fonction, toute tentative revient à passer un pointeur. Si le tableau a plusieurs dimensions, le pointeur pointe sur la 1ere ligne dont la taille doit être connue.
    Ici : void IA( block (*tab_block)[20] , int type_block )
    On peut aussi écrire : void IA( block tab_block[][20] , int type_block )
    Ou bien écrire : void IA( block tab_block[NombreQuelconque][20] , int type_block )
    Ces trois lignes sont équivalentes, il faut éviter la troisième car elle est trompeuse, le NombreQuelconque étant toujours ignoré.

    Citation Envoyé par ChallengerLy Voir le message
    2) appel a la fonction:

    IA(tab_block,type_block); // en mettant les [18][10] dans le prototype j'arrive a passer la premiere erreur mais ça génere une erreur dans l'appel:

    |error: cannot convert 'block (*)[20]' to 'block (*)[10]' for argument '1' to 'void IA(block (*)[10], int)'|

    EDIT: j'ai résolue le probléme en faisant l'appel suivant: IA(tab_block[18][20],type_block) quel etait le probléme?
    Indiqué avant, la taille de la seconde dimension doit être impérativement la même que celle du tableau initial.

    Citation Envoyé par ChallengerLy Voir le message
    II) je dois créer une IA (vous vous en etes un peux douté) pour mon jeu, si vous avez des codes sources en C pour des IA Tetris je pourrais m'en inspirer.
    Je n'ai pas cela. Attention l'objectif est un peu ambitieux pour débuter.

    Citation Envoyé par ChallengerLy Voir le message
    III) comment faire pour lancer 2 instances de mon programme (EX: j'appuie sur la touche F2 sa lance une sorte de mode 2 joueurs ou une nouvelle fenetre s'ouvre pour qu'un 2 éme joueur ou l'ordinateur puisse jouer contre le premier.
    Cela dépend de ton IDE. Je pense que peu permettent de lancer en double la même application.
    Mais tu peux toujours lancer une première application en partant directement du répertoire où elle a été compilée et lancer la seconde en debug.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Merci pour les explications.
    Médinoc--> [18][10] etant la surface de jeu, mais meme en [10][20] sa devrait aller car le programme gére les collisions et l'IA ne parcours que la surface [18][10].

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Tu ne peux pas "convertir" la taille d'un tableau. Si la surface de jeu fait 18x10, tu dois bosser directement sur un tableau de 18x10; tu ne peux pas passer ton tableau de 30x20 à la fonction.
    (mais tu peux toujours copier les cases d'un tableau à l'autre, bien sûr)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/11/2012, 15h11
  2. Tableau de structures en parametre d'une fonction
    Par -No Comment- dans le forum C
    Réponses: 19
    Dernier message: 29/03/2006, 15h00
  3. Passer un tableau en parametre dans une fonction js
    Par hellmaster78 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/06/2005, 14h35
  4. Réponses: 6
    Dernier message: 24/12/2004, 16h46
  5. [langage] Passage de paramètres dans une fonction
    Par And_the_problem_is dans le forum Langage
    Réponses: 11
    Dernier message: 28/06/2004, 08h20

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