-- 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
#include <windows.h> #include <conio.h> #include <stdio.h> void gotoxy(short int x, short int y); void pintar_avion(char avion[3][6], int x, int y); void borrar_avion(int x, int y); inline void pintar_bala(char bala,int x, int y); inline void borrar_bala(int x, int y); void pintar_bloques(char bloques[10][41]); int main() { //Dibujo del avión: char avion[3][6] = {{' ',' ','*',' ',' ',0}, {' ','*','*','*',' ',0}, {'*','*','*','*','*',0}}; char bloques[10][41]; //Búcle que lo que hace es rellenar la matriz anterior; todos sus elementos le colocará el caractér '*': for(int f = 0; f < 10; f++) { for(int c = 0; c < 40; c++) { bloques[f][c] = '*'; } } //Dibujo de la bala: char bala = char(2); //Coordenadas del avión: int cX = 38, cY = 20; //Variable que almacenará la tecla presionada por el usuario: char tecla = '\0'; //Coordenadas de la bala: int bX = cX, bY = cY; //Variable que permitirá disparar una bala a la vez: bool disparo = false; pintar_avion(avion,cX,cY); pintar_bloques(bloques); while(1) { if(kbhit()) { tecla = getch(); } if((tecla == 'a' || tecla == 'A') && cX > 0) { borrar_avion(cX, cY); cX -= 1; pintar_avion(avion,cX,cY); } else if((tecla == 'd' || tecla == 'D') && cX < 74) { borrar_avion(cX, cY); cX += 1; pintar_avion(avion,cX,cY); } else if((tecla == 'w' || tecla == 'W') && !disparo) { disparo = true; bY = (cY - 1); bX = (cX + 2); } if(disparo) { borrar_bala(bX, bY); bY -= 1; pintar_bala(bala,bX,bY); if(bY == 1) { borrar_bala(bX,bY); disparo = false; bY = cY; } } Sleep(20); tecla = '\0'; } system("pause>nul"); return 0; } void gotoxy(short int x, short int y) { HANDLE identificador; COORD coordenadas = {x , y}; identificador = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(identificador, coordenadas); } void pintar_avion(char avion[3][6], int x, int y) { for(int f = 0; f < 3; f++) { for(int c = 0; c < 5; c++) { gotoxy((x + c),(y + f)); printf("%c",avion[f][c]); } } } void borrar_avion(int x, int y) { char borrar[6] = {' ',' ',' ',' ',' ',0}; for(int h = 0; h < 3; h++) { gotoxy(x,(y + h)); printf("%s",borrar); } } inline void pintar_bala(char bala,int x, int y) { gotoxy(x,y); printf("%c",bala); } inline void borrar_bala(int x, int y) { gotoxy(x,y); printf(" "); } void pintar_bloques(char bloques[10][41]) { for(int f = 0; f < 10; f++) { gotoxy(20,(1 + f)); for(int c = 0; c < 40; c++) { printf("%c",bloques[f][c]); } } }