Enviado em 27/05/2009 - 19:19h
Pessoal, é o seguinte, estou aprendendo C e a professora iniciou em aula um jogo da velha conosco(sei que ficaria melhor com matrizes, mas ainda não foi dado este conteúdo fizemos com vetor mesmo...). É para ser finalizado em casa, falta pouco, mas to com dificuldades, o programa é para uma pessoa jogar com o computador, o computador sorteia aleatóriamente as posições, facil de jogar, pois a máquina não vai "pensar", mas é apenas didático ainda... vou postar o código para verem:
// JOGO DA VELHA - em linguagem C (for Linux)
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void inicializa(char tab[9]);
void escreve(char tab[9]);
void jogadaUsuario(char tab[9]);
void jogadaComputador(char tab[9]);
int verificaJogo(char tab[9]);
int verificaLinha(char tab[9], char elem);
int resultado (char tab[9]); //ver se ta correto
main(){
char tabuleiro[9];
int cont=1;
srand(time(NULL));
inicializa(tabuleiro);
printf("\n\t||||| Usuário joga com 'X' e o computador joga com 'O' |||||\n\n");
escreve(tabuleiro);
while(cont <=3){ // este cont era pra um teste da profª..
jogadaUsuario(tabuleiro);
escreve(tabuleiro);
jogadaComputador(tabuleiro);
escreve(tabuleiro);
cont++;
}
}
void inicializa(char tab[9]){
int i;
for(i=0; i<9; i++){
tab[i] = '-';
}
}
void escreve(char tab[9]){
printf("\t\t\nJogo da Velha\n\n");
printf("0 | 1 | 2\n");
printf("%c | %c | %c\n",tab[0],tab[1],tab[2]);
printf ("_____________");
printf("3 | 4 | 5\n");
printf("%c | %c | %c\n",tab[3],tab[4],tab[5]);
printf ("_____________");
printf("6 | 7 | 8\n");
printf("%c | %c | %c\n",tab[6],tab[7],tab[8]);
}
void jogadaUsuario(char tab[9]){
int pos;
while(1){
printf("Digite uma posição válida (0-8):");
scanf("%i",&pos);
while(pos<0 || pos>8){
printf("Posição inválida. A posição deve estar no intervalo [0;8].\n");
printf("Digite novamente a posição:");
scanf("%i",&pos);
}
if(tab[pos]== '-'){
tab[pos] = 'X';
break;
}
}
}
void jogadaComputador(char tab[9]){
int pos;
while(1){
pos = rand()%9;
if(tab[pos]== '-'){
tab[pos]='O';
break;
}
}
}
int verificaJogo(char tab[9]){
if(verificaLinha(tab,'X')==1) return 1;
if(verificaLinha(tab,'O')==1) return 0;
//return 2; empate
return 3; //continua o jogo
}
int verificaLinha(char tab[9], char elem){
int i, cont,x;
for(x=0; x<8; x=x+3){
cont = 0;
for(i=x; i<x+3; i++){
if(tab[i]== elem) cont++;
}
if(cont==3) return 1;
}
return 0;
}
int resultado (char tab[9]) {
if (verificaJogo(tab) == 1)
printf("\n\tO usuário venceu!!! Parabéns!!!!!!!\n");
else if (verificaJogo(tab) == 0)
printf("\n\tO computador venceu!!! Tu é ruim hein usuário!\n");
else if (verificaJogo(tab) == 2)
printf("\n\tEmpate!!!\n");
// else printf(); //tem que continuar o jogo...
}
Preciso finalizar as ultimas funções, a verifica jogo, que deve verificar se alguem ganhou(retorna 1 se o usuário ganhou, 0 se o pc ganhou, 2 se empate e 3 para continuar jogando) me perdi em como fazer para após verificar e se ninguém ganhou e ainda der pra jogar como continuar jogando(como fazer na função resultado...) tem como ou não me expressei bem?
Se puderem ajudar agradeço...
// JOGO DA VELHA - em linguagem C (for Linux)
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void inicializa(char tab[9]);
void escreve(char tab[9]);
void jogadaUsuario(char tab[9]);
void jogadaComputador(char tab[9]);
int verificaJogo(char tab[9]);
int verificaLinha(char tab[9], char elem);
int resultado (char tab[9]); //ver se ta correto
main(){
char tabuleiro[9];
int cont=1;
srand(time(NULL));
inicializa(tabuleiro);
printf("\n\t||||| Usuário joga com 'X' e o computador joga com 'O' |||||\n\n");
escreve(tabuleiro);
while(cont <=3){ // este cont era pra um teste da profª..
jogadaUsuario(tabuleiro);
escreve(tabuleiro);
jogadaComputador(tabuleiro);
escreve(tabuleiro);
cont++;
}
}
void inicializa(char tab[9]){
int i;
for(i=0; i<9; i++){
tab[i] = '-';
}
}
void escreve(char tab[9]){
printf("\t\t\nJogo da Velha\n\n");
printf("0 | 1 | 2\n");
printf("%c | %c | %c\n",tab[0],tab[1],tab[2]);
printf ("_____________");
printf("3 | 4 | 5\n");
printf("%c | %c | %c\n",tab[3],tab[4],tab[5]);
printf ("_____________");
printf("6 | 7 | 8\n");
printf("%c | %c | %c\n",tab[6],tab[7],tab[8]);
}
void jogadaUsuario(char tab[9]){
int pos;
while(1){
printf("Digite uma posição válida (0-8):");
scanf("%i",&pos);
while(pos<0 || pos>8){
printf("Posição inválida. A posição deve estar no intervalo [0;8].\n");
printf("Digite novamente a posição:");
scanf("%i",&pos);
}
if(tab[pos]== '-'){
tab[pos] = 'X';
break;
}
}
}
void jogadaComputador(char tab[9]){
int pos;
while(1){
pos = rand()%9;
if(tab[pos]== '-'){
tab[pos]='O';
break;
}
}
}
int verificaJogo(char tab[9]){
if(verificaLinha(tab,'X')==1) return 1;
if(verificaLinha(tab,'O')==1) return 0;
//return 2; empate
return 3; //continua o jogo
}
int verificaLinha(char tab[9], char elem){
int i, cont,x;
for(x=0; x<8; x=x+3){
cont = 0;
for(i=x; i<x+3; i++){
if(tab[i]== elem) cont++;
}
if(cont==3) return 1;
}
return 0;
}
int resultado (char tab[9]) {
if (verificaJogo(tab) == 1)
printf("\n\tO usuário venceu!!! Parabéns!!!!!!!\n");
else if (verificaJogo(tab) == 0)
printf("\n\tO computador venceu!!! Tu é ruim hein usuário!\n");
else if (verificaJogo(tab) == 2)
printf("\n\tEmpate!!!\n");
// else printf(); //tem que continuar o jogo...
}
Preciso finalizar as ultimas funções, a verifica jogo, que deve verificar se alguem ganhou(retorna 1 se o usuário ganhou, 0 se o pc ganhou, 2 se empate e 3 para continuar jogando) me perdi em como fazer para após verificar e se ninguém ganhou e ainda der pra jogar como continuar jogando(como fazer na função resultado...) tem como ou não me expressei bem?
Se puderem ajudar agradeço...