Problema com funções

1. Problema com funções

Felipe RR
Phodalao

(usa Outra)

Enviado em 10/04/2018 - 16:45h

Boa tarde pessoal, estou fazendo um jogo da velha para praticar o uso de matrizes.
No meu programa se repete muito o uso dessa estrutura:

	for(lin=0 ; lin < TAM ; lin++)
{
printf("\n");
for(col=0; col< TAM ; col++)
{
printf("%c ",m[lin][col]);
}
}


Então queria por ela em uma função chamada "jogo", dai eu só chamaria ela no meu programa "jogo();" mas não estou sabendo fazer isso.


  


2. Re: Problema com funções

Felipe RR
Phodalao

(usa Outra)

Enviado em 10/04/2018 - 19:21h

SamL escreveu:

O que eu acho que este código acima faça é apenas imprimir o tabuleiro, então você pode usar uma função void e chamá-la de imprimeTabuleiro ou só tabuleiro() e chamar ela toda vez, assim: tabuleiro();
void tabuleiro(){
...//código aqui
}

Mas veja que estou assumindo que a variavel "m[][]" seja global, mas caso vc queira passar ela pra função terá de estudar sobre ponteiros e como passar uma matriz para uma função. Pesquise no VOL o Paulo já falou algumas cezes sobre isso.
____________________________________________
https://nerdki.blogspot.com/ acessa aí vai lá, é grátis!




Talvez o maior problema seja a matriz então, vou precisar estudar mais, ela está declarada assim:

char a='1', b='2', c='3', d='4', e='5', f='6', g='7', h='8', i='9', numero, X='X', O='O';
unsigned char m[3][3]={{a, b, c},{d, e, f},{g, h, i}};



Desculpe amigo, o que seria "Estude no VOL O Paulo ja falou algumas..." sou novo aqui no fórum queria acessar este conteúdo.




3. Re: Problema com funções

Paulo
paulo1205

(usa Ubuntu)

Enviado em 11/04/2018 - 01:45h



Nesse tópico que você indicou, eu falei uma tremenda bobagem na mensagem nº 4 (sobre arrays não serem lvalues, quando na verdade o são). De resto, acho sim que os exemplos podem ser úteis para o nosso colega.


4. Re: Problema com funções

Felipe RR
Phodalao

(usa Outra)

Enviado em 11/04/2018 - 17:34h

O código é esse galera

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define TAM 3
main()
{
char a='1', b='2', c='3', d='4', e='5', f='6', g='7', h='8', i='9', numero, X='X', O='O';
unsigned char m[3][3]={{a, b, c},{d, e, f},{g, h, i}};

int lin, col, jogada = 0, jogador;

while(jogada < 9)
{
if(jogada%2)jogador=2;
else jogador=1;
for(lin=0 ; lin < TAM ; lin++)
{
printf("\n");
for(col=0; col< TAM ; col++)
{
printf(" \t%c ",m[lin][col]);
}
}


printf("\n Escolha um numero jogador >> %d <<: ",jogador);
numero=getch();
for(lin=0; lin < TAM ; lin++)
{
for(col=0; col < TAM ; col++)
{
if(m[lin][col] == numero)
{
if(jogada%2)m[lin][col] = X;
else m[lin][col] = O;

jogada++;
}
}
}

// VERIFICAR SE HA VENCEDOR
if((m[0][0]==O && m[0][1]==O && m[0][2]==O)||
(m[1][0]==O && m[1][1]==O && m[1][2]==O)||
(m[2][0]==O && m[2][1]==O && m[2][2]==O)||
(m[0][0]==O && m[1][0]==O && m[2][0]==O)||
(m[0][1]==O && m[1][1]==O && m[2][1]==O)||
(m[0][2]==O && m[1][2]==O && m[2][2]==O)||
(m[0][0]==O && m[1][1]==O && m[2][2]==O)||
(m[0][2]==O && m[1][1]==O && m[2][0]==O))
{
system("cls");
printf("\a\7 Jogador %d Venceu \n",jogador);
break;
}

/* Verifica se segundo jogador ganhou */
if((m[0][0]==X && m[0][1]==X && m[0][2]==X)||
(m[1][0]==X && m[1][1]==X && m[1][2]==X)||
(m[2][0]==X && m[2][1]==X && m[2][2]==X)||
(m[0][0]==X && m[1][0]==X && m[2][0]==X)||
(m[0][1]==X && m[1][1]==X && m[2][1]==X)||
(m[0][2]==X && m[1][2]==X && m[2][2]==X)||
(m[0][0]==X && m[1][1]==X && m[2][2]==X)||
(m[0][2]==X && m[1][1]==X && m[2][0]==X))
{
system("cls");
printf("\a\7 Jogador %d Venceu \n",jogador);
break;
}

}
for(lin=0 ; lin < TAM ; lin++)
{
printf("\n");
for(col=0; col< TAM ; col++)
{
printf(" \t %c ",m[lin][col]);
}
}
printf("\n");
system("PAUSE");
return 0;
}



Seria um jogo da velha, onde se pressionado o numero 1 por exemplo, seria o 1 substituido por X ou O.
Agora, implementar essa função não enxergo como


5. Re: Problema com funções

Fernando
phoemur

(usa Debian)

Enviado em 11/04/2018 - 19:43h

Algum tempo atrás eu fiz um exercício desses. De jogo da velha.
Apesar de parecer uma coisa trivial, assim como quase tudo em programação, um simples jogo da velha esconde detalhes de implementação que são muito interessantes para entender como outras coisas mais complexas funcionam.
Estude algoritmo minimax (https://en.wikipedia.org/wiki/Minimax),
Alfa-beta pruning (https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning)
Grundy-numbers (https://en.wikipedia.org/wiki/Nimber)
E muitos outros conceitos de programação associada a teoria dos jogos através de um simples jogo da velha.

Você pode encontrar aqui o protótipo que fiz para modo texto, colhendo várias idéias da internet:
https://gist.github.com/phoemur/4773972760823156e8bb10e6db751758

Daí depois fiz com interface gráfica em QT5 que você encontra aqui:
https://github.com/phoemur/TicTacToe

Obs.: É impossível ganhar tendo em vista o computador jogar otimamente.

Quando à sua pergunta, para você converter o número da célula de 1 a 9 em coordenadas de uma matrix[3][3]
você pode usar x = (cel-1)/3, y= (cel-1)%3;

Dá uma olhada no código fonte você vai entender.
Abraços






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts