// Este ejemplo simula el movimiento de difusión o dispersión de unas particulas // de un gas donde se mueven aleatoriamente. // El define PALINUX permite su compilación en GNU/Linux con curses // mediante la orden:$gcc -DPALINUX -lncurses difusion.c -o difusion // en otro caso compila para Borland C con la libreria conio.h #include #include #ifdef PALINUX #include #define gotoxy(A,B) (move(B,A)) #define putch(A) (addch(A), refresh()) #else #include #endif #define NCICLOS 2280 /* Número de movimientos */ #define NPAR 160 /* Número de particulas */ #define POSDIR 8 /* Ocho posibles posiciones */ #define DentroPantalla(x,y) ( (x >0) && (x<=80) ) && ( (y>0) && (y<=24) ) typedef struct { short x,y; } Tparticula; Tparticula sustancia[NPAR]; // Tabla de posibles movimientos struct { short incx,incy; } mov[POSDIR] = { { 0, 1}, //Abajo { 1, 0}, //Derecha { 1, 1}, //Diagonal abajo Derecha {-1,-1}, {-1, 0}, { 0,-1}, {-1, 1}, { 1,-1} }; void MueveParticula ( Tparticula *par) { int dir; #ifdef PALINUX dir = random()%POSDIR; #else dir = random(POSDIR); #endif par->x += mov[dir].incx; par->y += mov[dir].incy; } main() { int i,j; #ifdef PALINUX srandom(time(NULL)); initscr(); erase(); #else clrscr(); #endif for (i=0;i