Jump to content

Problema For (Actualizado o 1 Post!!)


Sion
 Share

Recommended Posts

Boas

Para nao fazer nova thread decidi editar este post, tem andado a continuar o meu jogo do galo (uma vez que e trabalho fim de ano, ja para esta quarta)

Surgiu-me com que nunca me tinha deparado antes lol.

Eu criei a estrutura for para correr o vector todo e preencher a primeira casa que puder com 'X' Se essa casa estiver vazia, assim que isso se verifique ele interrompe o duplo ciclo(for).

So que ja exprimeitei breaks e nao resulta. Se puderem ajudar agradecia

else 
     {
         for(a=0;a<3;a++)
         {
            for(b=0;b<3;b++)
            {
             if (jogo[a][b]=='-') // significa que a casa está vazia 
                  jogo[a][b]='X'; // se isto se verificase queria que o for fica-se interropido se nao vai encher o resto das casas
            }
        }
     }        

Cumps .

Thx

_________________Cenas pá.

Link to comment
Share on other sites

Guest NoOne

tens cont = cont +2;

se fizers as contas 2 4 6 8 10.... cont nunca vai ser igual a 9...

ve se assim dá para ti:

          sair=player1(jogo,simb);
          tabelainicial(jogo);
           cont++;
           if(cont==9)                 //apesar do cont chegar aos 9 o ciclo continua ...
              sair=0;

          sair=player2(jogo,simb2);
          tabelainicial(jogo);
          cont++;
           if(cont==9)                 //apesar do cont chegar aos 9 o ciclo continua ...
          {
              sair=0;
            }
          
Link to comment
Share on other sites

          sair=player1(jogo,simb);
          tabelainicial(jogo);
           cont++;
           if(cont==9)                 //apesar do cont chegar aos 9 o ciclo continua ...
              sair=0;

          sair=player2(jogo,simb2);
          tabelainicial(jogo);
          cont++;
           if(cont==9)                 //apesar do cont chegar aos 9 o ciclo continua ...
              sair=0;

Não precisas de ter cont = cont++ (Só estás a fazer duas atribuições, uma delas desnecessária)

"Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."
Não respondo a questões por PM que possam ser colocadas no fórum!

Link to comment
Share on other sites

tens cont = cont +2;

se fizers as contas 2 4 6 8 10.... cont nunca vai ser igual a 9...

Provavelmente tens razao, mas usar o cont++ , vai adicionar 1 valor a cada passada no ciclo so que em cada passada sao efectuadas !2 jogadas!, e assim o maximo de jogadas que o cont ia permitir eram 18  😉

_________________Cenas pá.

Link to comment
Share on other sites

Esta é uma daquelas ocasiões em que o break dá jeito.

Pessoalmente não programava o jogo dessa forma, até porque nas funções player1 e player2 estás sem dúvida a repetir código. juntava as duas funções e, se fosse necessário, passava mais um argumento à função resultante a indicar qual era o jogador activo. Depois disto, chamava a função apenas uma vez por cada iteração do do {} while, o que finalmente iria simplificar a contagem das jogadas.

Desaparecido.

Link to comment
Share on other sites

Guest NoOne

Uma pequena sugestão, não sei se será a mais correcta, mas podes tentar assim...

//Vitoria como variavel global
int vitoria = 0; //0 = ninguem ganhou; 1= ganhou player 1; 2 = ganhou player 2;

//Funções

int main()
{

    char jogo[3][3];
    int posicao,cont=0;
    char simb,simb2;
char *players[2];

//ler nomes dos jogadores

    menuinicial();
    tabelainicializar(jogo);
    tabelainicial(jogo);
    simb=escolhasimbolo();
    simb2=escolhasimbolo2();
  
while(1) {
	jogada(jogo,simb,1); //1 = numero de player
	cont++;
	if(cont==9)
		break;

	jogada(jogo,simb,2);
	cont++;
	if(cont==9)
		break;
	//vais ter outra condição que controle se algum jogador ganhou, como por exemplo;
	if(vitoria!=0)
		break;
}

if(vitoria!=0)
	printf("Vitória para o jogador %s ", players[vitoria]);
else
	printf("Empate");
}

Link to comment
Share on other sites

          if(cont>9)                 //cont>9? ^^
          {
              sair=0;
             }

