Liste et sous programme

Résolu/Fermé
evilfalcon Messages postés 58 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 10 novembre 2015 - Modifié par evilfalcon le 31/08/2015 à 12:23
evilfalcon Messages postés 58 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 10 novembre 2015 - 2 sept. 2015 à 10:15
Bonjour,

Je suis en train de programmer une liste quadruplement chainé et après plusieurs heures de travail, j'ai obtenue un résultat satisfaisant.

Par contre, je dois maintenant intégrer ma liste dans mon programme principale. Rien de bien compliquer, je rajoute un .h, je change les noms et créer les variables...

Une fois fini, je compile le tous (en me disant enfin fini), j'obtiens le messages d'erreur:
error: unknown type name 'lliste'.
Bon je me dis que c'est rien, juste besoin de définir la liste dans le .h. Aussitôt dis aussi fait. Je compile et paf belote et re, nouvelle erreur:
error: redifinition of 'struct element' (pour le .h avec la petit note originally defined here désignant ma partie de configuration de ma liste dans le main).

Et là, je ne vois plus trop quoi faire, je dois la définir ou pas??? je suis un peu perdu, si quelqu'un pouvait m'aider ou m'explication ce qui se passe car la je ne trouve pas.

Je vous rajoute mon programme:

le main

#ifdef _WIN32
#include <windows.h>
#include <conio.h>
#endif
#include <stdio.h>
#include "ouverture_carte.h"
#include "generateur_carte.h"
#include "liste_map.h" // fonction utilisant la liste

#define MAX 13

/*********** Generation Liste chainee ********************/
typedef struct element element;
struct element
{
    int numero_map;
    int info_map;
    int info_affichage;
    struct element *svt_nord;
    struct element *svt_sud;
    struct element *svt_est;
    struct element *svt_ouest;
};

typedef element *Lliste;

int MyGetch();
void Locate(int x,int y);
void Afficher(int x,int y, char laby[MAX][MAX]);
void TryMove(int* x,int* y,int vx,int vy, char laby[MAX][MAX]);

int main()
{
    int x,y;  // position joueur
    int touche;
    char laby[MAX][MAX];
    int nb_fichier = 1;
    int lvl = 1;
    Lliste carte = NULL;

    generateur_carte(lvl);
    carte = liste_map(carte, lvl);



    x = 6;
    y = 1;
    touche = 0;

    while(1)
    {
        touche = 0;
        ouverture_fichier(laby, nb_fichier);

        while(touche!=27) // ECHAP
        {

            //touche = MyGetch();
            printf("                                %d, %d, %c",x,y,nb_fichier);
            Afficher(x,y,laby);
            touche = MyGetch();
            switch(touche)
            {
                case 'q':
                    TryMove(&x,&y,0,-1,laby);
                    break;
                case 'd':
                    TryMove(&x,&y,0,1,laby);
                    break;
                case 'z':
                    TryMove(&x,&y,-1,0,laby);
                    break;
                case 's':
                    TryMove(&x,&y,1,0,laby);
                    break;
                default:
                break;
            }

                if ((y == 0) && (x == 6))
                {
                    nb_fichier = 1;
                    x = 6;
                    y = 11;
                    touche = 27;
                }

                if ((x == 6) && (y == 12))
                {
                    nb_fichier = 2;
                    y = 1;
                    x = 6;
                    touche = 27;
                }

                if ((x == 0) && (y == 6))
                {
                    nb_fichier = 3;
                    y = 6;
                    x = 11;
                    touche = 27;
                }

                if ((x == 12) && (y == 6))
                {
                    nb_fichier = 4;
                    y = 6;
                    x = 1;
                    touche = 27;
                }
        }
    }
    return 0;
}


int MyGetch()
{
#ifdef _WIN32
    return getch();
#endif
// trouver alternative hors Windows.
}

void Locate(int x,int y)
{
#ifdef _WIN32
    HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);
    COORD C;
    C.X=(SHORT)x;
    C.Y=(SHORT)y;
    SetConsoleCursorPosition(H,C);
#endif
    // trouver alternative hors Windows.
}

