Problema a la hora de hacer el space invaders!

Agrupa todas las consultas sobre los lenguajes de programacion como C, C++, Python, Java ...

Problema a la hora de hacer el space invaders!

Notapor dario279 » Sab Nov 14, 2009 12:36 pm

Estoy haciendo una version muy basica del space invaders y a la hora de crear una matriz para poner todos los aliens juntos. no soy capaz de pintar mi registro de alien, q tiene la forma, en la matriz grandota q aran q todos se muevan a la vez.

Pongo el codigo de la parte q tengo echa.

Código: Seleccionar todo
#include "RutinesINVADERS_v1.h"
/*En aquesta primera part inicialitzem els registres, ja que tenim guardades les constatns al RutinesINVADERS_v1.h*/

typedef struct
{
   int x;
   int y;
   int matriu [MidaPers] [MidaPers];
   int actiu;
}tipus_alien;

typedef struct
{
   int x;
   int y;
   int matriu [MidaPers] [MidaPers];
   int actiu;
}tipus_cano;

typedef struct
{
   int x;
   int y;
   int actiu;
}tipus_missil;

/*Assignem nom a les varibles*/

void main()
{
   tipus_alien alien;
   tipus_cano cano;
   tipus_missil missil;
   int taula_bloc_aliens [tamany_aliens_alt] [tamany_aliens_ample];
   char tecla, continuar;
   int i, j, k, l, dir_alien, x_missil_alien, contador_aliens, xoc_alien_cano, sortir, xbloc, ybloc;
   int Pantalla [AlssadaTaulell] [AmpladaTaulell];
   int num, vides, punts;
   char jugador[20];
   printf("Escriu el teu nom\n");
   gets(jugador);
   CreaTaulell();

   /*En aquesta part abans de la inicialitzacio del joc donem forma als aliens i al cano*/
   for (i=0; i < tamany_aliens_alt; i++)
      for (j=0; j < tamany_aliens_ample; j++)
         taula_bloc_aliens [i] [j] = 1;
   
   for (i=0; i<MidaPers; i++)
      for (j=0; j<MidaPers; j++)
      {
         alien.matriu[i][j] = 4;
         alien.matriu[1][1] = 0;
         alien.matriu[2][1] = 0;
      }
         
   for (i=0; i<MidaPers; i++)
      for (j=0; j<MidaPers; j++)
      {
         cano.matriu[i][j] = 4;
         cano.matriu[0][0] = 0;
         cano.matriu[0][2] = 0;
      }
   for (i=0; i < AlssadaTaulell; i++)
      for (j=0; j < AmpladaTaulell; j++)
         Pantalla[i] [j] = 0;

   /*Inicialitzem el joc, posem les posicions dels objectes que hi seran en pantalla i els pintem en aquesta*/
   do
   {
      cano.x = AmpladaTaulell / 2;
      cano.y = AlssadaTaulell - 3;
      cano.actiu = 1;
      xbloc = 0;
      ybloc =0;
      dir_alien = 1;
      PosaPersonatge(cano.matriu,Pantalla,cano.x,cano.y);
      PosaPersonatge2(taula_bloc_aliens, Pantalla, xbloc, ybloc);
      
      missil.x = cano.x;
      missil.y = cano.y;
      missil.actiu = 0;
      
      vides = 3;
      punts = 0;
      contador_aliens = 0;
      MostraJugador(jugador);
      MostraPunts(punts);
      MostraVides(vides);
      
      /*Bucle principal que es repetira sempre que no es cumpleixin unes de les condicions de sortida*/
      
      do
      {
         MostraPantalla(Pantalla);
            while (kbhit())
            {
               tecla = getch();
               {
                  if (tecla = -32)
                  {
                     tecla = getch();
                     switch (tecla)
                     {   
                        case KEY_UP:
                           if (missil.actiu == 0)
                           {
                              missil.actiu = 1;
                              missil.x = cano.x;
                              missil.y = AlssadaTaulell-5;
                              PosaTretCano(Pantalla,missil.x,missil.y);
                           }
                                 break;
                        case KEY_LEFT:
                           if (cano.x > 1)
                           {
                              BorraPersonatge(cano.matriu, Pantalla, cano.x, cano.y);
                              cano.x = cano.x -1;
                              PosaPersonatge(cano.matriu,Pantalla,cano.x,cano.y);
                           }
                              break;
                        case KEY_RIGHT:
                           if (cano.x < AmpladaTaulell-4)
                           {
                              BorraPersonatge(cano.matriu, Pantalla, cano.x, cano.y);
                              cano.x = cano.x + 1;
                              PosaPersonatge(cano.matriu,Pantalla,cano.x,cano.y);
                           }
                              break;
                        default:
                        break;
                     }
                  }
                  if (tecla == KEY_ESC)
                     sortir = 1;
               }
            }
            if (sortir != 1)
            {   
               if (((xbloc == 0) & (dir_alien == -1)) || (((xbloc + tamany_aliens_ample) == AmpladaTaulell-1)& (dir_alien ==1)))
               {
                  BorraPersonatge2(taula_bloc_aliens,Pantalla,xbloc,ybloc);
                  ybloc = ybloc +1;
                  dir_alien = dir_alien * (-1);
                  PosaPersonatge2(taula_bloc_aliens, Pantalla, xbloc, ybloc);
                     if (ybloc == AlssadaTaulell -3)
                        xoc_alien_cano =1;
               }
               else
               {
                  BorraPersonatge2(taula_bloc_aliens,Pantalla,xbloc,ybloc);
                  (xbloc = xbloc + dir_alien);
                  PosaPersonatge2(taula_bloc_aliens, Pantalla, xbloc, ybloc);
               }
            }
            if (missil.actiu == 1)
            {
               if (missil.y == 0)
               {
                  missil.actiu = 0;
                  BorraTret(Pantalla, missil.x, missil.y);
               }
               else
               {
                  BorraTret(Pantalla, missil.x, missil.y);
                  missil.y = missil.y -1;
                  PosaTretCano(Pantalla, missil.x, missil.y);
               }
            }
            
      }while ((tecla != KEY_ESC) || ((ybloc + tamany_aliens_alt) == AlssadaTaulell -3));
         {
            BorraTret(Pantalla, missil.x, missil.y);
            BorraPersonatge2(taula_bloc_aliens, Pantalla, xbloc, ybloc);
            BorraPersonatge(cano.matriu, Pantalla, cano.x, cano.y);
            printf("Vols tornar a jugar? y/n");
            continuar = getch();
         }
   }while ((continuar =='y') || (continuar =='Y'));



La libreria rutinesInvaders, son constantes. Y la parte de funciones me la he saltado q ocupaba un cachillo.

Funciones solo tengo MostrarPers, Borrar, Tret y esas.

PD: Tb nose porque cuando reinicio la partida se me vuevle a la primera posicion pero luego se cierra.

Mersi!!!
dario279
 
Mensajes: 23
Registrado: Lun Dic 15, 2008 11:18 pm
Ubicación: Barberà del Valles

Volver a Sobre lenguajes de programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron