Ayuda viborita en C

Dorian
31 de Octubre del 2003
Holas a todos:
Estoy tratando de hacer el juego de la viborita en C, el problema es que no puedo hacer que cresca cada ves que come un punto. Aqui esta mi codigo, espero que alguien me ayude:

/********************/
/* Creado por: */
/* Dorian Butron C. */
/********************/

#include<stdio.h>
#include<dos.h>
#include<conio.h>
#include<stdlib.h>

#define tcol 25 /* tama¤o del mundo en filas y columnas */
#define tfil 20

/* Funcion que crea el mundo donde se movera el gusano */

void cargar_m(char m[][tcol],int F,int C)
{
int i,j;

for(i=0;i<C;i++) m[0][i]='*'; /* los primeros cuatro bucles crean el muro */
for(i=1;i<F;i++) m[i][C-1]='*';
for(i=0;i<C;i++) m[F-1][i]='*';
for(i=1;i<F-1;i++) m[i][0]='*';

for(i=1;i<F-1;i++)
for(j=1;j<C-1;j++) m[i][j]=32; /* este bucle anidado crea espacios en todo el relleno para poder moverse */
}

/* Funcion que imprime en pantalla toda la matriz con todos los elentos cargados */

void mostrar_m(char m[][tcol],int F,int C,int puntos)
{
int i,j;
clrscr();
for(i=0;i<F;i++)
{
for(j=0;j<C;j++) printf("%c",m[i][j]);
printf("n");
}
printf("nn< %i Puntos >",puntos*9); /* imprime el puntaje cada 9 puntos */
}

/* Funcion que crea comida randomicamente en la matriz, y verifica si el relleno esta vacio para generar otra comida */

void comida(char m[][tcol],int F,int C,int x,int y,int *puntosB)
{
int i,j,p;

p=64;
for(i=1;i<F-1;i++)
{
if(p!=32&&p!=64) break;
for(j=1;j<C-1;j++)
{
p=m[i][j];
if(p!=32&&p!=64) break;
}
}
if(p==32) {
*puntosB+=1; /* acumula 1 cada ves que entra al IF alla donde apunta puntos */
x=1+random(F-2);
y=1+random(C-2);
m[x][y]=2;
}
mostrar_m(m,F,C,*puntosB);
}

/* Funcion con la que hacemos mover a nuestro gusano */

void gusano(char m[][tcol],int F,int C,int nivel)
{
int i=F/2,j=C/2,x,y; /* coordenadas donde comenzara a moverse el gusano */
int puntos=0;
char c; /* caracter para lectura del teclado */

m[i][j]='@'; /* el gusano no es solo una arrova */
x=1+random(F-2);
y=1+random(C-2);
m[x][y]=2; /* comida del gusano */

while(1)
{
mostrar_m(m,F,C,puntos);

if(kbhit())
{
c=getch(); /* lee las flechas de direccion */
if(c==0) c=getch();
switch(c)
{ case 75: {
if(j>1) /* si j no es mayor de 1 quiere decir que esta al borde izquierdo */
{
while(j!=0) /* este bucle le da el movimiento automatico,la condicion es con 0 para poder perder, por que el muro siempre es j=0 */
{
if(kbhit()) break; /* si se presiona alguna otra tecla, se rompe el bucle */
comida(m,F,C,x,y,&puntos); /* mandamos la direccion de puntos para que se puedan sumar desde fuera de la funcion */
m[i][j]=' ';
j--;
m[i][j]='@';
delay(nivel); /* la velocidad con que se mueve el gusano */
}
}
break;
}
case 77: {
if(j<C-2) {
while(j!=C-1)
{
if(kbhit()) break;
comida(m,F,C,x,y,&puntos);
m[i][j]=' ';
j++;
m[i][j]='@';
delay(nivel);
}
}
break;
}
case 72: {
if(i>1) {
while(i!=0)
{
if(kbhit()) break;
comida(m,F,C,x,y,&puntos);
m[i][j]=' ';
i--;
m[i][j]='@';
delay(nivel);
}
}
break;
}
case 80: {
if(i<F-2) {
while(i!=F-1)
{
if(kbhit()) break;
comida(m,F,C,x,y,&puntos);
m[i][j]=' ';
i++;
m[i][j]='@';
delay(nivel);
}
}
break;
}
case 27: exit(0); /* para salirse del juego */
}
if(i==0||j==0||i==F-1||j==C-1) /* si es que alguna de estas condiciones se cumple, quiere decir que el gusano se choco en el muro */
{
m[i][j]='X'; mostrar_m(m,F,C,puntos); printf("Perdiste"); getch(); exit(0);
}

}
}
}

void main(void)
{
int x;
long int nivel;
char m[tfil][tcol];
clrscr();
randomize(); /* cambia los valores randomicos, para que la comida no salga en los mismos lugares cada ves que se comienze nuevo juego */
printf("JUEGO DE LA VIVORITA");
printf("nCreado por Dorian Butron C.");
do{
printf("nnElija el nivel (1-9): ");
scanf("%i",&x); /* lee el nivel que escoje el usuario del 1 al 9, donde 1 es mas dificil y 9 es mas facil */
fflush(stdin);
}while(x<1||x>9);
nivel=x*5000;
cargar_m(m,tfil,tcol);
gusano(m,tfil,tcol,nivel);
getch();
}