Hola Javier,<br><br>
<div class="gmail_quote">2010/1/7 Javier Cancio del Busto <span dir="ltr"><<a href="mailto:sepholin@gmail.com">sepholin@gmail.com</a>></span><br>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">El problema es que tarda en ocasiones un par de segundos en poner la ficha, sin semilla explícita lo hace al momento, y no queda presentable que tarde uno o dos segundos, ya que puede dar la sensación de que de ha quedado colgada la aplicación.<br>
<br>¿Alguna otra sugerencia? ¿O cómo hacer que al fijar la semilla en la hora no tarde tanto?</blockquote>
<div> </div>
<div>El problema no se basa en la aleatoriedad del algoritmo usado por las funciones estándares, sino en el uso de los valores retornados por 'rand()'. En otras palabras, la forma de escoger las casillas es el problema. Tu algoritmo se basa en ir sacar números hasta que acierte en una casilla vacía. Esto puede ser un problema ya que puede tardar varias iteraciones hasta dar con el número adecuado. Esto es porque no se toma en cuenta los intentos fallidos anteriores.</div>

<div> </div>
<div>La solución que propongo es crear un array de 9 números del 0 al 8. Por ejemplo,</div>
<div> </div>
<div>int indices[9] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };</div>
<div> </div>
<div>Ahora usa 'rand()' para reordenar pseudo-aleatoriamente los números en este array. El algoritmo puede ser simplemente el intercambiar parejas unas 10 veces, por ejemplo. Obtendríamos algo así,</div>
<div> </div>
<div>indices[] <- { 5, 3, 8, 1, 7, 6, 4, 0, 2 }</div>
<div> </div>
<div>Ahora usaremos este array de índices en tu algoritmo para escoger aleatoriamente una casilla. Por ejemplo,</div>
<div> </div>
<div>int i=0;<br>do {</div>
<div>                int casilla = indices[i]; // Se genera una casilla aleatoria, entre 0 - 8<br>            <br>                if (ocupados[casilla] == 0) // Si esta libre..<br>                {<br>                    ...<br>
                   codigo<br>                   ...</div>
<div>                    fichaFijada=1; // Hemos puesto la ficha, salimos del bucle<br>                    ocupados[casilla]=1; // Indicamos que esa casilla ahora esta ocupada por la maquina<br>                   <br>                }</div>

<div>                else i++;<br>            } while (fichaFijada == 0);</div>
<div> </div>
<div>Como puedes ver, si el primer índice no es válido, nos pasamos al segundo, y así hasta dar con una casilla libre. De esta manera, mantenemos un historial de los índices escogidos, por así decirlo.</div>
<div> </div>
<div> </div>
<div>Espero que esto te oriente.</div>
<div> </div>
<div>Steven</div>
<div> </div></div>