Ayuda con juego en C++

Iniciado por SonicBlader, 15 Mayo 2012, 21:31 PM

0 Miembros y 1 Visitante están viendo este tema.

SonicBlader

tengo el siguiente codigo para un juego

#include <stdio.h>
#include <graphics.h>

#define tam 25
#define prof tam/2
#define N 15
#define P 10
#define NUMBOTONES 4
#define NORMAL 1
#define PRE 0

typedef struct{
        int x,y;
        int color;
        int existe;
        }TCubo; 
           
typedef struct{
        int m,r,c;
        int color;
        }TJugador;
       
typedef struct{
        char nombre[50];
        int puntos;
        }Registro;
       
typedef struct{
        int w,z,numer;
        char texto[100];
        int tipo;
        int tamax, tamay;
        }TBoton;
       
void portada();
void cubo(int x, int y, int color);
void pintacontenedor(TCubo cont[N][N][N]);
void creacontenedor (int x, int y, TCubo cont[N][N][N]);
void creacontenedor2 (int x, int y, TCubo cont[N][N][N]);
void creacontenedor3 (int x, int y, TCubo cont[N][N][N]);
void creacontenedor4 (int x, int y, TCubo cont[N][N][N]);
void creacontenedor5 (int x, int y, TCubo cont[N][N][N]);
void creacontenedor6 (int x, int y, TCubo cont[N][N][N]);
void creacontenedor7 (int x, int y, TCubo cont[N][N][N]);
void creacontenedor8 (int x, int y, TCubo cont[N][N][N]);
void creacontenedor9 (int x, int y, TCubo cont[N][N][N]);
void creacontenedor10 (int x, int y, TCubo cont[N][N][N]);
void creajugador(int x,int y, TCubo cont[N][N][N]);
void pintaambiente();
void mueve_bala(TCubo cont[N][N][N],int *vida,int *punto);
void puntos(int *vida,int *punto);
void juego(char nombre[]);
void ayuda(char nombre_archivo[],int x1, int y1, int x2, int y2);
void imprime_tiempo(clock_t ini, int x1, int y1, int x2, int y2);
void guarda_registro(char nombre_archivo[],Registro j);
void imprime_registro(char nombre_archivo[],Registro j);
void llenabotones(TBoton b[]);
void dibujaboton(TBoton b);
void dibujabotones(TBoton b[], int n);
int checaboton(TBoton b[], int wm, int zm);
void llenaboton(int numer,int w, int z,char texto[],TBoton *b);
int menu(TBoton Bot[]);
void dispara(TCubo cont[N][N][N]);   

int main( )
{
    TBoton botones[NUMBOTONES];
    const int DELAY=50;
    int w,z,bot;
    Registro jugador;
   
    initwindow( 1280 , 800 , "Mi mundo" );
   
    portada();
    menu(botones);
    srand(time(NULL));
    do
    {
     clearmouseclick(WM_LBUTTONDOWN);
   
     while(!ismouseclick(WM_LBUTTONDOWN))
      delay(DELAY);   
     
     getmouseclick(WM_LBUTTONDOWN,w,z); 
     bot=checaboton(botones,w,z);
     if(bot>=0)
     {
      botones[bot].tipo=PRE;
      dibujaboton(botones[bot]);
      delay(100);
      botones[bot].tipo=NORMAL;
      dibujaboton(botones[bot]);
     
      switch(bot)
      {
       case 0:cleardevice();
              juego("Luis");
              break;
       case 1:cleardevice();
              ayuda("ayuda.txt",5,5,getmaxx()-5,getmaxy()-5);
              cleardevice();
              break;
       case 2:cleardevice();
              imprime_registro("registro.dat",jugador);
              cleardevice();
              break;
       }
      }
    }while(bot!=3);
   
closegraph();
   
return( 0 );
}

void portada()
{
    int xmed, ymed;
    xmed=getmaxx()/2;
    ymed=getmaxy()/2;
    setcolor(7);
settextstyle(4,0,3);
outtextxy(210,90, "UNIVERSIDAD AUTONOMA DE SAN LUIS POTOSI");
setcolor(2);
settextstyle(2,0,10);
outtextxy(480,120, "COMBAT C");
setcolor(9);
settextstyle(6,0,16);
outtextxy(230,160,"Por Luis Daniel Corona Rico");
setcolor(15);
settextstyle(8,0,10);
setcolor(1);
settextstyle(4,0,4);
outtextxy(280,210,"Estructura de Datos y Algoritmos A");
setcolor(3);
settextstyle(10,0,5);
outtextxy(265,250,"Profesora Silvia Luz Vaca Rivera");
getch();
cleardevice();
}

