Desenvolvendo jogo Tablut em C++

Ola a todos, hoje vou passar para vocês como desenvolver um jogo simples chamado Tablut em c++. Rodando em todas plataformas, com modo gráfico mediócre em linhas de código, mas de grande importância para estudos.

Nível: intermediário;
Conhecimentos exigidos: Lógica de Programação, C++;

Bom, antes de desenvolvermos o jogo, vamos estudar o seu comportamento como suas regras, sugiro estes sites que explicam muito bem:

http://www.jogos.antigos.nom.br/tablut.asp
http://pt.wikipedia.org/wiki/Tablut#Tablut

Depois de ter conhecimento no jogo, começamos a programar. Antes de mais nada, o modo que vou ensinar foi uma lógica na qual eu desenvolvi, existem diversas maneiras de se chegar ao mesmo resultado.

Metendo a mão na massa, com o editor c++ e o compilador de sua preferencia, iniciamos a programar o jogo:




#include
#include

using namespace std;

//Partida
bool partida = false;
bool liberado = true;

int pretas_mortas = 0;
int brancas_mortas = 0;

//Mercenario
const char M = (char)02;

//Guarda
const char G = (char)01;

//Rei
const char R = (char)06;

//Pos em branco
const char T = (char)254;

//Trono
const char C = (char)255;

//Funcao que verifica se possui peca no caminho
bool liberar(int x1, int y1, int x2, int y2, char tabuleiro[9][9]){

if(x2 for(int n=x2+1; n if (tabuleiro[n][y1]==G || tabuleiro[n][y1]==R || tabuleiro[n][y1]==M){
return false;
}

}
} else if(x2>x1){
for(int n=x1+1; n if (tabuleiro[n][y1]==G || tabuleiro[n][y1]==R || tabuleiro[n][y1]==M){
return false;
}
}
}

if(y2 for(int n=y2+1; n if (tabuleiro[x1][n]==G || tabuleiro[x1][n]==R || tabuleiro[x1][n]==M){
return false;
}
}
} else if(y2>y1){
for(int n=y1+1; n if (tabuleiro[x1][n]==G || tabuleiro[x1][n]==R || tabuleiro[x1][n]==M){
return false;
}
}
}
return true;
}

//funcao que checa se o Rei esta vivo
void rei(char tabuleiro[9][9]){

for(int l=0; l<9; l++){
for(int c=0; c<9; c++){
if(tabuleiro[0][c] == R){
partida = true;
cout<<"Pecas Pretas Venceram o Jogo. \07 \n"<
//gambiara q para o laço
l = 9;
c = 9;
} else if(tabuleiro[8][c] == R){
partida = true;
cout<<"Pecas Pretas Venceram o Jogo. \07 \n"<
//gambiara q para o laço
l = 9;
c = 9;
} else if(tabuleiro[l][0] == R){
partida = true;
cout<<"Pecas Pretas Venceram o Jogo. \07 \n"<
//gambiara q para o laço
l = 9;
c = 9;
} else if(tabuleiro[l][8] == R){
partida = true;
cout<<"Pecas Pretas Venceram o Jogo. \07 \n"<
//gambiara q para o laço
l = 9;
c = 9;
} else{
if(tabuleiro[l][c] == R){
if( tabuleiro[l-1][c] == M && tabuleiro[l+1][c] == M && tabuleiro[l][c-1] == M && tabuleiro[l][c+1] == M){
partida = true;
cout<<"Pecas Brancas Venceram o Jogo. \07 \n"<
//gambiara q parra o laço
l = 9;
c = 9;
} else if(tabuleiro[l-1][c] == C && tabuleiro[l+1][c] == M && tabuleiro[l][c-1] == M && tabuleiro[l][c+1] == M){
partida = true;
cout<<"Pecas Brancas Venceram o Jogo. \07 \n"<
//gambiara q parra o laço
l = 9;
c = 9;
} else if(tabuleiro[l-1][c] == M && tabuleiro[l+1][c] == C && tabuleiro[l][c-1] == M && tabuleiro[l][c+1] == M){
partida = true;
cout<<"Pecas Brancas Venceram o Jogo. \07 \n"<
//gambiara q parra o laço
l = 9;
c = 9;
} else if(tabuleiro[l-1][c] == M && tabuleiro[l+1][c] == M && tabuleiro[l][c-1] == C && tabuleiro[l][c+1] == M){
partida = true;
cout<<"Pecas Brancas Venceram o Jogo. \07 \n"<
//gambiara q parra o laço
l = 9;
c = 9;
} else if(tabuleiro[l-1][c] == M && tabuleiro[l+1][c] == M && tabuleiro[l][c-1] == M && tabuleiro[l][c+1] == C){
partida = true;
cout<<"Pecas Brancas Venceram o Jogo. \07 \n"<
//gambiara q parra o laço
l = 9;
c = 9;
}
}
}
}
}
}

