Esto va al foro de .NET pero ya te digo: un juego de la oca es un array de 63 casillas. Que sobre un tablero lo veas en espiral es para ahorrar espacio. En verdad es un juego muy sencillo de realizar.
				
			Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú
int **tabla;
int m, n;
int i;
/* Se obtienen las dimensiones de la tabla m y n
 * n para el número de filas
 * m para el número de columnas
 */
/* Se genera el primer array dinámico que contendrá n filas */
tabla = malloc(sizeof(int*) * filas);
/* Las filas son punteros porqué contendrán la dirección de inicio
 * del array columnas.
 * Por tanto, para cada elemento de filas, reservamos una porción de
 * memoria de m elementos.
 */
for(i = 0; i < filas; ++i)
    tabla[i] = malloc(sizeof(int) * columnas);  /* Se puede apreciar notación de array para un puntero */
int **tabla;
int m, n;
int i;
/* Obtenemos el número de filas: n */
tabla = malloc(sizeof(*int) * n);
for(i = 0; i < n; ++i) {
    /* Obtenemos el número de columnas m de la fila actual i */
    /* Creamos el array de m columnas */
    tabla[i] = malloc(sizeof(int) * m);
}
/* Supongamos lo siguiente */
typedef struct node_t {
    int i;
    node_t *next;
} node;
void free_node(node **n) {
    node *aux = *n;
    if(aux) {
        free(aux);
        *n = NULL;
}
/* === Código que llama a la función === */
/* Supongamos nodo como un elemento que ya tiene memoria asignada
 * con malloc, es decir: * 
 * node *nodo = malloc(sizeof(node));
 * o una función que genere e inicialice un dato node.
 * Ya hemos trabajado con él y ahora debemos borrarlo. Además
 * se debe llevar a NULL el puntero, por lo que haremos uso
 * de la función free_node que forma parte de las funciones de éste tipo
 * de datos.
 */
free_node(&nodo);#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int main() {
    char palabra[50];
    char parchivo[50];
    FILE *fp;
    int i;
    int encontrada = 0;
    
    printf("Buscar > ");
    fgets(palabra, 50, stdin);
    *strchr(palabra, '\n') = '\0'; // Elimino la nueva linea
    
    for(i = 0; i < strlen(palabra); ++i) // No sensible a la capitalización
        palabra[i] = tolower(palabra[i]);
    fp = fopen("diccionario.txt", "r");
    if(!fp) {
        fprintf(stderr, "Archivo diccionario.txt no encontrado");
        exit(EXIT_FAILURE);
    }
    
    fgets(parchivo, 50, fp);
    while(!encontrada && !feof(fp)) {
        *strchr(parchivo, '\n') = '\0';
        
        for(i = 0; i < strlen(parchivo); ++i)
            parchivo[i] = tolower(parchivo[i]);
            
        if(!strncmp(palabra, parchivo, 50)) // comparo dos cadenas
            encontrada = 1;
        fgets(parchivo, 50, fp);
    }
    
    if(encontrada)
        printf("Palabra encontrada\n");
    else
        printf("Palabra no encontrada\n");
    
    fclose(fp);
    
    return EXIT_SUCCESS;
}
				char *password=malloc(8*sizeof(char))+1;char *password=malloc((8+1)*sizeof(char)); para guardar la cadena más el caracter nulo.
for(i=0;i<4;i++)
    password[i]=(int)rand()%10+'0';;free(contrasena);