void cubo(int x, int y, int color)
{
   int puntos[14];
   setcolor(15);
   setfillstyle(1,color);
   bar(x,y,x+tam,y+tam);
   rectangle(x,y,x+tam,y+tam);
   puntos[0]=x;
   puntos[1]=y;
   puntos[2]=x+tam;
   puntos[3]=y;
   puntos[4]=x+tam+prof;
   puntos[5]=y-3*prof/4;
   puntos[6]=x+prof;
   puntos[7]=y-3*prof/4;
   fillpoly(4,puntos);
   puntos[0]=x+tam;
   puntos[1]=y;
   puntos[2]=x+tam;
   puntos[3]=y+tam;
   puntos[4]=x+tam+prof;
   puntos[5]=y+tam-3*prof/4;
   puntos[6]=x+tam+prof;
   puntos[7]=y-3*prof/4;
   fillpoly(4,puntos);
}

void pintacontenedor(TCubo cont[N][N][N])
{
   int i,j,k;
   
   rectangle(cont[0][N-1][0].x+prof,cont[0][N-1][0].y-(3*prof/4),cont[0][0][N-1].x+tam+prof,cont[0][0][N-1].y+tam-(3*prof/4));
   line(cont[0][N-1][0].x+prof,cont[0][N-1][0].y-(3*prof/4),cont[N-1][N-1][0].x,cont[N-1][N-1][0].y);
   line(cont[0][0][0].x+prof,cont[0][0][0].y+tam-(3*prof/4),cont[N-1][0][0].x,cont[N-1][0][0].y+tam); 
    for(k=0; k<N; k++)
for(j=0; j<N; j++)
  for(i=0; i<N; i++)
   {
   if(cont[k][j][i].existe==1)
    cubo(cont[k][j][i].x,cont[k][j][i].y,cont[k][j][i].color);
   }
   setcolor(9);
   rectangle(cont[N-1][N-1][0].x,cont[N-1][N-1][0].y,cont[N-1][0][N-1].x+tam,cont[N-1][0][N-1].y+tam);
   line(cont[0][N-1][N-1].x+tam+prof,cont[0][N-1][N-1].y-(3*prof/4),cont[N-1][N-1][N-1].x+tam,cont[N-1][N-1][N-1].y);
   line(cont[0][0][N-1].x+tam+prof,cont[0][0][0].y+tam-(3*prof/4),cont[N-1][0][N-1].x+tam,cont[N-1][0][N-1].y+tam);
}

void pintaambiente()
{
     line(100,0,100,670);
     line(100,670,1100,670);
     line(1100,670,1100,0);
     setcolor(2);
     settextstyle(4,0,14);
     outtextxy(370,700, "Nombre:");
     outtextxy(155,700,"Tiempo:");
     outtextxy(870,700,"Puntos:");
     outtextxy(870,730,"Vidas:");
     setcolor(4);
     settextstyle(2,0,21),
     outtextxy(40,70,"C");
     outtextxy(40,140,"O");
     outtextxy(40,220,"M");
     outtextxy(40,300,"B");
     outtextxy(40,380,"A");
     outtextxy(40,460,"T");
     outtextxy(40,600,"C");
     outtextxy(1130,70,"C");
     outtextxy(1130,140,"O");
     outtextxy(1130,220,"M");
     outtextxy(1130,300,"B");
     outtextxy(1130,380,"A");
     outtextxy(1130,460,"T");
     outtextxy(1130,600,"C");
     setcolor(2);
}
     
void creacontenedor (int x, int y, TCubo cont[N][N][N])
{
  int i,j,k;
 
  for(k=0;k<N;k++)
   for(j=0;j<N;j++)
    for(i=0;i<N;i++)
    {
      cont[k][j][i].x=x+(i*tam)-(k*prof);
      cont[k][j][i].y=y-(j*tam)+(k*3*prof/4);
      cont[k][j][i].color=2;
      if(k==7 && j==4 && i>2 && i<10)
       cont[k][j][i].existe=1;
    }
}

void creacontenedor2 (int x, int y, TCubo cont[N][N][N])
{
  int i,j,k;
 
  for(k=0;k<N;k++)
   for(j=0;j<N;j++)
    for(i=0;i<N;i++)
    {
      cont[k][j][i].x=x+(i*tam)-(k*prof);
      cont[k][j][i].y=y-(j*tam)+(k*3*prof/4);
      cont[k][j][i].color=5;
      if(j==7 && k==7 && i>6 && i<13)
       cont[k][j][i].existe=1;
    }
}

void creacontenedor3 (int x, int y, TCubo cont[N][N][N])
{
  int i,j,k;
 
  for(k=0;k<N;k++)
   for(j=0;j<N;j++)
    for(i=0;i<N;i++)
    {
      cont[k][j][i].x=x+(i*tam)-(k*prof);
      cont[k][j][i].y=y-(j*tam)+(k*3*prof/4);
      cont[k][j][i].color=2;
      if(k==7 && j==10 && i>4 && i<8)
       cont[k][j][i].existe=1;
    }
}

void creacontenedor4 (int x, int y, TCubo cont[N][N][N])
{
  int i,j,k;
 
  for(k=0;k<N;k++)
   for(j=0;j<N;j++)
    for(i=0;i<N;i++)
    {
      cont[k][j][i].x=x+(i*tam)-(k*prof);
      cont[k][j][i].y=y-(j*tam)+(k*3*prof/4);
      cont[k][j][i].color=2;
      if(k==7 && j==13 && i>3 && i<10)
       cont[k][j][i].existe=1;
    }
}

void creacontenedor5 (int x, int y, TCubo cont[N][N][N])
{
  int i,j,k;
 
  for(k=0;k<N;k++)
   for(j=0;j<N;j++)
    for(i=0;i<N;i++)
    {
      cont[k][j][i].x=x+(i*tam)-(k*prof);
      cont[k][j][i].y=y-(j*tam)+(k*3*prof/4);
      cont[k][j][i].color=2;
      if(j==14 && k==7 && i>10 && i<N)
       cont[k][j][i].existe=1;
    }
}

void creacontenedor6 (int x, int y, TCubo cont[N][N][N])
{
  int i,j,k;
 
  for(k=0;k<N;k++)
   for(j=0;j<N;j++)
    for(i=0;i<N;i++)
    {
      cont[k][j][i].x=x+(i*tam)-(k*prof);
      cont[k][j][i].y=y-(j*tam)+(k*3*prof/4);
      cont[k][j][i].color=2;
      if(j>13 && k==2 && i==2)
       cont[k][j][i].existe=1;
    }
}

void creacontenedor7 (int x, int y, TCubo cont[N][N][N])
{
  int i,j,k;
 
  for(k=0;k<N;k++)
   for(j=0;j<N;j++)
    for(i=0;i<N;i++)
    {
      cont[k][j][i].x=x+(i*tam)-(k*prof);
      cont[k][j][i].y=y-(j*tam)+(k*3*prof/4);
      cont[k][j][i].color=4;
      if(j>7 && k==9 && i==2)
       cont[k][j][i].existe=1;
    }
}

void creacontenedor8 (int x, int y, TCubo cont[N][N][N])
{
  int i,j,k;
 
  for(k=0;k<N;k++)
   for(j=0;j<N;j++)
    for(i=0;i<N;i++)
    {
      cont[k][j][i].x=x+(i*tam)-(k*prof);
      cont[k][j][i].y=y-(j*tam)+(k*3*prof/4);
      cont[k][j][i].color=4;
      if(j>13 && k==10 && i==2)
       cont[k][j][i].existe=1;
    }
}

void creacontenedor9 (int x, int y, TCubo cont[N][N][N])
{
  int i,j,k;
 
  for(k=0;k<N;k++)
   for(j=0;j<N;j++)
    for(i=0;i<N;i++)
    {
      cont[k][j][i].x=x+(i*tam)-(k*prof);
      cont[k][j][i].y=y-(j*tam)+(k*3*prof/4);
      cont[k][j][i].color=4;
      if(j>13 && k==11 && i==2)
       cont[k][j][i].existe=1;
    }
}