void Afficher(int x,int y, char laby[MAX][MAX])
{
    int i,j;
    Locate(0,0);
    for(i=0;i<MAX;i++)
    {
        for(j=0;j<MAX;j++)
        {
            if (i==x && j==y)
                printf("p");
            else
                printf("%c",laby[i][j]);
        }
        printf("\n");
    }
}

void TryMove(int* x,int* y,int vx,int vy, char laby[MAX][MAX])
{
    if (laby[*x+vx][*y+vy]=='*')
        return;
    (*x)+=vx;
    (*y)+=vy;
}


le .h (liste_map.h)

/*********** Generation Liste chainee ********************/
typedef struct element element;
struct element
{
    int numero_map;
    int info_map;
    int info_affichage;
    struct element *svt_nord;
    struct element *svt_sud;
    struct element *svt_est;
    struct element *svt_ouest;
};
typedef element *Lliste;

#ifndef LISTE_MAP_H_INCLUDED
#define LISTE_MAP_H_INCLUDED

Lliste liste_map(Lliste carte, int lvl);

#endif // LISTE_MAP_H_INCLUDED


le programme liste_map:
#include <stdio.h>
#include <stdlib.h>


/*********** Generation Liste chainee ********************/
typedef struct element element;
struct element
{
    int numero_map;
    int info_map;
    int info_affichage;
    struct element *svt_nord;
    struct element *svt_sud;
    struct element *svt_est;
    struct element *svt_ouest;
};

typedef element *Lliste;

/******************** AJOUTER EN TETE ********************/
/** OK                                                  **/
/*********************************************************/

Lliste crea_map( Lliste liste1, Lliste liste2, Lliste liste3, Lliste liste4, int numero_map, int info_map)
{
    element* nouvelleElement = malloc(sizeof(element));

    nouvelleElement -> numero_map = numero_map;
    nouvelleElement -> info_map = info_map;
    nouvelleElement -> info_affichage = 0;
    nouvelleElement -> svt_est = liste1;
    nouvelleElement -> svt_ouest = liste2;
    nouvelleElement -> svt_nord = liste3;
    nouvelleElement -> svt_sud = liste4;

    return nouvelleElement;
}

/****************** AJOUTER EST OUEST ********************/
/** LISTE DOUBLEMENT CHAINEE                            **/
/*********************************************************/


Lliste liste_est_ouest(Lliste liste)
{
    element* tmp = liste;
    element* ptmp = NULL;
    element* pptmp = liste;
    if (liste == NULL)
    {
        return NULL;
    }
    else
    {
        while(tmp -> svt_ouest!= NULL)
        {
            ptmp = tmp;
            tmp = tmp -> svt_ouest;
            if (ptmp != NULL)
            {
                tmp -> svt_est = ptmp;
            }

        }

        tmp -> svt_ouest = pptmp;
        pptmp -> svt_est = tmp;
        return liste;
    }
}

Lliste liste_nord_sud(Lliste liste, int lvl)
{
    element* tmp = liste;
    element* ptmp = liste;
    element* pptmp = liste;
    int affichage = liste ->info_affichage;
    int affichage_compare = affichage;
    affichage++;
    int i = 0;
    int j = 0;
    if (liste == NULL)
    {
        return NULL;
    }
    else
    {
        for (i = 0; i<(lvl);i++)
        {
            ptmp = ptmp -> svt_est;
            pptmp = pptmp -> svt_ouest;
        }

        for(i = 0 ;i<(lvl*lvl);i++ )
        {
            tmp -> svt_sud = ptmp;
            ptmp = ptmp -> svt_est;
            tmp ->svt_nord = pptmp;
            pptmp = pptmp -> svt_est;

            tmp -> info_affichage = 0;
            tmp = tmp -> svt_est;


        }
        return liste;
    }
}

Lliste bord_ouest_est(Lliste liste, int lvl)
{
    element* tmp = liste;
    element* ptmp = liste;
    tmp = tmp -> svt_est;
    ptmp = ptmp -> svt_est;
    int i = 0;
    int j = 0;

    for (i = 0; i<lvl-1; i++)
    {
        tmp = tmp -> svt_est;
    }

    for (i = 0; i< lvl; i++)
    {
        tmp -> svt_est = ptmp;
        ptmp -> svt_ouest = tmp;
        tmp = tmp -> svt_sud;
        ptmp = ptmp -> svt_sud;
    }
    return liste;
}

