To pra fazer um trabalho pro final de periodo e to com uma duvida em relação a matrizes, no meu caso eu tenho que fazer um jogo da velha de matriz I x I mas como eu faço isso de maneira correta?
Unico jeito que eu consegui de certa forma fazer foi botando esses scanf dentro das funções de iniciar e exibir, tabuleiro e checar o tab, porém essa de exibir está em um loop então apesar de "funcionar" o usuario teria que inputar o valor da matriz em cada laço de repetição, como posso resolver isso?
#include <stdio.h>
#include <stdlib.h>
void menu();
void limpartela(){
system("CLS");
}
void iniciatab(char tabuleiro[100][100]){
// Navega por cada posicao e coloca '-'
int linha,coluna;
int i;
printf("Tamanho da Matriz: ");
scanf("%d",&i);
for(linha = 0; linha <i; linha ++){
for(coluna = 0; coluna<i; coluna++){
tabuleiro[linha][coluna] = '-';
}
}
return i;
}
void exibetab(char tabuleiro[100][100]){
// Exibe Tabuleiro na Tela
int linha,coluna;
int i;
printf("Tamanho da Matriz: ");
scanf("%d",&i);
for(linha = 0; linha <i; linha ++){
for(coluna = 0; coluna<i; coluna++){
printf("%c",tabuleiro[linha][coluna]);
}
printf("\n");
}
}
int conferetabuleiro(char tabuleiro [100][100]){
int linha,coluna;
int i;
printf("Tamanho da Matriz: ");
scanf("%d",&i);
//Confere Linhas
for(linha = 0; linha<i; linha++){
if(tabuleiro[linha][0] == 'X' && tabuleiro[linha][0] == tabuleiro[linha][1] && tabuleiro[linha][1] == tabuleiro[linha][2]){
return 1;
}else if(tabuleiro[linha][0] == 'O' && tabuleiro[linha][0] == tabuleiro[linha][1] && tabuleiro[linha][1] == tabuleiro[linha][2]){
return 2;
}
}
//Confere Colunas
for(coluna = 0; coluna <i; coluna++){
if(tabuleiro[0][coluna] == 'X' && tabuleiro[0][coluna] == tabuleiro[1][coluna] && tabuleiro[1][coluna] == tabuleiro[2][coluna]){
return 1;
}else if(tabuleiro[0][coluna] == 'O' && tabuleiro[0][coluna] == tabuleiro[1][coluna] && tabuleiro[1][coluna] == tabuleiro[2][coluna]){
return 2;
}
}
//Conferir Diagonal Principal
if(tabuleiro[0][0] != '-' && tabuleiro[0][0] == tabuleiro[1][1] && tabuleiro[1][1] == tabuleiro[2][2]){
if(tabuleiro[0][0 == 'X']){
return 1;
}else{
return 2;
}
}
// Conferir Diagonal Secundária
if(tabuleiro[0][2] != '-' && tabuleiro[0][2] == tabuleiro[1][1] && tabuleiro[1][1] == tabuleiro[2][0]){
if(tabuleiro[0][2] == 'X'){
return 1;
}else{
return 2;
}
}
return 0;
}
int reset(){
int opcao;
printf("Deseja Reiniciar o Jogo? ");
printf("\n1- Reiniciar o Jogo");
printf("\n2- Sair do Jogo");
printf("\nEscolha: ");
scanf("%d", &opcao);
if (opcao == 1){
limpartela();
menu();
}
}
void jogo(){
char nome1[20]; // Nome Jogador 1
char nome2[20]; // Nome Jogador 2
char nomeatual[0]; // Nome de quem está jogando
char tabuleiro[100][100];
int linha,coluna;
int linhajogada,colunajogada;
int partida = 1; // Situaçao da Partida
int turno = 1; // Turno dos Jogadores
int rodada = 0; // Numero de Vezes Jogadas
int i;
int ordem_da_matriz;
printf("Digite o nome do Jogador 1: ");
scanf("%s",nome1);
printf("Digite o nome do Jogador 2: ");
scanf("%s",nome2);
iniciatab(tabuleiro);
while (rodada < i && partida == 1){
limpartela();
exibetab(tabuleiro);
printf("Rodada: %d\n", rodada);
//Muda o nome conforme o turno
if(turno == 1){
nomeatual == nome1;
}else{
nomeatual == nome2;
}
//Le a Posição Desejada
printf("%s, Escolha uma Linha: ", nomeatual);
scanf("%d", &linhajogada);
printf("%s, Escolha uma Coluna: ", nomeatual);
scanf("%d", &colunajogada);
if(turno == 1){
tabuleiro[linhajogada][colunajogada] = 'X';
turno = 2;
}else{
tabuleiro[linhajogada][colunajogada] = 'O';
turno = 1;
}
if (conferetabuleiro(tabuleiro) == 1){
printf("\nO Jogador X Venceu\n");
partida = 0;
}else if(conferetabuleiro(tabuleiro) == 2){
printf("\nO Jogador O Venceu\n");
partida = 0;
}
rodada++;
}
exibetab(tabuleiro);
printf("Fim de jogo");
reset();
}
void menu(){
int opcao;
while (opcao < 1 || opcao > 2){
printf("Jogo da Velha");
printf("\n1 - Jogar");
printf("\n2 - Sair\n");
printf("Escolha uma Opcao: ");
scanf("\n%d",&opcao);
switch(opcao){
case 1:
//printf("Teste");
jogo();
break;
case 2:
printf("JOGO FINAIZADO");
break;
}
}
}
int main(){
menu();
return 0;
}