Salut tout le monde
J'ai pour projet de réaliser en c, le déplacement d'un bot sur une surface inconnue.
La surface est un lieu contenant plusieurs pièces comme un plan de maison. Le bot connait sa position, mais le plan ne lui est pas connu à l'avance. Le but est de trouver la sortie unique et il ne la détecte que quand il la touche.
Le bot doit avoir un comportement simple : capteur à l'avant uniquement donc détection d'obstacle que lors de la rencontre avec celui ci lors d'un déplacement.
J'ai essayé de m'aider de personnes ayant eu un peu le même problème avec des labyrinthes sur les forums mais j'ai du mal à amorcer.
J'ai réussi à récupérer la map qui se situe dans un fichier .h. Je l'ai initialisé en transformant le fichier initial contenant ligne à ligne le plan (entre guillemets) en tableau à deux dimensions.
Ensuite j'ai aussi fait la fonction pour que l'affichage se fait correctement dans le terminal du plan.
Dorénavant, j'essaye de faire bouger le robot, mais j'ai du mal à amorcer, si quelqu'un pouvait aider à me lancer.
Je procède également par compilation séparée dont voila les différents fichiers :
Fichier main.c
Code :
#include "appart.h" #include "carte.h" #define TAILLE_CARTE 50 int main() { char map [TAILLE_CARTE][TAILLE_CARTE]; init_carte (appart, map); affiche_carte(map); }
|
Fichier bot.c
Code :
#include "robot.h" void move_robot (Robot *robot, char map [][TAILLE_CARTE]) { map[robot->y][robot->x]=' '; if (map[robot->y][robot->x+1]!='x') { robot->x++; } else if (map[robot->y+1][robot->x]!='x') { robot->y++; } else if (map[robot->y-1][robot->x]!='x') { robot->y--; } else (map[robot->y][robot->x-1]!='x') { robot->x--; } map[robot->y][robot->x]='R'; }
|
Fichier bot.h
Code :
#ifndef ROBOT_H #define ROBOT_H #include<stdio.h> #include<stdlib.h> #include<string.h> # define MOVELEFT 0 # define MOVERIGHT 1 # define MOVEFORWARD 2 # define MOVEBACK 3 # define NBCOMMAND 4 #define TAILLE_CARTE 50 typedef struct { int x,y; char direction; /*Nord,Est,Sud,West*/ } Robot; void move_robot (Robot *robot, char map [][TAILLE_CARTE]); /*case MOVELEFT: funcMoveLeft(); break; case MOVERIGHT: funcMoveRight(); break; case MOVEFORWARD: funcMoveForward(); break; case MOVEBACK: funcMoveBack(); break;*/ #endif
|
Fichier map.h
Code :
#include<stdio.h> #include<stdlib.h> #include<string.h> #define TAILLE_CARTE 50 void affiche_carte (char map [TAILLE_CARTE][TAILLE_CARTE]); void init_carte (char appart[], char map[][TAILLE_CARTE]);
|
Fichier map.c
Code :
#include "carte.h" void affiche_carte (char map [][TAILLE_CARTE]) { int i=0, j=0; for(i=0;i<TAILLE_CARTE;i++) { for(j=0;j<TAILLE_CARTE;j++) { printf("%c", map [i][j]); } printf("\n" ); } } void init_carte (char appart[], char map[][TAILLE_CARTE]) { int i=0, j=0; /*for (i=0; i<TAILLE_CARTE; i++) { for (j=0; j<TAILLE_CARTE; j++) { map[i][j]=appart[i][j]; } }*/ memcpy (map, appart,TAILLE_CARTE*TAILLE_CARTE); }
|
Message édité par netsen le 22-05-2013 à 11:20:56