Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Localhost

Jogo do galo

Mensagens Recomendadas

Localhost

Ora bem, visto que já é um clássico fazer um jogo do galo também fiz um e vou deixá-lo aqui para quem quiser mexer nele.

Podem jogar com o computador ou contra outra pessoa qualquer.

Não quis fazer uma coisa muito extensa então coloquei tudo no mesmo ficheiro.

Espero que gostem e que joguem muito  :)

#include <stdio.h>
#include <stdlib.h>

char mTable[3][3] = {' ',' ',' ',' ',' ',' ',' ',' ',' '};

char cWinner = ' ';
int iAux = 0;

int ShowTable(void) {
system("clear");
printf("_%c_|_%c_|_%c_\n", mTable[0][0],mTable[0][1],mTable[0][2]);
printf("_%c_|_%c_|_%c_\n", mTable[1][0],mTable[1][1], mTable[1][2]);
printf(" %c | %c | %c\n", mTable[2][0],mTable[2][1],mTable[2][2]);
return 0;
}

int GetPlayerMove(void) {
int iLine = 0;
int iColumn = 0;
printf("What's the line? ");
scanf("%i", &iLine);
if(iLine <= 0 || iLine >= 4) {
	printf("Invalid Position to play\n");
	GetPlayerMove();
}
printf("What's the column? ");
scanf("%i", &iColumn);
if(iColumn <= 0 || iColumn >= 4) {
	printf("Invalid position to play\n");
	GetPlayerMove();
}
if(mTable[iLine-1][iColumn-1] != ' ') {
	printf("Position occupied\n");
	GetPlayerMove();
}
mTable[iLine-1][iColumn-1] = 'X';
iAux++;
return 0;
}

int GetPcMove(void) {
int iLine = 0;
int iColumn = 0;
for(iLine = 0; iLine < 3; iLine++) {
	for(iColumn = 0; iColumn < 3; iColumn++) {
		if(mTable[iLine][iColumn] == ' ') {
			mTable[iLine][iColumn] = 'O';
			return 0;
		}
	}
}
iAux++;
return 0;
}

int CheckWinner(void) {
if((mTable[0][0] == mTable[0][1]) && (mTable[0][0] == mTable[0][2])) {
	ShowTable();
	cWinner = mTable[0][0];
}
if((mTable[1][0] == mTable[1][1]) && (mTable[1][0] == mTable[1][2])) {
	ShowTable();
	cWinner = mTable[1][0];
}
if((mTable[2][0] == mTable[2][1]) && (mTable[2][0] == mTable[2][2])) {
	ShowTable();
	cWinner = mTable[2][0];
}

if((mTable[0][0] == mTable[1][0]) && (mTable[0][0] == mTable[2][0])) {
	ShowTable();
	cWinner = mTable[0][0];
}
if((mTable[0][1] == mTable[1][1]) && (mTable[0][1] == mTable[2][1])) {
	ShowTable();
	cWinner = mTable[0][1];
}
if((mTable[0][2] == mTable[1][2]) && (mTable[0][2] == mTable[2][2])) {
	ShowTable();
	cWinner = mTable[0][2];
}

if((mTable[0][0] == mTable[1][1]) && (mTable[0][0] == mTable[2][2])) {
	ShowTable();
	cWinner = mTable[0][0];
}
if((mTable[0][2] == mTable[1][1]) && (mTable[0][2] == mTable[2][0])) {
	ShowTable();
	cWinner = mTable[0][2];
}
return 0;
}

int GetPlayer2Move(void) {
int iLine = 0;
int iColumn = 0;
printf("What's the line? ");
scanf("%i", &iLine);
if(iLine <= 0 || iLine >= 4) {
	printf("Invalid Position to play\n");
	GetPlayerMove();
}
printf("What's the column? ");
scanf("%i", &iColumn);
if(iColumn <= 0 || iColumn >= 4) {
	printf("Invalid position to play\n");
	GetPlayerMove();
}
if(mTable[iLine-1][iColumn-1] != ' ') {
	printf("Position occupied\n");
	GetPlayerMove();
}
mTable[iLine-1][iColumn-1] = 'O';
iAux++;
return 0;
}

int MainMenu(void) {
int iChoose = 0;
printf("Bem vindo ao Jogo do Galo!\n");
printf("O que pretende fazer?\n");
printf("1. Jogar contra outra pessoa\n");
printf("2. Jogar contra o computador\n");
printf("3. Sair do jogo\n");
printf(">> ");
scanf("%d", &iChoose);
return iChoose;
}

int main(void) {
int iChoose = MainMenu();
switch(iChoose) {
	case 1:
		while(iAux < 9 && cWinner == ' ') {
			if(iAux == 9) {
				break;
			} 
			ShowTable();
			GetPlayerMove();
			CheckWinner();
			if(cWinner != ' ') {
				break;
			}
			GetPlayer2Move();
			ShowTable();
			CheckWinner();
		}
		break;

	case 2:
		while(iAux < 9 && cWinner == ' ') {
			if(iAux == 9) {
				break;
			}	
			ShowTable();
			GetPlayerMove();
			CheckWinner();
			GetPcMove();
			CheckWinner();
		}
		break;

	default:
		exit(0);
}
if(cWinner == 'X') {
	printf("O X ganhou o jogo\n");
}else if(cWinner == 'O') {
	printf("O O ganhou o jogo!\n");
}else {
	printf("Existiu um empate\n");
}
return 0;
}

p.s. Qualquer bug é favor postar aqui.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
dnascimento

Ainda não li o programa, experimentei só a utiliza-lo mas experimenta fazer as posições 1 1 , 2 2, 3 3. O jogador automático faz sempre a mesma joga... Mas de qualquer forma, excelente :P

Comecei C à 2 semanas em casa mas 1 sugestão: na função ShowTable usa um ciclo, é mais fácil e "bonito".

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
dnascimento

Já percebi como é que o teu jogador PC pensa... Procura sempre de seguida no tabuleiro 1 1, 1 2, 13, etc por uma posição válida (não ocupada) e joga ai  :)

Mas está muito bacano  :P

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Exacto. Fiz isto rapidamente, não me apeteceu fazer uma engine em que vê qual deve ser a melhor posição para jogar. Para fazer isso já tinha de escrever mais código, coisa que não me apetecia muito no momento.

Visto que está a iniciar-te analisa bem o meu código e tenta perceber. :P


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
dnascimento

Já tinha feito o meu  :biggrin: Só que não verificava se era uma opção válida, se dava vitória nem tinha o PC a jogar... Apresentava só a tabela de jogo e depois era só dar-lhe as coordenadas. Ora metia um x ora metia um O... Para aprender a trabalhar com vectores... Mas já analisei o teu programa, keep going  :P

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.