void creacontenedor10 (int x, int y, TCubo cont[N][N][N])
{
  int i,j,k;
 
  for(k=0;k<N;k++)
   for(j=0;j<N;j++)
    for(i=0;i<N;i++)
    {
      cont[k][j][i].x=x+(i*tam)-(k*prof);
      cont[k][j][i].y=y-(j*tam)+(k*3*prof/4);
      cont[k][j][i].color=4;
      if(j>13 && k==12 && i==2)
       cont[k][j][i].existe=1;
    }
}

void creajugador(int x,int y, TCubo cont[N][N][N])
{
int i,j,k;
 
  for(k=0;k<N;k++)
   for(j=0;j<N;j++)
    for(i=0;i<N;i++)
    {
      cont[k][j][i].x=x+(i*tam)-(k*prof);
      cont[k][j][i].y=y-(j*tam)+(k*3*prof/4);
      cont[k][j][i].color=rand()%14+1;
      if(j==1 && k==1 && i==3)
       cont[k][j][i].existe=1;
    }
}

void juego(char nombre[])
{
    int x=500,y=400;
    int tecla;
    TCubo contenedor[N][N][N];
    TJugador jugador={14,4,7,4};
    TJugador maquina={0,0,0,8};
    Registro jug;
    int vid=3,pun=0;
    int p=3, col=3;
    int n_pag=0,aux;
    int mueve,oj;
    clock_t inicio, actual;
   
    setactivepage(0);
    pintaambiente();
   
    setactivepage(1);
    pintaambiente();
   
    maquina.m=rand()%N;
    maquina.c=rand()%N;
    maquina.r=N-1;
    maquina.color=3;
    puntos(&vid,&pun);
   // creacontenedor(x,y,contenedor);
   // creacontenedor2(x,y,contenedor);
    creacontenedor3(x,y,contenedor);
  //  creacontenedor4(x,y,contenedor);
  //  creacontenedor5(x,y,contenedor);
    setvisualpage(n_pag);
    inicio=clock();
    strcpy(jug.nombre,nombre);
    jug.puntos=0;
    do
    {
     do
     {
      contenedor[jugador.m][jugador.r][jugador.c].existe=1;
      contenedor[jugador.m][jugador.r][jugador.c].color=jugador.color;
      contenedor[maquina.m][maquina.r][maquina.c].existe=1; //Enciende maquina
      contenedor[maquina.m][maquina.r][maquina.c].color=maquina.color;
      n_pag=(n_pag+1)%2;
      setactivepage(n_pag);
      setfillstyle(0,0);
      bar(102,1,1098,669);
      pintacontenedor(contenedor);
      setcolor(15);
      settextstyle(4,0,14);
      imprime_tiempo(inicio,242,739,302,691);
      setvisualpage(n_pag);
      mueve=rand()%2;
      mueve=1;
      if(mueve==1)
      {
       mueve_bala(contenedor,&vid,&pun);
       puntos(&vid,&pun);
      }
      mueve=rand()%20;
      if(mueve==1)
      {
       if(pun==100)
       {
        vid+=1;
        pun=0;
        }
       }     
                 
      }while(!kbhit());
      delay(90);
      contenedor[maquina.m][maquina.r][maquina.c].existe=0; //Apaga maquina
      contenedor[maquina.m][maquina.r][maquina.c].color=0;                       
      if(kbhit())
      {
       tecla=getch();
       if(tecla==0)
        tecla=getch();
       contenedor[jugador.m][jugador.r][jugador.c].existe=0; //Apaga jugador
       contenedor[jugador.m][jugador.r][jugador.c].color=0;
       switch(tecla)
       {
        case 77: if(jugador.c<N-1 && contenedor[jugador.m][jugador.r][jugador.c+1].existe==0)
                 jugador.c++;
                 break; 
        case 75: if(jugador.c>0 && contenedor[jugador.m][jugador.r][jugador.c-1].existe==0)
                   jugador.c--;
                 break;       
        case 72: if(jugador.r<N-1 && contenedor[jugador.m][jugador.r+1][jugador.c].existe==0)
                   jugador.r++;
                 break; 
        case 80: if(jugador.r>0 && contenedor[jugador.m][jugador.r-1][jugador.c].existe==0)
                   jugador.r--;
                 break;   
        case 's':if(jugador.m<N-1 && contenedor[jugador.m+1][jugador.r][jugador.c].existe==0)
                   jugador.m++;
                 break; 
        case 'w': if(jugador.m>0 && contenedor[jugador.m-1][jugador.r][jugador.c].existe==0)
                   jugador.m--;
                 break; 
        case 'e': dispara(contenedor);     
                  break;
        }
      }   
   }while(tecla!=27);     
  guarda_registro("registro.dat",jug);           
}   
               
