PDA

Visualizza la versione completa : [C] Sostituzione variabile int con una struct


francesco1985
18-04-2012, 14:11
qst il mio faticoso lavoro fatto fin ora. ora il problema qst: quando ho sostituito x e y con pezzo.x e pezzo.y le function nn si sono attivate. xke?

#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];
}

}

oregon
18-04-2012, 14:13
Originariamente inviato da francesco1985
qst il mio faticoso lavoro fatto fin ora. ora il problema qst: quando ho sostituito x e y con pezzo.x e pezzo.y le function nn si sono attivate. xke?


Guarda che non si capisce assolutamente cosa tu voglia dire.

Che vuoi dire con "attivate"?

Di quali funzioni parli?

Che intendo con sostituire x con pezzo.x ? Cosa era x e cosa pezzo.x ?

francesco1985
18-04-2012, 14:17
allora: x e y erano 2 variabili int ke mi davano la posizione di un pezzo all interno della mappa. ora... le 2 variabili le ho sostituite con la struct blocco, ma qst evidentemente al mio prgromma nn piace, xke quando usano semplicemente x e y funzionava tutto piu o meno bene e adesso ke le ho sostituite con pezzo.x e pezzo.y, ke sarebbero la x e la y all interno della struct, nn funziona piu come voglio, anzi nn funziona proprio e nn capisco xke

oregon
18-04-2012, 14:32
Originariamente inviato da francesco1985
allora: x e y erano 2 variabili int ke mi davano la posizione di un pezzo all interno della mappa.

Intanto Francesco, per favore non usare abbreviazioni perch il discorso diventa difficile da seguirsi e non c' nessuna necessit di usarle (questo non un SMS).

In secondo luogo, dovresti dire

1) dove e come usavi prima questa x e y e dove l'hai sostituito con i corrispondenti elementi della struttura

2) che vuol dire "non funziona" (cosa succedeva prima e cosa succede adesso)

altrimenti nessuno potr darti delle indicazioni.

francesco1985
18-04-2012, 14:43
scusa la forza dell'abitudine :D cmq.. dove vedi blocco.x e blocco.y prima c'erano semplicemente x e y 2 int per fatti loro(la struct e venuta dopo). quando c erano semplicemente le 2 variabili il programma mi rispondeva piu o meno come volevo io. se provi a compilarlo e poi confronti il risultato sostituendo pezzo.x e y e ricomplilandolo ti rendi conto subito della differenza. il probelema ke non capisco perche con la sostituzione nn mi funzioni come vorrei.

torn24
18-04-2012, 14:44
il gioco ,suscita , in me un certo interesse , essenzialmente perch non ho capito
cosa vuoi fare :)

Dovresti , se vuoi renderci partecipi , descrivere cosa consiste il gioco
commentare ad una a una le funzioni e spiegare il loro ruolo ,cosa devono fare !


ci sono , cose con poco senso nel codice

esempio





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]);









qui printf ,stampa dieci interi , se poi metti 20 variabili come parametri non vengono stampati

nei cicli for , non occorre dare nomi significativi , alle variabili , sono cicli ,
semmai aggiungi una riga di commento , piu utile."ma comunque ora lascia cosi"

se usi due interi x y , campi della struttura , o indichi due variabili x y , non cambia niente,
se sono inizializzate a x=5 y=0 entrambe .

francesco1985
18-04-2012, 14:51
ciao torn. vedi le function erano rikke di commenti solo ke superavano il limite per il post cosi le ho tolte se no nn potevo postare l intero codice, se vuoi te le posto una ad una. cmq.. il gioko quello del tetris(molto rudimentale lo so)ed ankora in fase di perfezinamento, per adesso mi limito alla sostanza poi miglioro piano piano le parti diciamo grezze :D . cmq come spiegavo prima nel post precedente se uso x e y come 2 int normali ottengo la visualizzazione del pezzo nella mappa, se invece uso pezzo.x e y nn ottengo nulla, la cosa strana dato ke nn dovrebbe cambiare nulla(almeno credo)

alka
18-04-2012, 15:02
Originariamente inviato da francesco1985
sostituzione variabile int con una struct

Manca l'indicazione del linguaggio nel titolo, come richiesta dal Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887).

Qui l'ho aggiunta io, tienilo a mente per il futuro.

francesco1985
18-04-2012, 15:05
ok grazie, devo ankora prenderci la mano :D

oregon
18-04-2012, 15:12
Scusa, ma non riesco ancora a capire il tuo problema ...

Loading