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 stampa_mappa();
void azzera_mappa();
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");
stampa_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.y++;
if(!movimentopossibile(pezzo.x,pezzo.y)){
pezzo.y--;}
stampa_mappa();
azzera_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++;// x è il movimento in orizzontale
if(!movimentopossibile(pezzo.x,pezzo.y))//se nn è possibile torna indietro
pezzo.x--;
stampa_mappa();
azzera_mappa();
break;
case('a'):
agg();
pezzo.x--;
if(!movimentopossibile(pezzo.x,pezzo.y))
pezzo.x++;
stampa_mappa();
azzera_mappa();
break;
case ('w'):
agg();
ruota_pezzo(pezzo.array[indice_pezzoi][indice_pezzoj]);
stampa_mappa();
azzera_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(){ //modificato 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-pezzo.x][jpezzo-pezzo.y];
}
}
void stampa_mappa() //stampa la mappa
{
int i,j;
for(i=0;i<altezza_righe;i++)
{
for(j=0;j<larghezza_colonne ;j++)
printf("%d ",mappa[i][j]);
printf("\n");
}
}
void azzera_mappa()// porta gli elementi di mappa a 0
{
int i,j;
for(i=0;i<altezza_righe;i++)
{
for(j=0;j<larghezza_colonne ;j++)
mappa[i][j]=0;
}
}
Vedi oregon , questi sono problemi di visual studio