begin process at 2012 05 30 09:39:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Divers

 > 

simulateur de fourmis


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

simulateur de fourmis

lundi 3 mai 2010 à 13:30:56 | simulateur de fourmis

nemson

bonjour a tous,
j'ai fais mon projet sur la simulation des fourmis mais au dernier moment mon encadrant me dit d'utiliser la bibliothèque SDl pourtant j'utilisais ALLEGRO.
mon problème est de convertir mon fichier d'initialisation que j'écrivais en utilisant ALLEGRO en celle qui pourrait correspondre en SDl juste pour me faire gagner en temps.voici mon code source
ceci correspond au fichier ini.h

#define INI_H

//les mode de bordure du terrain
#define BOUNDARY 0
#define SPHERICAL 1
#define KILL_ANT 2
// variabes qui seront initialisés à partir de "INI file" :
extern int Ants;
extern int L_W, L_H, Land_Mode, Sniff_Radius, Sniff_Angle;
extern float Evaporate_Rate,
Max_Pher,
Diffuse_Rate,
Food_Strength,
Nest_Strength,
Food_Strength_Decay,
Nest_Strength_Decay;

// lit et analyse le fichier:
int readini (char *filename);
#endif
***************************************************************************
ceci correspond à mon fichier ini.c

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

#include "ini.h"

#define NOFILE 1
#define MISSING 2
#define CMD_ERR 3
#define VALUE_ERR 4
#define BAD_VALUE 5
#define RANGE_ERR 6

#define lower(c) ((c >= 'A')? (c <= 'Z')? c | 0x20 : c : c)

//variables par defaut pour INI.
int Ants = 50;
int L_W = 100, L_H = 100,
Land_Mode = BOUNDARY,
Sniff_Radius = 5,
Sniff_Angle = 32;

float Evaporate_Rate = 0.97,
Max_Pher = 100.0,
Food_Strength = 100.0,
Nest_Strength = 100.0,
Food_Strength_Decay = 0.95,
Nest_Strength_Decay = 0.95;

typedef struct filestat filestat;
struct filestat
{
FILE *fp; /* pointeur sur un fichier*/
int line, /* nombre de ligne */
c; /* dernier caractère lu*/
};

/*============================================================================
ini_err : appelée quand une erreur suvient dans le fichier INI.
--------------------------------------------------------------------------*/
void ini_err (filestat *f, /* structure du fichier */
int errno, /* nombre d'erreur */
char *msg)
{
/* ferme le fichier d'entrée*/
if (f->fp)
fclose (f->fp);

fprintf (stderr, "Error processing INI file.\n");

switch (errno)
{
case NOFILE : fprintf (stderr, "File not found"); break;
case MISSING : fprintf (stderr, "Missing setting"); break;
case CMD_ERR : fprintf (stderr, "Unknown command"); break;
case VALUE_ERR : fprintf (stderr, "Value expected"); break;
case BAD_VALUE : fprintf (stderr, "Bad value"); break;
case RANGE_ERR : fprintf (stderr, "Range error"); break;
} /* (switch) */

if (msg)
fprintf (stderr, " (%s)", msg);

if (errno >= CMD_ERR)
/* liée à l'erreur du fichier */
fprintf (stderr, " : line %d", ++f->line);
fprintf (stderr, ".\n");
exit (1);
}


/*============================================================================
compare : compare deux chaînes de caractères,s1 et s2.s2 est la plus petite chaîne. la comparaison ignore le cas de s1.
-------------------------------------------------------------------------*/
int compare (char *s1, char *s2)
{
while (*s1 && *s2) {

if (lower (*s1) != *s2)

return (0);
s1++;
s2++;
}

return (*s1 == *s2);
}


/*============================================================================
skip_null : fait un saut vide d'une ligne dans le fichier d'entrée.
--------------------------------------------------------------------------*/
void skip_null (filestat *f)
{
f->c = getc (f->fp);
while (f->c == '\n') {
f->line++;
f->c = getc (f->fp);
}
ungetc (f->c, f->fp);

}


/*============================================================================
ignore_line : ignore une ligne.
--------------------------------------------------------------------------*/
void ignore_line (filestat *f)
{
do
f->c = getc (f->fp);
while ((f->c != EOF) && (f->c != '\n'));
f->line++;

}


/*============================================================================
readstring : lit une chaîne de caractère dans le fichier d'entrée.
--------------------------------------------------------------------------*/
void readstring (filestat *f, char **s)
{
char temp[81];
fscanf (f->fp, "%80s", temp);
if (*s)
free (*s);
*s = strdup (temp);
}


/*============================================================================
readint : lit un entier dans le fichier d'entrée.
--------------------------------------------------------------------------*/
void readint (filestat *f, int *i)
{
fscanf (f->fp, "%d", i);
}


/*============================================================================
readfloat : lit un nombre en virgule flottant dans le fichier d'entrée.
--------------------------------------------------------------------------*/
void readfloat (filestat *f, float *v)
{
fscanf (f->fp, "%f", v);
}


/*============================================================================
range_check : permet de verifier que 'val' est entre 'min' et 'max'. sinon un message d'erreur est emit

--------------------------------------------------------------------------*/
void range_check (filestat *f, float val, float min, float max, char *msg) {
if ((val < min) || (val > max))
ini_err (f, RANGE_ERR, msg);
}


