Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Zodiak98 en 6 Diciembre 2013, 04:22 am



Título: Problema con un juego.
Publicado por: Zodiak98 en 6 Diciembre 2013, 04:22 am
Bueno estaba aburrido y me puse a programar un juego el cual no pensé que me llegaría a dar problemas por lo sencillo que sería, lastimosamente subestimé la cuestión xdd, bueno el caso es que, trato de hacer de que la bala al impactar con los bloques los bloques desaparezcan, así es, simplemente eso, es claramente una tontería, pero bueno acá les dejaré el código para que lo ojeen:

-- EDIT --
La bala cuando toca la matriz, parece que los bloques desaparecen pero en realidad no, la matriz continúa llena, y es porque a medida que avanza la bala; dónde estaba situada anteriormente programé para que pintara un espacio en blanco, pero en realidad el elemento de la matriz sigue ahí, en pocas palabras, jamás se limpia el buffer en ese programita.

Código
  1. #include <windows.h>
  2. #include <conio.h>
  3. #include <stdio.h>
  4.  
  5. void gotoxy(short int x, short int y);
  6. void pintar_avion(char avion[3][6], int x, int y);
  7. void borrar_avion(int x, int y);
  8. inline void pintar_bala(char bala,int x, int y);
  9. inline void borrar_bala(int x, int y);
  10. void pintar_bloques(char bloques[10][41]);
  11.  
  12. int main()
  13. {
  14.    //Dibujo del avión:
  15.    char avion[3][6] = {{' ',' ','*',' ',' ',0},
  16.                        {' ','*','*','*',' ',0},
  17.                        {'*','*','*','*','*',0}};
  18.  
  19.  
  20.    char bloques[10][41];
  21.    //Búcle que lo que hace es rellenar la matriz anterior; todos sus elementos le colocará el caractér '*':
  22.    for(int f = 0; f < 10; f++) {
  23.        for(int c = 0; c < 40; c++) {
  24.            bloques[f][c] = '*';
  25.        }
  26.    }
  27.  
  28.    //Dibujo de la bala:
  29.    char bala = char(2);
  30.  
  31.    //Coordenadas del avión:
  32.    int cX = 38, cY = 20;
  33.  
  34.    //Variable que almacenará la tecla presionada por el usuario:
  35.    char tecla = '\0';
  36.  
  37.    //Coordenadas de la bala:
  38.    int bX = cX, bY = cY;
  39.  
  40.    //Variable que permitirá disparar una bala a la vez:
  41.    bool disparo = false;
  42.  
  43.    pintar_avion(avion,cX,cY);
  44.    pintar_bloques(bloques);
  45.  
  46.    while(1) {
  47.        if(kbhit()) {
  48.            tecla = getch();
  49.        }
  50.  
  51.        if((tecla == 'a' || tecla == 'A') && cX > 0) {
  52.            borrar_avion(cX, cY);
  53.            cX -= 1;
  54.            pintar_avion(avion,cX,cY);
  55.        }
  56.        else if((tecla == 'd' || tecla == 'D') && cX < 74) {
  57.            borrar_avion(cX, cY);
  58.            cX += 1;
  59.            pintar_avion(avion,cX,cY);
  60.        }
  61.        else if((tecla == 'w' || tecla == 'W') && !disparo) {
  62.            disparo = true;
  63.            bY = (cY - 1);
  64.            bX = (cX + 2);
  65.        }
  66.  
  67.        if(disparo) {
  68.            borrar_bala(bX, bY);
  69.            bY -= 1;
  70.            pintar_bala(bala,bX,bY);
  71.            if(bY == 1) {
  72.                borrar_bala(bX,bY);
  73.                disparo = false;
  74.                bY = cY;
  75.            }
  76.        }
  77.  
  78.        Sleep(20);
  79.  
  80.        tecla = '\0';
  81.    }
  82.  
  83.    system("pause>nul");
  84.  
  85.    return 0;
  86. }
  87.  
  88. void gotoxy(short int x, short int y) {
  89.    HANDLE identificador;
  90.    COORD coordenadas = {x , y};
  91.    identificador = GetStdHandle(STD_OUTPUT_HANDLE);
  92.    SetConsoleCursorPosition(identificador, coordenadas);
  93. }
  94.  
  95. void pintar_avion(char avion[3][6], int x, int y) {
  96.    for(int f = 0; f < 3; f++) {
  97.        for(int c = 0; c < 5; c++) {
  98.            gotoxy((x + c),(y + f));
  99.            printf("%c",avion[f][c]);
  100.        }
  101.    }
  102. }
  103.  
  104. void borrar_avion(int x, int y) {
  105.    char borrar[6] = {' ',' ',' ',' ',' ',0};
  106.    for(int h = 0; h < 3; h++) {
  107.        gotoxy(x,(y + h));
  108.        printf("%s",borrar);
  109.    }
  110. }
  111.  
  112. inline void pintar_bala(char bala,int x, int y) {
  113.    gotoxy(x,y);
  114.    printf("%c",bala);
  115. }
  116.  
  117. inline void borrar_bala(int x, int y) {
  118.    gotoxy(x,y);
  119.    printf(" ");
  120. }
  121.  
  122. void pintar_bloques(char bloques[10][41]) {
  123.    for(int f = 0; f < 10; f++) {
  124.        gotoxy(20,(1 + f));
  125.        for(int c = 0; c < 40; c++) {
  126.            printf("%c",bloques[f][c]);
  127.        }
  128.    }
  129. }
  130.  


Título: Re: Problema con un juego.
Publicado por: amchacon en 6 Diciembre 2013, 13:34 pm
El problema esque no detectas la colisión con los bloques. Tienes que detectar eso y cuando encuentres la colisión con un bloque lo borras de su matriz y pones un espacio en blanco en su lugar.

Lo mejor esque tu matriz abarque el campo entero, rellena los espacios vacíos con espacios.