//funcao para imprimir tabuleiro
void imprimir(char tabuleiro[9][9]){
for (int l=0; l<9; l++){
for(int c=0; c<9; c++){
cout<< tabuleiro[l][c];
}
cout< }
cout<}

/* -------------------------------------------------------------------------*/

int main(){

char tabuleiro[9][9] = {{254,254,254,02,02,02,254,254,254},
{254,254,254,254,02,254,254,254,254},
{254,254,254,254,01,254,254,254,254},
{02,254,254,254,01,254,254,254,02},
{02,02,01,01,06,01,01,02,02},
{02,254,254,254,01,254,254,254,02},
{254,254,254,254,01,254,254,254,254},
{254,254,254,254,02,254,254,254,254},
{254,254,254,02,02,02,254,254,254}};

bool brancas = true;

int x1, y1, x2, y2;

//------------------------------------//

cout<<"Jogo de Tabuleiro Tablut Beta 0.07"< cout<<"Autores: Jason S. Piloti \n Andriel Giovanela \n"< cout<<"|-----------------------------------------------------------------------------|"< cout<<"Instrucoes"< cout< cout<<"O objetivo do jogo e das pecas brancas conseguirem escapar com o seu rei ate \n qualquer lado do tabuleiro. As pretas tentam capturar o rei branco. \n Cada jogar movimenta uma unica peca por vez, as pecas tem movimentos na horizontal e vertical. \n Apos o Rei Deixar seu trono, nenhuma peca ocupa seu lugar, podendo apenas pular sobre o trono. \n O jogador deve informar a posicao da peca a ser movida e a nova posicao. \n O tabuleiro Inicia de 0 a 8, tanto na diagonal quanto na vertical. \n"< cout<<"|-----------------------------------------------------------------------------|"< cout<
imprimir(tabuleiro);

while(partida != true){

if (brancas == true){
cout<<"Digite a cordenada (Linha, Coluna) da peca Branca a ser movida:"< cin>>x1>>y1;

cout<<"|-----------------------------------------------------------------------------|"<
cout<<"Digite a nova cordenada (Linha, Coluna) da peca Branca:"< cin>>x2>>y2;

cout<<"|-----------------------------------------------------------------------------| \n"<
if(x1 < 9 && y1 <9 && x2 < 9 && y2 <9){
if(x2 != x1 && y2 != y1){
cout<<"Jogada Invalida - Movimente as pecas nas posicoes Horizontal ou Vertical \n"< }else {
if(tabuleiro[x1][y1] != G && tabuleiro[x1][y1] != T && tabuleiro[x1][y1] != R && tabuleiro[x1][y1] != C){
if(tabuleiro[x2][y2] == T){


if(liberar(x1,y1,x2,y2,tabuleiro)){

tabuleiro[x2][y2] = tabuleiro[x1][y1];
tabuleiro[x1][y1] = T;

/* --- Verifica se come a peca oponente --- */

if(tabuleiro[x2+1][y2] == G){
int ax = x2+1;
int ay = y2;

if(tabuleiro[ax+1][ay] == M){
tabuleiro[ax][ay] = T;

brancas_mortas = brancas_mortas + 1;
}
}

if(tabuleiro[x2-1][y2] == G){
int ax = x2-1;
int ay = y2;

if(tabuleiro[ax-1][ay] == M){
tabuleiro[ax][ay] = T;

brancas_mortas = brancas_mortas + 1;
}
}

if(tabuleiro[x2][y2+1] == G){
int ax = x2;
int ay = y2+1;

if(tabuleiro[ax][ay+1] == M){
tabuleiro[ax][ay] = T;

brancas_mortas = brancas_mortas + 1;
}
}

if(tabuleiro[x2][y2-1] == G){
int ax = x2;
int ay = y2-1;

if(tabuleiro[ax][ay-1] == M){
tabuleiro[ax][ay] = T;

brancas_mortas = brancas_mortas + 1;
}
}

rei(tabuleiro);
imprimir(tabuleiro);

cout<
brancas = false;

} else {
cout<<"Jogada Invalida - Pecas no caminho. \n"< }
} else {
cout<<"Jogada Invalida - Existe uma peca neste lugar, efetue novamente a jogada. \n"< }
} else {
cout<<"Jogada Invalida - Por Favor movimente suas pecas. \n"< }
}
} else {
cout<<"Jogada Invalida - Peca nao corespondida no tabuleiro. \n"< }

} else {
cout<<"Digite a cordenada (Linha, Coluna) da peca Preta a ser movida:"< cin>>x1>>y1;

cout<<"|-----------------------------------------------------------------------------|"<
cout<<"Digite a nova cordenada (Linha, Coluna) da peca Preta:"< cin>>x2>>y2;

cout<<"|-----------------------------------------------------------------------------| \n"<
if(x1 < 9 && y1 <9 && x2 < 9 && y2 <9){
if(x2 != x1 && y2 != y1){
cout<<"Jogada Invalida - Movimente as pecas nas posicoes Horizontal ou Vertical \n"< } else {
if(tabuleiro[x1][y1] != M && tabuleiro[x1][y1] != T && tabuleiro[x1][y1] != C){
if(tabuleiro[x2][y2] == T){

if(liberar(x1,y1,x2,y2,tabuleiro)){

tabuleiro[x2][y2] = tabuleiro[x1][y1];
tabuleiro[x1][y1] = T;

/* -- verifica se mecheu o rei pela 1 vez -- */

if(tabuleiro[x1][y1] == tabuleiro[4][4]){
tabuleiro[x2][y2] = R;
tabuleiro[x1][y1] = C;
}

/* --- Verifica se come a peca oponente --- */

if(tabuleiro[x2+1][y2] == M){
int ax = x2+1;
int ay = y2;

if(tabuleiro[ax+1][ay] == G){
tabuleiro[ax][ay] = T;

pretas_mortas = brancas_mortas + 1;
}
}

if(tabuleiro[x2-1][y2] == M){
int ax = x2-1;
int ay = y2;

if(tabuleiro[ax-1][ay] == G){
tabuleiro[ax][ay] = T;

pretas_mortas = brancas_mortas + 1;
}
}

if(tabuleiro[x2][y2+1] == M){
int ax = x2;
int ay = y2+1;

if(tabuleiro[ax][ay+1] == G){
tabuleiro[ax][ay] = T;

pretas_mortas = brancas_mortas + 1;
}
}

if(tabuleiro[x2][y2-1] == M){
int ax = x2;
int ay = y2-1;

if(tabuleiro[ax][ay-1] == G){
tabuleiro[ax][ay] = T;

pretas_mortas = brancas_mortas + 1;
}
}

rei(tabuleiro);
imprimir(tabuleiro);

cout<
brancas = true;

} else {
cout<<"Jogada Invalida - Peca nao corespondida no tabuleiro. \n"< }
} else {
cout<<"Jogada Invalida - Existe uma peca neste lugar, efetue novamente a jogada. \n"< }
}else{
cout<<"Jogada Invalida - Por Favor movimente suas pecas. \n"< }
}
} else {
cout<<"Jogada Invalida - Peca nao corespondida no tabuleiro. \n"< }
}

}

system("PAUSE");
return(0);
}




Feito isso, é só compilar e se divertir.. hehehe.. Abraço a todos.