/*============================================================================
parse_line : Parses a line of the input file.
--------------------------------------------------------------------------*/
int parse_line (filestat *f)
{
int t;
char temp[21]; // variable temporaire pour la commande.

// lire une commande :
fscanf (f->fp, "%20s", temp);

// regarde la première lettre :
switch (lower(temp[0])) {
case 'a':
if (compare (temp, "ants")) {
readint (f, &Ants);
range_check (f, (float)Ants, 1.0, 500.0, temp);
}
else
ini_err (f, CMD_ERR, temp);
break;

case 'e':
if (compare (temp, "evaporate")) {
readfloat (f, &Evaporate_Rate);
range_check (f, Evaporate_Rate, 0.0, 1.0+1e-3, temp);
}
else
ini_err (f, CMD_ERR, temp);
break;

case 'f':
if (compare (temp, "foodstrength")) {
readfloat (f, &Food_Strength);
}
else
if (compare (temp, "foodstrdecay")) {
readfloat (f, &Food_Strength_Decay);
range_check (f, Food_Strength_Decay, 0.0, 1.0+1e-3, temp);
}
else
ini_err (f, CMD_ERR, temp);
break;

case 'h':
if (compare (temp, "height")) {
readint (f, &L_H);
range_check (f, (float)L_H, 10.0, 200.0, temp);
}
else
ini_err (f, CMD_ERR, temp);
break;

case 'l':
if (compare (temp, "landmode")) {
readint (f, &Land_Mode);
range_check (f, Land_Mode, 0, 2, temp);
}
else
ini_err (f, CMD_ERR, temp);
break;

case 'm':
if (compare (temp, "maxpher")) {
readfloat (f, &Max_Pher);
range_check (f, Max_Pher, 0.0, 1e6, temp);
}
else
ini_err (f, CMD_ERR, temp);
break;

case 'n':
if (compare (temp, "neststrength")) {
readfloat (f, &Nest_Strength);
}
else
if (compare (temp, "neststrdecay")) {
readfloat (f, &Nest_Strength_Decay);
range_check (f, Nest_Strength_Decay, 0.0, 1.0+1e-3, temp);
}
else
ini_err (f, CMD_ERR, temp);
break;

case 's':
if (compare (temp, "sniffradius")) {
readint (f, &Sniff_Radius);
range_check (f, Sniff_Radius, 0, 128, temp);
}
else
if (compare (temp, "sniffangle")) {
readint (f, &Sniff_Angle);
range_check (f, Sniff_Angle, 0, 128, temp);
}
else
ini_err (f, CMD_ERR, temp);
break;

case 'w':
if (compare (temp, "width")) {
readint (f, &L_W);
range_check (f, (float)L_W, 10.0, 320.0, temp);
}
else
ini_err (f, CMD_ERR, temp);
break;
default : // commande inconnu:
ini_err (f, CMD_ERR, temp);
}

return (0);
}


/*============================================================================
readini : lit le fichier .INI file, parsing each line.
--------------------------------------------------------------------------*/
int readini (char *filename)
{
filestat fs = {NULL, 0, 0};

fs.fp = fopen (filename, "rt");

// si le fichier d'entré n'est pas trouvé alors les valeur par defauts seront utilisées.
if (!fs.fp) return 0;

do {
skip_null (&fs);
// voir le caractère qui était caché :
switch (fs.c)
{
case EOF :
break;

case ';' : /* Comment */
ignore_line (&fs);
break;

default : /* Parse command */
parse_line (&fs);
} /* (switch) */
}
while (fs.c != EOF);
fclose (fs.fp);

return (1);
}


Merci d'avance et surtout pour votre bonne comprehension
lundi 3 mai 2010 à 14:30:05 | Re : simulateur de fourmis

Calade

Bonjour,

Ton code ressemble furieusement à du C/C++ mais certainement à du VB et en plus tu postes dans la catégorie des bugs de CS, ce qui n'est pas assurément le cas.

Si tu veux avoir une réponse postes plutôt dans la bonne catégorie (celle du langage utilisé que tu connais mieux que moi.


Calade


Cette discussion est classée dans : ini, case, temp, err, if


Répondre à ce message

Sujets en rapport avec ce message

colonie de fourmis [ par nemson ] bonjour a tous, j'ai fais mon projet sur la simulation des fourmis en langage c mais au dernier moment mon encadrant me dit d'utiliser la bibliothèqu microcontrolleur [ par ahmedcherif ] salut à tous, je voulais relier deux pic 16F877A. mon but est de emettre un octet par une transmission serie asynchrone. voici la fonction de l' emiss Problème Liaison RS232 [ par maximus4 ] Bonjour,j'utilise un code que j'ai trouvé sur le site pour lister les ports RS232.J'ai 4 ports com le résultat m'affiche 4 com1code :void SonarFrm::li logiciel Borland C++ et DevC++ [ par waldomania ] Bonjour, j'ai un grand problème car j'ai programmé un mini projet sur un Dev C++ mais ça marche pas à Borland C++ le projet est en langage c (!=C++) probleme sscanf [ par maha1987 ] bjr tt le monde jai un prob dans ce prog (dans la fct verif si letat =4 le prog doit sticker la valeur de la partie entiere et decimale de la chaine d keylogger [ par rebelattack ] Bonjour, je souhaiterais surveillé les activité de mon fils sur le net, pour cela j'ai pensé a un keylogger. J'ai récupperé un code C sur votre site : erreur bizzare [ par lektrosonic ] Bonjour, je code un programe en C sous Visual Studio.La chose qui est tres surprenante c est que quand je lance mon programe a partir de windows, il p Keylogger probleme code [ par rebelattack ] bonjour,J'ai un probleme lorsque je veux compiler ce code. Je suis débutant, mais j'ai réunis plusieur code et çà doit etre la le probleme. donc lorsq


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 : 2,465 sec (3)

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