/******************** AFFICHER LISTE *********************/
/** OK                                                  **/
/*********************************************************/

void affichier_total(Lliste liste, int lvl)
{
    int i,j;
    element* tmp = liste;
    i = j = 0;
    tmp = tmp -> svt_est;
    for (i=0; i<lvl;i++)
    {
        for (j = 0; j<lvl ;j++)
        {
            printf("%d", tmp -> numero_map);
            printf("%d ",tmp -> info_map);
            printf("ad %d, est %d, ouest %d, sud %d, nord %d\n",tmp, tmp -> svt_est, tmp -> svt_ouest,tmp -> svt_sud,tmp -> svt_nord);
            tmp = tmp -> svt_est;
        }
        printf("%d", tmp -> numero_map);
        printf("%d ",tmp -> info_map);
        printf("ad %d, est %d, ouest %d, sud %d, nord %d\n",tmp, tmp -> svt_est, tmp -> svt_ouest,tmp -> svt_sud,tmp -> svt_nord);
        printf("\n");
        tmp = tmp -> svt_sud;
    }
    printf("\n\n");
    for (i=0; i<lvl;i++)
    {
        for (j = 0; j<lvl ;j++)
        {
            printf("%d", tmp -> numero_map);
            printf("%d ",tmp -> info_map);
            tmp = tmp -> svt_est;
        }
        printf("\n");
        tmp = tmp -> svt_sud;
    }
}

Lliste liste_map(Lliste carte, int lvl)
{
    //Lliste carte = NULL;
    //int lvl = 1*2+1;
    char caractereActuel;
    int multiple = 1000;
    int memo1, memo2;
    memo2 = memo1 = 0;
    FILE *fichier = NULL;
    fichier = fopen("map.txt", "r+");
    if (fichier != NULL)
    {
        do
        {
            caractereActuel = fgetc(fichier);
            //printf("%d ",caractereActuel);
            if (caractereActuel == 32)
            {
                carte = crea_map(NULL, carte, NULL, NULL, memo2, memo1-48);
                //printf("%d%d ",memo2, memo1-48);
                memo2 = 0;
                memo1 = 0;
                multiple = 1000;
            }
            if ((memo1>=48 )&&(memo1 <= 58))
            {
                memo2 = memo2 + (memo1-48)*multiple;
                multiple = multiple / 10;
            }
            memo1 = caractereActuel;



        } while (caractereActuel != EOF);
        fclose(fichier);
    }
    else
    {
        printf("\n Impossible d'ouvrir le fichier test.txt\n");
    }

    carte = liste_est_ouest(carte);
    carte = liste_nord_sud(carte,lvl);
    carte = bord_ouest_est(carte,lvl);

    return carte;
}


Je vous remercie par avance.
Cordialement

3 réponses

Salut,

Sans vouloir rentrer en profondeur, essaye dejà de faire ceci dans le main:


#ifndef LISTE_MAP_H_INCLUDED
#include "liste_map.h"
#endif


ce qui est étonnant c'est que le liste_map cpp n'inclue pas son .h qui devrait être celui qui ajoute les

#include <stdio.h>
#include <stdlib.h>

.... bon je suis sûrement un peu rouillé ^^

naga

[EDIT] ah, et pourquoi redefinir ta structure dans ton fichier contenant le main ?/EDIT
0
evilfalcon Messages postés 58 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 10 novembre 2015
31 août 2015 à 13:49
merci de m'avoir répondu, j'ai essayé tes propositions:

#ifdef _WIN32
#include <windows.h>
#include <conio.h>
#endif
#include <stdio.h>
#include "ouverture_carte.h"
#include "generateur_carte.h"
//#include "liste_map.h"

#ifndef LISTE_MAP_H_INCLUDED
#include "liste_map.h"
#endif

#define MAX 13

/*********** Generation Liste chainee ********************/
typedef struct element element;
struct element
{
    int numero_map;
    int info_map;
    int info_affichage;
    struct element *svt_nord;
    struct element *svt_sud;
    struct element *svt_est;
    struct element *svt_ouest;
};

