4
I’m having trouble with the domino game I created.
I can add the pieces to the right, but when I try to add to the left it does not perform as intended.
Here is an example:
Move 1 -> Table 6|6
Move 2 -> Table 6|6 6|2
Move 3 -> Table 1|6 1|6 6|2 (replace 6|6 by the piece on the left)
Move 4 -> Mesa 2|1 2|1 1|6 6|2 (continue)
My code:
void jogarpeca(pdomino vp[], int *n, pdomino t,char x) {
(*n)++;
int i;
if(x=='f') {
vp[*n]=t;
}
else {
for(i=*n;i>=2;i--) {
vp[i]=vp[i-1];
vp[1]=t;
}
}
}
void retirarpeca(pdomino vp[], int *n, int t) {
(*n)--;
int i;
for(i=t;i<=*n;i++) {
vp[i]=vp[i+1];
}
}
void jogar(jogador vj[],pdomino vp[], int *n, int j, int i, char c) {
int ini,fim;
ini=vp[1].lado1;
fim=vp[*n].lado2;
printf("NA MESA ");
escreverpecas(vp,*n);
printf("\n\n");
escreverjogadores(vj);
if(i==0) {
printf("%s passa a sua vez...\n\n",vj[j].nome);
}
else {
if(c=='i') {
if(vj[j].pecas[i].lado2!=ini) {
rodarpeca(&(vj[j].pecas[i]));
printf("%s joga %d|%d no Inicio\n\n\n",vj[j].nome,vj[j].pecas[i].lado1,vj[j].pecas[i].lado2);
}
else {
printf("%s joga %d|%d no Inicio\n\n\n",vj[j].nome,vj[j].pecas[i].lado1,vj[j].pecas[i].lado2);
}
}
else {
if(vj[j].pecas[i].lado1!=fim) {
rodarpeca(&(vj[j].pecas[i]));
printf("%s joga %d|%d no Fim\n\n\n",vj[j].nome,vj[j].pecas[i].lado1,vj[j].pecas[i].lado2);
}
else {
printf("%s joga %d|%d no Fim\n\n\n",vj[j].nome,vj[j].pecas[i].lado1,vj[j].pecas[i].lado2);
}
}
jogarpeca(vp, &(*n), vj[j].pecas[i], c);
retirarpeca(vj[j].pecas,&(vj[j].totalpecas), i);
}
getchar();
}
void jogadas(pdomino vp[], int *n, jogador vj[], int j) {
int ini,fim,i;
int k=0;
int p[9];
char c[9];
ini=vp[1].lado1;
fim=vp[*n].lado2;
for(i=1;i<=vj[j].totalpecas;i++) {
if(vj[j].pecas[i].lado1==ini) {
k++;
p[k]=i;
c[k]='i';
}
if(vj[j].pecas[i].lado2==ini) {
k++;
p[k]=i;
c[k]='i';
}
if(vj[j].pecas[i].lado1==fim) {
k++;
p[k]=i;
c[k]='f';
}
if(vj[j].pecas[i].lado2==fim) {
k++;
p[k]=i;
c[k]='f';
}
}
if(k==0) {
jogar(vj,vp, &(*n), j, 0, 'x');
}
else {
printf("funcao jogadas o k : %d",k);
getchar();
int x=k/*randi(1,k)*/;
printf("funcao jogadas o x : %d",x);
getchar();
jogar(vj,vp, &(*n), j, p[x], c[x]);
}
}
int jogar66(jogador vj[],pdomino vp[], int *n) {
int j,i,j1,p1;
for(j=1;j<=totaljogadores;j++) {
for(i=1;i<=vj[j].totalpecas;i++) {
if(vj[j].pecas[i].lado1==6 && vj[j].pecas[i].lado2==6) {
j1=j;
p1=i;
}
}
}
jogar(vj,vp,&(*n),j1,p1, 'f');
return j1;
}
int ganha(jogador vj[]) {
int jg,j;
jg=0;
for(j=1;j<=totaljogadores;j++) {
if(vj[j].totalpecas==0) {
jg=j;
}
}
return jg;
}
int fecha(pdomino vp[], int n) {
int p,q,i,c;
c=0;
p=vp[1].lado1;
for(i=1;i<=n;i++) {
if(vp[i].lado1==p) {
c++;
}
if(vp[i].lado2==p) {
c++;
}
}
return c==8;
}
int acaba(jogador vj[], pdomino vp[], int n) {
return ganha(vj) || fecha(vp, n);
}
int main() {
srand(time(0));
int i,j,p,x,contax;
contax=0;
pdomino vp[29];
jogador vj[5];
int n=0;
criartodaspecas(vp);
baralharpecas(vp);
criarjogadores(vj,vp);
x=1;
printf("\n**********Jogada n' %d **********\n\n",x);
j=jogar66(vj,vp,&n);
getchar();
while(!acaba(vj,vp,n)) {
j=j+1;
if(j==5) {
j=1;
}
x++;
printf("\n**********Jogada n' %d **********\n\n",x);
jogadas(vp, &n, vj, j);
}
}
Thank you for your reply. As I am beginning to learn how to program in C, I have not yet learned these operations. for(i=t;i<=*n;i++) { Vp[i]=Vp[i+1]; Vp[i]=t; &##Xa; and should have for(i=t;i<=*n;i+) Vp[i]=Vp[i+1]; Vp[i]=t; &##Xa; or without braces.
– Toze
I just finished my reply. I had put in submit unintentionally. Should answer your questions
– Jefferson Quesado