[C con Clase] Generación números aleatorios

Javier Cancio del Busto sepholin en gmail.com
Mie Ene 6 18:58:04 CET 2010


Hola!

Estoy haciendo un programa que simula un juego de tablero de 9 casillas.
Debe ser capaz de posicionar una ficha en el tablero una vez he puesto yo la
mía, por lo que he hecho un algoritmo simple tal como:

- Posiciono mi ficha
- Genero número aleatorio rango 0-8
- Compruebo la casilla correspondiente al número, para ver que está libre
- Si está libre: Pongo ficha de la máquina
- Si no: Vuelvo a generar el número y repetir los pasos.

El programa lo hace correctamente, posiciona una ficha en una casilla vacía,
el problema es que cuando yo pongo mi ficha, por ejemplo, en la casilla
central, la máquina siempre posiciona la suya en la misma casilla, es como
si la semilla que tomase por defecto lo llevase a generar ese número
siempre. Mi código es:

do {
                int casilla = (rand()%9); // Se genera una casilla
aleatoria, entre 0 - 8

                if (ocupados[casilla] == 0) // Si esta libre..
                {
                    ...
                   codigo
                   ...

                    fichaFijada=1; // Hemos puesto la ficha, salimos del
bucle
                    ocupados[casilla]=1; // Indicamos que esa casilla ahora
esta ocupada por la maquina

                }
            } while (fichaFijada == 0);

¿Cómo podría generar números en ese mismo rango (0-8) con una semilla de
forma que no siempre generase el mismo número?
He probado con srand(time(NULL)) pero a veces tarda demasiado (unos
segundos) en generarlo (y por consiguiente posicionar su ficha) y da la
sensación de que el programa se ha colgado...

¿Alguna idea amig en s?

Muchas gracias!

-- 
======================
 Javier Cancio del Busto
======================
     http://sepho.es/
======================
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100106/c13737f7/attachment.html>


Más información sobre la lista de distribución Cconclase