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.
