luismsantana
Membro
boa tarde
estou com uma duvida aqui no meu projecto ...
o que eu quero é criar uma lista ligada e, de cada vez que o jogador faz uma jogada, armazenar num array, que é alterado a cada jogada, e, a cada jogada, "copiá-lo" para a lista ligada fazendo um novo nó ... eu faço isso, na minha cabeça está bem, simplesmente da erro ...
se conseguirem me dar uma ajudinha, agradeço
o ponteiro para a lista está inicializado na main a NULL.
abraços
estou com uma duvida aqui no meu projecto ...
o que eu quero é criar uma lista ligada e, de cada vez que o jogador faz uma jogada, armazenar num array, que é alterado a cada jogada, e, a cada jogada, "copiá-lo" para a lista ligada fazendo um novo nó ... eu faço isso, na minha cabeça está bem, simplesmente da erro ...
se conseguirem me dar uma ajudinha, agradeço
Código:
typedef struct jgd jog, *jogad;
typedef struct jogadores{
char nome1[10];
char nome2[10];
}jogador;
struct jgd{
int *tab;
jogad prox;
};
typedef struct
{
int n_jogadas;
int * valores;
int n_linhas;
int n_colunas;
} Matrix;
jogad jogar(jogad p,Matrix dim,jogador jog, Matrix *matrix)
{
int j,i,op,jogd,pedra;
jogad aux;
for(jogd=0;jogd<2;jogd++)
{
if(jogd==1)
printf("Vez do Jogador %s\n\n",jog.nome1);
else
printf("Vez do Jogador %s\n\n",jog.nome2);
do{
for(i=0,j=0;i<dim.n_linhas*dim.n_colunas;i++,j++){
if(j==dim.n_colunas){
printf("\n\n");
j=0;
}
printf("%d\t",matrix->valores[i]);
}
printf("o que pretende fazer?\n");
printf("1- colocar pedra\n");
printf("2- mover peca\n");
printf("3- inserir linha ou coluna\n");
printf("4- voltar atras\n");
printf("\nopcao:");
scanf("%d",&op);
switch(op)
{
case 1: pedra=verifica_pedras(matrix);
if(pedra==1)
p=coloca_pedra(p,dim,matrix);
else{
printf("Nao pode colocar mais pedras!\n");
break;
}
case 2:mover_peca(); break;
case 3:break;
case 4:return 0;
}
}while(1);
}
return p;
}
jogad coloca_pedra(jogad p, Matrix d, Matrix *mat)
{
int i, linha, coluna,celula;
jogad novo=(jogad) malloc(sizeof(jog)), aux;
novo->tab=malloc(sizeof(Matrix)*mat->n_colunas*mat->n_linhas);
if(novo==NULL){
printf("nao foi possivel!\n");
return p;
}
else{
do{
printf("onde pretende colocar a pedra?\n");
printf("ATENCAO: a pedra é representada pelo numero 9!\n");
printf("linha: "); scanf("%d",&linha);
printf("coluna: "); scanf("%d",&coluna);
celula=linha*d.n_colunas+coluna;
if(mat->valores[celula]==0){
mat->valores[celula]=9;
printf("\n\n");
printf("adicionou!\n");
break;
}
else
printf("tem de escolher outra posicao!\n");
}while(1);
for(i=0;i<d.n_linhas*d.n_colunas;i++)
novo->tab[i]=mat->valores[i];
novo->prox=NULL;
if(p==NULL)
p=novo;
else
{
aux=p;
while(aux->prox!=NULL)
aux=aux->prox;
aux->prox=novo;
}
}
return p;
}
o ponteiro para a lista está inicializado na main a NULL.
abraços