void ayuda(char nombre_archivo[],int x1, int y1, int x2, int y2)
{
     FILE *f;
     char texto[100];
     int x=100,y=y1+10;
     settextstyle(4,0,14);
     f=fopen(nombre_archivo,"r");
     if(f==NULL)
     {
      outtextxy(654,230,"Archivo no existente\n");
      getch();
     }
     else
     {
      cleardevice();
      setcolor(15);
      rectangle(x1,y1,x2,y2);
     
      while(!feof(f))
      {
       fgets(texto,100,f);
       x=x1+((x2-x1-textwidth(texto))/2);
       outtextxy(620,y,texto);
       y+=textheight(texto);   
       if(y>y2-20)
       {
        outtextxy(400,y,"Presiona una tecla para continuar");
        getch();
        cleardevice();
        setcolor(15);
        rectangle(x1,y1,x2,y2);
        y=y1+10;
       }
      }
      getch();
      fclose(f);
     }
}

void imprime_tiempo(clock_t ini, int x1, int y1, int x2, int y2)
{
  clock_t actual;
  int seg,min,x,y;
  char cadena[10];
 
  actual=clock();

  setfillstyle(1,0);
  bar(x1+1,y1+1,x2-1,y2-1);
  seg=(actual-ini)/CLK_TCK;
  min=seg/60;
  seg=seg%60;
  sprintf(cadena,"%d:%d",min,seg);
  y=y1+(((y2-y1)-textheight(cadena))/2);
  x=x1+(((x2-x1)-textwidth(cadena))/2);
  outtextxy(x,y,cadena);
}

void guarda_registro(char nombre_archivo[],Registro j)
{
FILE *f;
Registro records[P], r={"",0}; 
int i,band=0;
     
f=fopen(nombre_archivo,"rb+");   
if(f==NULL)
{
  f=fopen(nombre_archivo,"wb");
  records[0]=j;   
  for(i=1;i<P;i++)
  {
   records[i]=r;
  }
  fwrite(records, sizeof(Registro), P, f);
  fclose(f);
}
else
{
  fread(records, sizeof(Registro), P, f);     
  for(i=P-1;i>=0 && band==0;i--)
  {
   if(records[i].puntos<j.puntos)
   {
    if(i<P-1)
     records[i+1]=records[i];
   }
   else
   {
    if(i<P-1)   
     records[i+1]=j;
    band=1;
   }
  }
  if(band==0)
   records[i+1]=j;
  fseek(f,0,SEEK_SET);
  fwrite(records, sizeof(Registro), P, f);
  fclose(f);
}
}

void imprime_registro(char nombre_archivo[],Registro j)
{
  FILE *f;
  Registro records[P];
  char nombre[70];
  int puntos;
  int i;
  int x=230, y=870;
 
  f=fopen(nombre_archivo,"rb");   
  fread(records, sizeof(Registro), P, f);
  settextstyle(4,0,14);
  for(i=P-1;i>=0;i--)
  {
   y=y-40; 
  }
  fclose(f);
  getch();
}

void mueve_bala(TCubo cont[N][N][N],int *vida,int *punto)
{
int k,j,i;
for(k=0;k<N;k++)
{
  for(j=0;j<N;j++)
  {
  for(i=N-1;i>=0;i--)
   if(cont[k][j][i].color==1 && cont[k][j][i].existe==1)
   {
    if(cont[k][j][i].color==1 && cont[k][j][i].existe==1 && cont[k-1][j][i].color==3 && cont[k-1][j][i].existe==1)
    {
     cont[k][j][i].existe=0; 
     cont[k-1][j][i].existe=0;
     *punto+=50;
    }
    else
    {
     if(i<N-1)
     {
      cont[k-1][j][i].color=1;
      cont[k-1][j][i].existe=1;
     }
     cont[k][j][i].existe=0;
    }                       
   }
  }
}
}           

