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, 1, 0},
{0, 1, 0},
{1, 1, 1} };
struct blocco{
int x,y;
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 nuovo_pezzo();
int gameover();
void controllariga();
void cancellariga();
int piazza_pezzo ();
void ruota_pezzo();
//int aggiorna();
int movimentopossibile();
void agg();
void main()
{
pezzo.x=5;
pezzo.y=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");
for(indice_mappai=0;indice_mappai<altezza_righe;indice_mappai++){ //mappa
printf("%d %d %d %d %d %d %d %d %d %d \n",mappa[indice_mappai][indice_mappaj],mappa[indice_mappai][indice_mappaj+1],mappa[indice_mappai][indice_mappaj+2],mappa[indice_mappai][indice_mappaj+3],mappa[indice_mappai][indice_mappaj+4]
,mappa[indice_mappai][indice_mappaj+5],mappa[indice_mappai][indice_mappaj+6],mappa[indice_mappai][indice_mappaj+7],mappa[indice_mappai][indice_mappaj+8],mappa[indice_mappai][indice_mappaj+9]
,mappa[indice_mappai][indice_mappaj+10],mappa[indice_mappai][indice_mappaj+11],mappa[indice_mappai][indice_mappaj+12],mappa[indice_mappai][indice_mappaj+13],mappa[indice_mappai][indice_mappaj+14]
,mappa[indice_mappai][indice_mappaj+15],mappa[indice_mappai][indice_mappaj+16],mappa[indice_mappai][indice_mappaj+17],mappa[indice_mappai][indice_mappaj+18],mappa[indice_mappai][indice_mappaj+19]);
}//fine mappa
for (indice_pezzoi=0;indice_pezzoi<dimpezzo;indice_pezzoi++){//pezzo
printf("\n%d %d %d",pezzo.array[indice_pezzoi][0],pezzo.array[indice_pezzoi][1],pezzo.array[indice_pezzoi][2]);
}//fine pezzo
printf("\n");
while(1){
switch (getchar()){
case('s'):
agg(pezzo.x,pezzo.y);
pezzo.y++;
if(!movimentopossibile(pezzo.x,pezzo.y)){
pezzo.y--;}
for(indice_mappai=0;indice_mappai<altezza_righe;indice_mappai++){ //mappa
printf("%d %d %d %d %d %d %d %d %d %d \n",mappa[indice_mappai][indice_mappaj],mappa[indice_mappai][indice_mappaj+1],mappa[indice_mappai][indice_mappaj+2],mappa[indice_mappai][indice_mappaj+3],mappa[indice_mappai][indice_mappaj+4]
,mappa[indice_mappai][indice_mappaj+5],mappa[indice_mappai][indice_mappaj+6],mappa[indice_mappai][indice_mappaj+7],mappa[indice_mappai][indice_mappaj+8],mappa[indice_mappai][indice_mappaj+9]
,mappa[indice_mappai][indice_mappaj+10],mappa[indice_mappai][indice_mappaj+11],mappa[indice_mappai][indice_mappaj+12],mappa[indice_mappai][indice_mappaj+13],mappa[indice_mappai][indice_mappaj+14]
,mappa[indice_mappai][indice_mappaj+15],mappa[indice_mappai][indice_mappaj+16],mappa[indice_mappai][indice_mappaj+17],mappa[indice_mappai][indice_mappaj+18],mappa[indice_mappai][indice_mappaj+19]);
}//fine mappa
for (indice_pezzoi=0;indice_pezzoi<dimpezzo;indice_pezzoi++){//pezzo
printf("\n%d %d %d ",pezzo.array[indice_pezzoi][0],pezzo.array[indice_pezzoi][1],pezzo.array[indice_pezzoi][2]);}
printf("\n");
break;
case('d'):
agg(pezzo.x,pezzo.y);
pezzo.x++;// x è il movimento in orizzontale
if(!movimentopossibile(pezzo.x,pezzo.y))//se nn è possibile torna indietro
pezzo.x--;
for(indice_mappai=0;indice_mappai<altezza_righe;indice_mappai++){ //mappa
printf("%d %d %d %d %d %d %d %d %d %d \n",mappa[indice_mappai][indice_mappaj],mappa[indice_mappai][indice_mappaj+1],mappa[indice_mappai][indice_mappaj+2],mappa[indice_mappai][indice_mappaj+3],mappa[indice_mappai][indice_mappaj+4]
,mappa[indice_mappai][indice_mappaj+5],mappa[indice_mappai][indice_mappaj+6],mappa[indice_mappai][indice_mappaj+7],mappa[indice_mappai][indice_mappaj+8],mappa[indice_mappai][indice_mappaj+9]
,mappa[indice_mappai][indice_mappaj+10],mappa[indice_mappai][indice_mappaj+11],mappa[indice_mappai][indice_mappaj+12],mappa[indice_mappai][indice_mappaj+13],mappa[indice_mappai][indice_mappaj+14]
,mappa[indice_mappai][indice_mappaj+15],mappa[indice_mappai][indice_mappaj+16],mappa[indice_mappai][indice_mappaj+17],mappa[indice_mappai][indice_mappaj+18],mappa[indice_mappai][indice_mappaj+19]);
}//fine mappa
break;
case('a'):
agg(pezzo.x,pezzo.y);
pezzo.x--;
if(!movimentopossibile(pezzo.x,pezzo.y))
pezzo.x++;
for(indice_mappai=0;indice_mappai<altezza_righe;indice_mappai++){ //mappa
printf("%d %d %d %d %d %d %d %d %d %d \n",mappa[indice_mappai][indice_mappaj],mappa[indice_mappai][indice_mappaj+1],mappa[indice_mappai][indice_mappaj+2],mappa[indice_mappai][indice_mappaj+3],mappa[indice_mappai][indice_mappaj+4]
,mappa[indice_mappai][indice_mappaj+5],mappa[indice_mappai][indice_mappaj+6],mappa[indice_mappai][indice_mappaj+7],mappa[indice_mappai][indice_mappaj+8],mappa[indice_mappai][indice_mappaj+9]
,mappa[indice_mappai][indice_mappaj+10],mappa[indice_mappai][indice_mappaj+11],mappa[indice_mappai][indice_mappaj+12],mappa[indice_mappai][indice_mappaj+13],mappa[indice_mappai][indice_mappaj+14]
,mappa[indice_mappai][indice_mappaj+15],mappa[indice_mappai][indice_mappaj+16],mappa[indice_mappai][indice_mappaj+17],mappa[indice_mappai][indice_mappaj+18],mappa[indice_mappai][indice_mappaj+19]);
}
break;
case ('w'):
agg(pezzo.x,pezzo.y);
ruota_pezzo(pezzo.array[indice_pezzoi][indice_pezzoj]);
for(indice_mappai=0;indice_mappai<altezza_righe;indice_mappai++){ //mappa
printf("%d %d %d %d %d %d %d %d %d %d \n",mappa[indice_mappai][indice_mappaj],mappa[indice_mappai][indice_mappaj+1],mappa[indice_mappai][indice_mappaj+2],mappa[indice_mappai][indice_mappaj+3],mappa[indice_mappai][indice_mappaj+4]
,mappa[indice_mappai][indice_mappaj+5],mappa[indice_mappai][indice_mappaj+6],mappa[indice_mappai][indice_mappaj+7],mappa[indice_mappai][indice_mappaj+8],mappa[indice_mappai][indice_mappaj+9]
,mappa[indice_mappai][indice_mappaj+10],mappa[indice_mappai][indice_mappaj+11],mappa[indice_mappai][indice_mappaj+12],mappa[indice_mappai][indice_mappaj+13],mappa[indice_mappai][indice_mappaj+14]
,mappa[indice_mappai][indice_mappaj+15],mappa[indice_mappai][indice_mappaj+16],mappa[indice_mappai][indice_mappaj+17],mappa[indice_mappai][indice_mappaj+18],mappa[indice_mappai][indice_mappaj+19]);
}//fine mappa
for (indice_pezzoi=0;indice_pezzoi<dimpezzo;indice_pezzoi++){//pezzo
printf("\n%d %d %d ",pezzo.array[indice_pezzoi][0],pezzo.array[indice_pezzoi][1],pezzo.array[indice_pezzoi][2]); }
printf("\n");
break;
default: printf("\n x=%d y=%d\n",pezzo.x,pezzo.y);break;
}
}
}
int gameover(){
for (indice_mappai=0;indice_mappai<larghezza_colonne;indice_mappai++)
if (mappa[indice_mappai][0])
return 1;
return 0;
}
void nuovo_pezzo(){
for (indice_pezzoi=0; indice_pezzoi<dimpezzo;indice_pezzoi++){
for (indice_pezzoj=0; indice_pezzoj<dimpezzo;indice_pezzoj++)
pezzo.array[indice_pezzoi][indice_pezzoj] = pezzo2[indice_pezzoi][indice_pezzoj];
}
}
void ruota_pezzo(){
int i,j;
int pezzo1[dimpezzo][dimpezzo];
pezzo1[0][0]=pezzo.array[2][0];
pezzo1[0][1]=pezzo.array[1][0];
pezzo1[0][2]=pezzo.array[0][0];
pezzo1[1][0]=pezzo.array[2][1];
pezzo1[1][1]=pezzo.array[1][1];
pezzo1[1][2]=pezzo.array[0][1];
pezzo1[2][0]=pezzo.array[2][2];
pezzo1[2][1]=pezzo.array[1][2];
pezzo1[2][2]=pezzo.array[0][2];
for (i=0;i<dimpezzo;i++){
for (j=0;j<dimpezzo;j++)
pezzo.array[i][j]=pezzo1[i][j];}
}
void cancellariga(){
for (indice_mappaj=pezzo.y; indice_mappaj>0; indice_mappaj--) {
for (indice_mappai=0; indice_mappai<larghezza_colonne;indice_mappai++)
if (mappa[indice_mappai][indice_mappaj]!=0)
mappa[indice_mappai][indice_mappaj]=mappa[indice_mappai][indice_mappaj-1];
}
}
int movimentopossibile(){
int jpezzo=pezzo.y,ipezzo=pezzo.x,imappa,jmappa;
for ( ipezzo=pezzo.y, imappa=0; ipezzo<pezzo.y+dimpezzo; ipezzo++, imappa++){
for(jpezzo=pezzo.x, jmappa=0; jpezzo<pezzo.x+dimpezzo; jpezzo++, jmappa++)
if (jpezzo>larghezza_colonne-1 ||jpezzo<0 ||jpezzo>altezza_righe-1){
return 0;}
else{
return 1;
}
}
}
void controllariga(){
for(indice_mappai=0;indice_mappai<larghezza_colonne;indice_mappai++){
if(mappa[indice_mappai][indice_mappaj]!=0){
if(indice_mappai==larghezza_colonne)
cancellariga(indice_mappaj);
}
}
}
void agg(){
int imappa,jmappa,ipezzo,jpezzo;
for(ipezzo=pezzo.x;ipezzo<pezzo.x+dimpezzo;ipezzo++){
for(jpezzo=pezzo.y;jpezzo<pezzo.y+dimpezzo;jpezzo++)
mappa[ipezzo][jpezzo]=pezzo.array[ipezzo][jpezzo];
}
}