Bueno, lo que pasa es que ya tengo mi programa de snake que funciona a la perfeccionue funciona como quiero a la perfeccion.
Solo que ahora me gustaria pasarlo con archivos de encabezado .h, el problema que tengo es que tendo dos variables de tipo estructuras declaradas como variables globales y creo que lo mejor seria ponerlas como parametros dentro de las funciones ahora que quiero hacerlo de esta manera, pero no puedo, queria saber si algun de ustedes podria ponerme esas variables dentro de los parametros y que funcionara de igual manera, de hacerl los encabezados ya me haria cargo yo, les dejo el codigo aqui abajo.
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <windows.h>
#define V 21
#define H 65
#define N 100
typedef struct{ //serpiente.
int x,y; //coordenadas del cuerpo.
int ModX, ModY; //cambio de estado de x,y.
char imagen; //imagen del momento del cuerpo.
}snk;
typedef struct{ //alimnto.
int x,y; //coordenadas
}frt;
snk Snake[N];
frt fruta;
void inicio(int *tam, char campo[V][H]);
void Intro_Campo(char campo[V][H]);
void Intro_Datos(char campo[V][H], int tam);
void dibujar(char campo[V][H], int puntos);
void loop(char campo[V][H], int tam, int puntos);
void input(char campo[V][H], int *tam, int *muerto, int *puntos);
void update(char campo[V][H], int tam);
void Intro_Datos2(char campo[V][H], int tam);
int main(){
int tam,puntos=0; //Tamaño de serpiente n cada momento.
char campo[V][H]; //Matriz del campo
snk Snake[N];
frt fruta;
system("Color F2");
inicio(&tam,campo); //Iniciar todos nuestros elementos
// dibujar(campo[V][H]);
loop(campo, tam, puntos);
system("pause");
return 0;
}
//Iniciar todos nuestros elementos
void inicio(int *tam, char campo[V][H]){
int i;
//cabeza del snake
Snake[0].x=32;
Snake[0].y=10;
//Tamaño de la serpiente
*tam=4;
//Coordenas Fruta
srand(time(NULL));
fruta.x=rand()%(H-1);
fruta.y=rand()%(V-1);
while(fruta.x==0){
fruta.x=rand()%(H-1);
}
while (fruta.y==0){
fruta.y=rand()%(V-1);
}
for(i=0;i<*tam;i++){
Snake.ModX=1;
Snake.ModY=0;
}
Intro_Campo(campo);
Intro_Datos(campo, *tam);
}
//Creacion del campo de juego
void Intro_Campo(char campo[V][H]){
int i,j;
for(i=0;i<V;i++){
for(j=0;j<H;j++){
if(i==0 || i==V-1){
campo[j]= '/';
}
else if(j==0 || j== H-1){
campo[j]='|';
}
else{
campo[j]=' ';
}
}
}
}
//Metera todos los datos en la matriz campo
void Intro_Datos(char campo[V][H], int tam){
int i;
for (i=1;i<tam;i++){
Snake.x=Snake[i-1].x-1;
Snake.y=Snake[i-1].y;
Snake.imagen= 'X';
}
Snake[0].imagen='O';
for(i=0;i<tam;i++){
campo[Snake.y][Snake.x]=Snake.imagen;
}
campo[fruta.y][fruta.x]='+';
}
//Funcion para dibujar por pantalla todo lo que hay en la matriz campo
void dibujar(char campo[V][H], int puntos){
int i,j;
for(i=0;i<V;i++){
for(j=0;j<H;j++){
printf("%c", campo[j]);
}
printf("\n");
} printf("-----------------------------------------------------------------\n");
printf("---------------------Puntuacion: [%d]----------------------------\n",puntos);
printf("-----------------------------------------------------------------\n");
}
void loop(char campo[V][H], int tam, int puntos){
int muerto;
muerto=0;
do{
system("cls");
dibujar(campo, puntos);
input(campo,&tam,&muerto,&puntos);//modificamos tamaño
update(campo,tam);
}while(muerto==0);
}
void input(char campo[V][H], int *tam, int *muerto, int *puntos){
int i;
char key;
//comprobamos si estamos muertos
if (Snake[0].x==0 || Snake[0].x == H-1 || Snake[0].y == 0 || Snake[0].y== V-1){
*muerto=1;
}
for(i=1;i< *tam; i++){
if(Snake[0].x==Snake.x && Snake[0].y==Snake.y){
*muerto=1;
}
}
//comprabar si nos hemos comido las frutas
if(Snake[0].x == fruta.x && Snake[0].y == fruta.y){
*tam+=1;
*puntos+=10;
Snake[*tam-1].imagen = 'X';
fruta.x=rand()%(H-1);
fruta.y=rand()%(V-1);
while(fruta.x==0){
fruta.x=rand()%(H-1);
}
while (fruta.y==0){
fruta.y=rand()%(V-1);
}
}
if (*muerto == 0){
if (kbhit()==1){
key= getch();
if (key =='s'&& Snake[0].ModY != -1){
Snake[0].ModX = 0;
Snake[0].ModY = 1;
}
if (key =='w' && Snake[0].ModY != 1){
Snake[0].ModX = 0;
Snake[0].ModY = -1;
}
if (key == 'a' && Snake[0].ModX !=1){
Snake[0].ModX= -1;
Snake[0].ModY =0;
}
if (key == 'd' && Snake[0].ModX != -1){
Snake[0].ModX= 1;
Snake[0].ModY =0;
}
}
}
}
void update(char campo[V][H], int tam){
Intro_Campo(campo); //borrar los datos de la matriz
Intro_Datos2 (campo, tam);//Introducir nuevos datos
}
void Intro_Datos2(char campo[V][H], int tam){
int i;
//Crear la persecucion de los elementos del cuerpo
for(i=tam-1;i>0;i--){
Snake.x=Snake[i-1].x;
Snake.y= Snake[i-1].y;
}
Snake[0].x+=Snake[0].ModX;
Snake[0].y+= Snake[0].ModY;
for(i=0; i<tam;i++){
campo[Snake.y][Snake.x] = Snake.imagen;
}
campo [fruta.y][fruta.x]= '+';
}