void puntos(int *vida,int *punto)
{
  char vidas[40];
  char puntos[40];

  settextstyle(4,0,14);
  setcolor(WHITE);
  sprintf(puntos,"%d",*punto);
  outtextxy(950,701,puntos);

  sprintf(vidas,"%d",*vida);
  outtextxy(950,731,vidas);
}

void dispara(TCubo cont[N][N][N])
{
int k,j,i;
for(k=0;k<N;k++)
  for(j=0;j<N;j++)
   for(i=0;i<N;i++)
    if(cont[k][j][i].color==0 && cont[k][j][i].existe==1)
    {
     cont[k-1][j][i].color=1;
     cont[k-1][j][i].existe=1;
     cont[k][j][i].existe=1;
    }
}

void llenaboton(int numer,int w, int z,char texto[],TBoton *b)
{
b->numer=numer;
b->w=w;
b->z=z;
strcpy(b->texto, texto);
b->tipo=NORMAL;
b->tamax=2*textwidth(texto);
b->tamay=2*textheight(texto);
}

void llenabotones(TBoton b[])
{
llenaboton(1,500,100,"JUEGO",&b[0]);
llenaboton(2,498,210,"AYUDA",&b[1]);
llenaboton(3,430,340,"RECORDS",&b[2]);
llenaboton(4,525,460,"SALIR",&b[3]);
}

void dibujaboton(TBoton b)
{
int color;
color=b.tipo==NORMAL?LIGHTGRAY:DARKGRAY;
setfillstyle(SOLID_FILL,0);
bar(b.w, b.z, b.w+b.tamax, b.z+b.tamay);
setcolor(color);
line(b.w, b.z, b.w+b.tamax, b.z);
line(b.w, b.z, b.w, b.z+b.tamay);
color=b.tipo==NORMAL?DARKGRAY:LIGHTGRAY;
setcolor(color);
line(b.w, b.z+b.tamay, b.w+b.tamax, b.z+b.tamay);
line(b.w+b.tamax, b.z, b.w+b.tamax, b.z+b.tamay);
setcolor(15);
settextjustify(1,1);
outtextxy(b.w+b.tamax/2, b.z+b.tamay-30, b.texto);
}

void dibujabotones(TBoton b[], int n)
{
int i;
  for(i=0;i<n;i++)
   dibujaboton(b[i]);
}

int menu(TBoton Bot[])
{
outtextxy(460,50,"MENU PRINCIPAL");
llenabotones(Bot);
dibujabotones(Bot, NUMBOTONES);
}

int checaboton(TBoton b[], int wm, int zm)
{
int i;
int bot=-1,w1,z1,w2,z2;
for(i=0;i<NUMBOTONES && bot==-1;i++)
{
  w1=b[i].w;
  w2=b[i].w+b[i].tamax;
  z1=b[i].z;
  z2=b[i].z+b[i].tamay;
  if(wm>=w1 && wm<=w2 && zm>=z1 && zm<=z2)
  bot=i;
}
return(bot);
}


El problema es que a la hora de correrlo, me salen unos cubos aleatorios que no he escrito en ninguna parte del codigo y restringen mucho el movimiento del jugador, ademas de que el disparo no funciona (la bala debe ir de adelante del jugador hacia donde toque o una pared o al enemigo).

Me prodrian ayudar con algunos consejos o modificaciones del codigo. No es necesario que vuelva a ponerlo todo, solo señalenme las partes donde podria hacer o donde han echo modificaciones para que eso mejore. Se los agradeceria mucho.

bemone

void creacontenedor (int x, int y, TCubo cont[N][N][N]);
void creacontenedor2 (int x, int y, TCubo cont[N][N][N]);
void creacontenedor3 (int x, int y, TCubo cont[N][N][N]);
void creacontenedor4 (int x, int y, TCubo cont[N][N][N]);
void creacontenedor5 (int x, int y, TCubo cont[N][N][N]);
void creacontenedor6 (int x, int y, TCubo cont[N][N][N]);
void creacontenedor7 (int x, int y, TCubo cont[N][N][N]);
void creacontenedor8 (int x, int y, TCubo cont[N][N][N]);
void creacontenedor9 (int x, int y, TCubo cont[N][N][N]);
void creacontenedor10 (int x, int y, TCubo cont[N][N][N]);

Esto lo podes achicar a un solo procedimiento pasando parametros!!!
Odio los tipos de variable de Windows.