Ir ao conteúdo
  • Cadastre-se

Dúvida programa em C, jogo da velha


Gabs Veiga

Posts recomendados

Bom dia, sou iniciante em programação e tenho um exercício cujo objetivo é desenvolver um jogo da velha, porém estou com algumas dúvidas. A princípio estou fazendo o menu, quando digito 1 (para a opção single player) ou 2 (para a opção multiplayer) aparece opção inválida, o que eu poderia fazer para que não aparecesse "opção inválida" mesmo eu digitando uma das opções exibidas?

Desde já agradeço.

Gabriela

#include<stdio.h>#include<windows.h>#include<stdlib.h>#include<conio.h>main(){		char jogador1[10], jogador2[10], s;	int matriz[3][3], i, j, jog;	//Função para deixar a tela de fundo branca	system("color f0");		//Cabeçalho	printf("\tJogo da Velha\tBy Foxy");	printf("\n\n");		//'Do' para o usuário ter a opção de jogar novamente 	do{		//'Do' para caso o usuário digitar um valor que seja diferente de 1 ou 2 (single/multi)		do{						//Opção do single player ou multiplayer; 			printf("Digite 1 para single player e 2 para multiplayer:\n");			printf("1. Single Player\n");			printf("2. Multiplayer");			printf("\n");			jog=getch();			system("cls");						//Caso o usuário escolha a opção 1, que seria o single player			if(jog==1){				 printf("Nome do primeiro jogador: ");				 fflush(stdin);				 scanf("%[^\n]s",jogador1[i]); 				 printf("Nome do segundo jogador: ");				 fflush(stdin);				 scanf("%[^\n]s",jogador2[i]);				 				 printf("%c",jogador1[i]);				 printf("\n");				 printf("%c",jogador2[i]);				 			}						//Caso o usuário escolha a opção 2, do multiplayer (usuário vs máquina)			else if(jog==2){				printf("Nome do primeiro jogador: ");				fflush(stdin);				scanf("%[^\n]s",jogador1[i]);							}		 			 	//Caso o usuário digite nenhuma das duas opções acima 			else{				printf("Op\207\706o inv\240lida\n");			}			}while(jog!=1||jog!=2);				//Opção para o usuário, caso ele queria continuar ou sair do jogo		printf("Para sair digite 's'.\nPara continuar tecle 'enter'.\n");		fflush(stdin);		scanf("%c",&s);		if(s=='s'||s=='S'){			exit(0);		}		system("cls");			}while(true);} 
Link para o comentário
Compartilhar em outros sites

O Getch() recebe o caracter, ou seja, a posição do que digitar na tabela ASCII, como o numero 1 esta na posição 49 e o numero 2 na posição 50 da tabela voce faz assim no seu codigo:

 

if(jog==49)

...

elseif(jog==50)

...

while(jog!=49&&jog!=50);   //Aqui voce tem que colocar o && em vez de ||, porque sempre vai ser diferente de um dos dois valores.

...

 

Ou voce pode simplesmente mudar só a hora de receber seu int assim:

 

jog=getch()-48;  // Pois digitando 1 ou 2 ele receberá 49 ou 50 respectivamente na tabela ASCII, subtraindo 48 vai ficar 1 e 2 normal.

...

 

E mais uma coisa na hora de receber a string voce só coloca o nome do vetor assim:

 

scanf("%[^\n]s",jogador1);

...

scanf("%[^\n]s",jogador2);

...

 

Na hora de imprimir tambem voce tem que fazer assim por ser uma string:

 

printf("%s",jogador1);   //%c só imprimiria uma letra, o %s imprime a palavra toda

...

printf("%s",jogador2);

...

 

E desculpa, mas nao entendi aquele while true, se for para gerar um ciclo infinito até que o usuario digite "S" no meu só funcionou fazendo:

 

while(1);

...

 

 

A, e mais uma coisa que percebi, o Multiplayer (2) ta recebendo só 1 jogador enquanto que o singleplayer(1) ta recebendo os 2, ou seja, voce inverteu os IF's do codigo

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...