typedef element *Lliste;

int MyGetch();
void Locate(int x,int y);
void Afficher(int x,int y, char laby[MAX][MAX]);
void TryMove(int* x,int* y,int vx,int vy, char laby[MAX][MAX]);

int main()
{
...
}


j'obtiens l'erreur: unknow type name 'lliste'.
si je rajoute la structure de la liste même erreur qu'avant déjà définie ailleurs.

et avec les deux bibiliothéques stdio et stdlib dans liste_map.h ça change rien.

#include <stdio.h>
#include <stdlib.h>

/*********** Generation Liste chainee ********************/
/*typedef struct element element;
struct element
{
    int numero_map;
    int info_map;
    int info_affichage;
    struct element *svt_nord;
    struct element *svt_sud;
    struct element *svt_est;
    struct element *svt_ouest;
};
typedef element *Lliste;*/

#ifndef LISTE_MAP_H_INCLUDED
#define LISTE_MAP_H_INCLUDED

Lliste liste_map(Lliste carte, int lvl);

#endif // LISTE_MAP_H_INCLUDED



<citation>ah, et pourquoi redéfinir ta structure dans ton fichier contenant le main ?</citation>

Il me reste encore quelque ligne de code à écrire qui vont utiliser la liste dans le main. Je configure juste ma liste dans un sous programme.
0
evilfalcon Messages postés 58 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 10 novembre 2015 > evilfalcon Messages postés 58 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 10 novembre 2015
31 août 2015 à 14:10
j'ai essayé ça:

#ifdef _WIN32
#include <windows.h>
#include <conio.h>
#endif
#include <stdio.h>
#include "ouverture_carte.h"
#include "generateur_carte.h"
//#include "liste_map.h"

#ifndef LISTE_MAP_H_INCLUDED
#include "liste_map.h"
#endif

#define MAX 13

int MyGetch();
void Locate(int x,int y);
void Afficher(int x,int y, char laby[MAX][MAX]);
void TryMove(int* x,int* y,int vx,int vy, char laby[MAX][MAX]);
void affichier_total(Lliste liste, int lvl);

int main()
{
    int x,y;  // position joueur
    int touche;
    char laby[MAX][MAX];
    int nb_fichier = 1;
    int lvl = 3;
    Lliste carte = NULL;

    generateur_carte(lvl);
    carte = liste_map(carte, lvl);
    printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    afficher_ouest_est(carte);

...
}


j'ai enlevé la définition de la liste dans le main, et je l'ai laissé dans liste_map.h. Maintenant le programme ce compile mais il plante sur l'affichage de la liste. Pourtant, si je demande de l'afficher dans liste_map.c pas de soucis alors que dans le main c'est la bérézina.
0
Utilisateur anonyme
31 août 2015 à 14:28
Ok alors second point :

Tu définit aussi ta structure mais aussi (et surtout Lliste) dans le h et dans le cpp. Null besoin (ca risque de creer justement une erreur).
Ensuite j ai un peu peur que tu ai quelques manques de connaissances vis à vis de la portée des variables et des pointeurs.

Par exemple, la ligne


carte = liste_map(carte, lvl);


Avec les pointeurs, tu n as pas besoin de retourner en valeur de retour OU il n y a qu'un retour et dans ce cas pas de parametre a passer...
Ce qui est étonnant aussi, c'est que tu créé ce "carte" a null, que tu le passe en paramètre pour enfin faire :


carte = crea_map(NULL, carte, NULL, NULL, memo2, memo1-48);


et donc faire la meme chose que :


carte = crea_map(NULL, NULL, NULL, NULL, memo2, memo1-48);


Enfin, tu utilise la fonction "generateur_carte" que je ne connais pas (pas dans ton cpp ou h).

Je pense qu'il y a 2/3 choses à voir avant que je te donne vraiment une réponse. Peux tu me donner le code complet que tu utilise actuellement ? J essaye de voir ca cet aprem.

Naga
0
evilfalcon Messages postés 58 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 10 novembre 2015
31 août 2015 à 15:54

la fonction créa_map:

