codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define larghezza_colonne 10
#define altezza_righe 20
#define dimpezzo 3
int pezzo2 [3][3] ={ {0, 0, 0},
{1, 1, 1},
{0, 1, 0},};
int mappa2[altezza_righe][larghezza_colonne]={ {0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,1,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{1,0,0,0,1,1,1,1,1,1} };
struct blocco{
int asse_verticale,asse_orizzontale;
int array[dimpezzo][dimpezzo];
}pezzo;
int mappa[altezza_righe][larghezza_colonne]={0};
int indice_mappai,indice_mappaj,indice_pezzoi=0,indice_pezzoj=0,posizione,righe,colonne,tasto;
void stampa_mappa();
void stampa_pezzo();
void azzera_mappa();
void nuovo_pezzo();
int gameover(int);
void azzera_pezzo();
void controllariga();
void cancellariga();
void piazza_pezzo();
void ruota_pezzo();
int movimentopossibile();
void muovi();
void main()
{
pezzo.asse_verticale=0;
pezzo.asse_orizzontale=0;
for (indice_pezzoi=0;indice_pezzoi<dimpezzo;indice_pezzoi++)//pezzo
{
for (indice_pezzoj=0;indice_pezzoj<dimpezzo;indice_pezzoj++)
{
pezzo.array[indice_pezzoi][indice_pezzoj]= pezzo2[indice_pezzoi][indice_pezzoj];
}
}//fine pezzo
printf("\n--------------------\n");
stampa_mappa();
stampa_pezzo();
while(1)
{
switch (getchar())
{
case('s'):
azzera_pezzo();
pezzo.asse_verticale++;
if(!movimentopossibile(pezzo.asse_verticale,pezzo.asse_orizzontale))
{
pezzo.asse_verticale--;
piazza_pezzo();
controllariga();
nuovo_pezzo();
}
muovi();
stampa_mappa();
stampa_pezzo();
break;
case('d'):
azzera_pezzo();
pezzo.asse_orizzontale++;// pezzo.asse_orizzontale è il movimento in orizzontale
if(!movimentopossibile(pezzo.asse_verticale,pezzo.asse_orizzontale))
{
pezzo.asse_orizzontale--;//se nn è possibile torna indietro
controllariga();
}
muovi();
stampa_mappa();
stampa_pezzo();
break;
case('a'):
azzera_pezzo();
pezzo.asse_orizzontale--;
if(!movimentopossibile(pezzo.asse_verticale,pezzo.asse_orizzontale))
{
pezzo.asse_orizzontale++;
controllariga();
}
muovi();
stampa_mappa();
stampa_pezzo();
break;
case ('w'):
azzera_pezzo();
ruota_pezzo();
muovi();
stampa_mappa();
stampa_pezzo();
printf("\n");
break;
default: printf("\n pezzoverticale=%d pezzoorizzontale=%d\n",pezzo.asse_verticale,pezzo.asse_orizzontale);
break;
}// fine switch
}//fine while
}// fine main