Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Localhost

Jogo do galo

Recommended Posts

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

Share this post


Link to post
Share on other 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".

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites
dnascimento

Já tinha feito o meu  :cheesygrin: 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.