Lliste crea_map( Lliste liste1, Lliste liste2, Lliste liste3, Lliste liste4, int numero_map, int info_map) 
{ 
 element* nouvelleElement = malloc(sizeof(element)); 

 nouvelleElement -> numero_map = numero_map; 
 nouvelleElement -> info_map = info_map; 
 nouvelleElement -> info_affichage = 0; 
 nouvelleElement -> svt_est = liste1; 
 nouvelleElement -> svt_ouest = liste2; 
 nouvelleElement -> svt_nord = liste3; 
 nouvelleElement -> svt_sud = liste4; 

 return nouvelleElement; 
} 

Voila comment j'ai réfléchie ma fonction:
Etat 0: crea_map reçoit que des NULL mais renvoie une adresse.
Etat 1: crea_map reçoit 3 NULL et une adresse qui l'élément actuelle avec le précédent.
ensuite j'ai 3 autre fonctions pour liée chaque élément avec 3 autre éléments.
0
oui oui c'est juste que je ne comprends pas c'est le fait de faire :

   
Lliste carte = NULL;

generateur_carte(lvl);
carte = liste_map(carte, lvl);


ca serait plus simple de faire directement :
   


generateur_carte(lvl);
Lliste carte = liste_map(NULL, lvl);


Mais ce n'est pas un point important ^^ Par contre je ne vois pas de definition pour "generateur_carte" (
generateur_carte(lvl)
), c'est pour ca que je demandais ton code complet ^^ quel est son rôle ?

Je pense que la première chose a faire pour toi est de ne faire dans un premiers temps qu'un fichier :

 
//-------------INCLUDES--------------//
/***** ici on met les include de base ->iostream etc. *****/
//-------------STRUCTURES---------//
/***** ici tu definis ta structure *******/
//-------------OBJET LISTE----------//
/***** la tu defini ton objet ******/
//-------------FONCTION OBJET---//
/***** ici tu defini les fonctions *****/
//-------------MAIN--------------------//
/**** et donc le main *****/


Une fois que c'est fait et que ca fonctionne, refais seulement un .h qui contiendra :

- Les includes
- la structure
- L'objet


Ensuite ton main ne contiendra que les l'include de ce .h +fonction+main
(pas besoin de redefinir de structure ou reinclure des bibliotheques -> on recupere le tout du .h)