xD, nao sei como nao me lembrei dessa lol.

NoOne se calhar vou pegar nalgumas ideas do teu codigo como o TheDark disse e tranformar a jogada numa funcao unica esplica-me so esta parte do codigo que percebi bem s.f.f , é que ainda nao dei string e nao as domino muito bem  :fartnew2:

if(vitoria!=0)

printf("Vitória para o jogador %s ", players[vitoria]);

o players[vitoria] escreve o nome do jogador que ganhou mas o que e ao certo a variavel vitoria?

__

orbigado pelas sugestões a todos ajudou bastante sem duvida , mais um bocado de trabalho e está feito 👍

So mais um coisa.. estive a trabalhar no código pra reconhecer quando se ganha ou perde , pus o IF desta maneira, mas dá-me erro, nao é possivel fazer isto? tem que se fazer condição a condição? ?

int wincheck(char jogo[3][3],int x, char sim )
{
   int jog=0;
    if (x==0)
    {
       jog=1;
    }
    else
    {
        jog=2;
    }
               
    if (jogo[0][0]== sim && jogo[0][1]== sim && jogo[0][2]== sim) || (jogo[2][0]== sim && jogo[2][1]== sim && jogo[2][2]== sim) || 
                     (jogo[1][0]== sim && jogo[1][1]== sim && jogo[1][2]== sim)
    {
                   printf("Jogador %d, Ganhou!\n",jog);
                   return 0;
    }
   
    }
    

_________________Cenas pá.

Link to comment
Share on other sites

Uma pequena sugestão, não sei se será a mais correcta, mas podes tentar assim...

//Vitoria como variavel global
int vitoria = 0; //0 = ninguem ganhou; 1= ganhou player 1; 2 = ganhou player 2;

//Funções

int main()
{

    char jogo[3][3];
    int posicao,cont=0;
    char simb,simb2;
char *players[2];

//ler nomes dos jogadores

    menuinicial();
    tabelainicializar(jogo);
    tabelainicial(jogo);
    simb=escolhasimbolo();
    simb2=escolhasimbolo2();
  
while(1) {
	jogada(jogo,simb,1); //1 = numero de player
	cont++;
	if(cont==9)
		break;

	jogada(jogo,simb,2);
	cont++;
	if(cont==9)
		break;
	//vais ter outra condição que controle se algum jogador ganhou, como por exemplo;
	if(vitoria!=0)
		break;
}

if(vitoria!=0)
	printf("Vitória para o jogador %s ", players[vitoria]);
else
	printf("Empate");
}

lol, isso foi mais ou menos o que eu disse, mas substituía esse while por

while(1) {
vitoria = jogada(jogo, cont%2);
if ( vitoria != 0 || ++cont == 9 ) break;
}

onde jogada receberia como 2º parâmetro 0 para o jogador 1, e 1 para o jogador 2, e determina o símbolo a partir desse parâmetro. jogada retorna ainda 0 no caso de nessa jogada ninguém ter ganho, 1 para o caso em que ganha o jogador 1, e 2 para o caso em que ganha o jogador 2, o que evita ter vitoria como variável global.

So mais um coisa.. estive a trabalhar no código pra reconhecer quando se ganha ou perde , pus o IF desta maneira, mas dá-me erro, nao é possivel fazer isto? tem que se fazer condição a condição? ?

Sim, é possível. Tens é que pôr parêntesis à volta de toda a condição, a a abrir logo a seguir ao if e a fechar logo antes do {.

Desaparecido.

Link to comment
Share on other sites

sair=player1(jogo,simb);
          tabelainicial(jogo);
          sair=player2(jogo,simb2);
          tabelainicial(jogo);

          cont=cont+2;
          printf("%d\n",cont);          /*output a confirmar o valor que o cont tem */
          if(cont==9)                 //apesar do cont chegar aos 9 o ciclo continua ...
          {
              sair=0;
             }

Nunca jogaste ao galo? Ele faz com que ambos joguem e em seguida faz a verificação, ora nem era preciso saber o que é um número ímpar, bastava ver que para o jogo acabar empatado quem joga por último é o JOGADOR 1, se tu fazes a verificação a seguir ao JOGADOR 2 é impossível isso funcionar.

Não respondo a dúvidas por mensagem.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.