A mon avis le problème vient du decoupage de ton contenu ( dans ton öain tu redefinis ta structure, ton type et des methodes alors qu'il n y a surtout pas lieu => ca ecrase les precedentes ). En fait il faut que tu te dise que lorsque tu inclu un autre fichier, c'est comme si tu travaillais sur un seul => le fichier que tu inclus s'ajoutera au niveau de la balise #include.
Et donc ceci :

Juste une question con : pourquoi le c et pas le c++ ? avec des classes ca serai plus propre ^^

naga
0
Utilisateur anonyme
31 août 2015 à 17:01
Il y a certains points aussi qui te poseront surement problèmes. Je prends le premier que j'ai sous les yeux : (elle apparait plusieurs fois, plus ou moins identiques)

Lliste liste_nord_sud(Lliste liste, int lvl)
{
element* tmp = liste;
element* ptmp = liste;
element* pptmp = liste;
.
.
.
}


en fait ici tu crée 3 pointeurs qui pointent tous sur le même élément, ce qui risque de te poser problème assez vite (surtout que tu les lies entre eux ensuite) ... bref tu risques de te marcher sur les pieds ... mais ce n est pas encore d actualité ^^
0
evilfalcon Messages postés 58 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 10 novembre 2015
Modifié par evilfalcon le 31/08/2015 à 17:15
j'aimerai te passer mon projet mais je ne peux pas mettre mon lien sur le forum.
Si tu es d'accords on peut échanger nos adresse mail que je puis t'envoyer mon projet.

Et là je suis entrain de réorganiser mon programme comme tu me l'as conseillé plus haut, enfin de mieux me retrouver.
0
evilfalcon Messages postés 58 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 10 novembre 2015 > evilfalcon Messages postés 58 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 10 novembre 2015
2 sept. 2015 à 10:15
C'est bon! Ca fonctionne! Mais je ne sais pas pourquoi! et ni comment!
J'ai juste restructuré mon main!

MAIN
/********************** CONSTANTE *******************/
#define MAX 13
/**********************  INCLUDES  ******************/
#ifdef _WIN32
#include <windows.h>
#include <conio.h>
#endif
#include <stdio.h>
#include "ouverture_carte.h"
#include "generateur_carte.h"
//#include "liste_map.h"

#ifndef LISTE_MAP_H_INCLUDED
#include "liste_map.h"
#endif



/********************** STRUCTURES *****************/
/*typedef struct element element;
struct element
{
    int numero_map;
    int info_map;
    int info_affichage;
    struct element *svt_nord;
    struct element *svt_sud;
    struct element *svt_est;
    struct element *svt_ouest;
};*/

/********************** OBJET LISTE ****************/
//typedef element *Lliste;

/********************* FONCTION OBJET **************/
int MyGetch();
void Locate(int x,int y);
void Afficher(int x,int y, char laby[MAX][MAX]);
void TryMove(int* x,int* y,int vx,int vy, char laby[MAX][MAX]);
void affichier_total(Lliste liste, int lvl);


/********************* FONCTION MAIN **************/
int main()
{
    int x,y;  // position joueur
    int touche;
    char laby[MAX][MAX];
    int nb_fichier = 1;
    int lvl = 5;
    Lliste carte = NULL;

    generateur_carte(lvl);
    carte = liste_map(carte, lvl);
    printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    afficher_la_carte(carte, lvl);
    //printf("%d",carte);

    x = 6;
    y = 1;
    touche = 0;

    while(1)
    {
        touche = 0;
        ouverture_fichier(laby, nb_fichier);

        while(touche!=27) // ECHAP
        {

            //touche = MyGetch();
            printf("                                %d, %d, %c",x,y,nb_fichier);
            Afficher(x,y,laby);
            touche = MyGetch();
            switch(touche)
            {
                case 'q':
                    TryMove(&x,&y,0,-1,laby);
                    break;
                case 'd':
                    TryMove(&x,&y,0,1,laby);
                    break;
                case 'z':
                    TryMove(&x,&y,-1,0,laby);
                    break;
                case 's':
                    TryMove(&x,&y,1,0,laby);
                    break;
                default:
                break;
            }

                if ((y == 0) && (x == 6))
                {
                    carte = carte -> svt_ouest;
                    nb_fichier = carte -> numero_map;
                    x = 6;
                    y = 11;
                    touche = 27;
                }

                if ((x == 6) && (y == 12))
                {
                    carte = carte -> svt_est;
                    nb_fichier = carte -> numero_map;
                    y = 1;
                    x = 6;
                    touche = 27;
                }

                if ((x == 0) && (y == 6))
                {
                    carte = carte -> svt_nord;
                    nb_fichier = carte -> numero_map;
                    y = 6;
                    x = 11;
                    touche = 27;
                }

                if ((x == 12) && (y == 6))
                {
                    carte = carte -> svt_sud;
                    nb_fichier = carte -> numero_map;
                    y = 6;
                    x = 1;
                    touche = 27;
                }
        }
    }
    return 0;
}

/********************* FONCTION OBJET SCRIPT **************/
int MyGetch()
{
#ifdef _WIN32
    return getch();
#endif
// trouver alternative hors Windows.
}

void Locate(int x,int y)
{
#ifdef _WIN32
    HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);
    COORD C;
    C.X=(SHORT)x;
    C.Y=(SHORT)y;
    SetConsoleCursorPosition(H,C);
#endif
    // trouver alternative hors Windows.
}

void Afficher(int x,int y, char laby[MAX][MAX])
{
    int i,j;
    Locate(0,0);
    for(i=0;i<MAX;i++)
    {
        for(j=0;j<MAX;j++)
        {
            if (i==x && j==y)
                printf("p");
            else
                printf("%c",laby[i][j]);
        }
        printf("\n");
    }
}

void TryMove(int* x,int* y,int vx,int vy, char laby[MAX][MAX])
{
    if (laby[*x+vx][*y+vy]=='*')
        return;
    (*x)+=vx;
    (*y)+=vy;
}

0