Ir para conteúdo
Fórum Script Brasil
  • 0

Movimento Xadrez


djohnny

Pergunta

Ola pessoal retorno hoje ao conviveo aqui no script brasil, andei meio afastado devido a correria do meu trabalho.

Mas bem estou retomando o meu antigo projeto que é de um programa de xadrez que comecei a fazer ele ano passado, assim que entrei na faculdade, enfrento diversas dificuldades pois não sou programador ainda mas estou me tornando um, e espero contra com a ajuda dos colegas que aqui sempre me ajudaram. Obrigado e agora vamos a duvida.

1 - Galera estou com dificuldade para montar a base de movimento para uma das peças, no caso o Bispo

que só se movimenta em diagonal no jogo de xadrez, porém a duvida é como fazer ele varrer a matriz e impedir que o jogador mova ele para frente, ou faça outro lance que não seja permitido?

2 - a Segunda duvida é ainda sim a mais dificil, estou montando o jogo já montei algumas regras para o tabuleiro e peão e torre, mas a minha dificuldade esta sendo como estar o programa já que não tenho um LAYOUT para observar se esta dando para movimentar as peças, alguém tem alguma idéia como faço para interagir o programa com uma imagem de um tabuleiro e das peças?

aguardo

Atenciosamente

Johnny

Este programa que estou montando não vai ter um sistema de computador e sim sera humano vs humano.

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Você está fazendo em C ou C++? Se for na segunda, ele é orientado a objetos ou não? É importante saber isso para te fornecer uma resposta mais precisa sobre como limitar os movimentos de uma determinada peça.

Agora, quando se fala na parte visual, em sempre tenho que perguntar... precisa mesmo ser em C/C++? Pergunto isso porque hoje em dia temos muito mais recursos e facilidades em relação ao layout quando utilizamos uma ferramenta RAD (como o Visual Studio, por exemplo).

De qualquer maneira, inicialmente você poderia simplesmente usar caracteres para representar as peças (P = peão, T = torre, B = bispo, Ra = rainha, Re = rei, etc.) e fazer o tabuleiro com | e - (sendo que existem caracteres melhores para desenhar no console, é só procurar na tabela ANSI/ASCII).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

opa

1 - A forma como todos os programas de xadrez fazem para não permitir jogadas ilegais, e até mesmo saber quais são as jogadas legais para fazer uma busca, é verificar os movimentos legais de cada peça no tabuleiro e salva-los num vetor, então se o usuário tentar fazer um movimento, o programa tem que verificar primeiro se aquele movimento se encontra no vetor, porque senão é um movimento ilegal. Mas para isso você tem que conhecer todas as regras do Xadrez.

2 - você não explicou direito, mas acho que está se referindo a interface gráfica. Bom, eu escreví uma interface gráfica de xadrez na forma de um componente Delphi. Pena que você está fazendo em C, senão eu podia te passar ele. Mas não é muito difícil, derive uma classe de TGraphicControl, ela possui todos os eventos necessários. E no caso de você não estar utilizando o C++Builder você tem apenas que processar as mensagems do Windows referentes ao mouse.

Este programa que estou montando não vai ter um sistema de computador e sim sera humano vs humano.

Ainda bem. Vejo que você não é um daqueles pretenciosos que perguntam como implementar a inteligencia artificial do xadrez aqui no forum. Eu certa vez tentei faze-lo, sem antes estudar o assunto, mas meu programa só jogava com uma inteligencia de uma criança de 4 anos. ainda tenho esse projeto de fazer um Engine de xadrez, mas infelizmente a falta de tempo não está permitindo que termine.

Abraços.

Editado por Thales Pontes Martins
Link para o comentário
Compartilhar em outros sites

  • 0

Então galera obrigado pela atenção e pelas dicas.

então estou meio perdido sim e meio deslocado neste projeto mas não vou desistir.

estou montando em C e estou estudando C++ pois não vi nada de C++ na faculdade e o que vi de C é muito fraco.

e não estou tendo apoio de ninguém, afinal nem todos acreditam no meu projeto de xadrez.

Veja eu vou mostrar um exemplo mais ou menos do controle de uma peça.

//HORSE

int horse(int x,int y,int x1,int y1)
{
    int a=0;
    if((y1==y+2 && x1==x+1)||(y1==y+2 && x1==x-1)||(y1==y+1 &&
x1==x+2)||(y1==y+1 && x1==x-2)||(y1==y-1 && x1==x+2)||(y1==y-1 &&
x1==x-2)||(y1==y-2 && x1==x+1)||(y1==y-2 && x1==x-1)){
        a = 1;
        }
    return a;

Alguém acha da para para simplificar isso.

Olha não me interesso de montar um sistema de inteligencia artificial pois o meu programa vai ser para a internet.

e estou fazendo em C pois ira ficar muito leve e agil e consigo fazer ele rodar através de uma pagina de internet sem o usuario ter que baixar o programa etc.

Alguém tem alguma ideia ou opnião?

Aguardo

ATenciosamente

Johnny

Link para o comentário
Compartilhar em outros sites

  • 0
Então galera obrigado pela atenção e pelas dicas.

então estou meio perdido sim e meio deslocado neste projeto mas não vou desistir.

estou montando em C e estou estudando C++ pois não vi nada de C++ na faculdade e o que vi de C é muito fraco.

e não estou tendo apoio de ninguém, afinal nem todos acreditam no meu projeto de xadrez.

Veja eu vou mostrar um exemplo mais ou menos do controle de uma peça.

////HORSE//////

int horse(int x,int y,int x1,int y1)

{

int a=0;

if((y1==y+2 && x1==x+1)||(y1==y+2 && x1==x-1)||(y1==y+1 &&

x1==x+2)||(y1==y+1 && x1==x-2)||(y1==y-1 && x1==x+2)||(y1==y-1 &&

x1==x-2)||(y1==y-2 && x1==x+1)||(y1==y-2 && x1==x-1)){

a = 1;

}

return a;

Alguém acha da para para simplificar isso.

Sim, acho que a idéia do Thales, de calcular todas as posições possíveis e depois verificar se a posição desejada está contida no conjunto, seria mais simples e clara do que esse monte de ifs.

Olha não me interesso de montar um sistema de inteligencia artificial pois o meu programa vai ser para a internet.

e estou fazendo em C pois ira ficar muito leve e agil e consigo fazer ele rodar através de uma pagina de internet sem o usuario ter que baixar o programa etc.

Alguém tem alguma ideia ou opnião?

Você diz como um CGI? A saída do seu programa pode ser mostrada em um navegador? Se sim, então a parte gráfica é simples. É só você usar HTML para renderizar o tabuleiro com as peças nos seus devidos lugares. CSS também é bem-vinda, se você preferir, mas só HTML já dá pra fazer o que você quer.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Sim, acho que a idéia do Thales, de calcular todas as posições possíveis e depois verificar se a posição desejada está contida no conjunto, seria mais simples e clara do que esse monte de ifs.

Graymalkin>> Desculpe pela ignorancia mas tem alguma ideia desse metodo diferente de calcular todas as posições possiveis?,

pois estou usando if devido a falta de um amplo conhecimento em C++.

há proposito estou montando em C++

"Você diz como um CGI? A saída do seu programa pode ser mostrada em um navegador? Se sim, então a parte gráfica é simples. É só você usar HTML para renderizar o tabuleiro com as peças nos seus devidos lugares. CSS também é bem-vinda, se você preferir, mas só HTML já dá pra fazer o que você quer."

Graymalkin> não sei fazer isso tem algo que explique isso em C++ pois só preciso ver a linha de raciocineo ai vou desenvolvendo e vendo no que da.

pois estou sozinho nessa e contando com o auxilio de vocês ai.

agradeço muito

e obrigado

Aguardo

ATenciosamente

Johnny

Link para o comentário
Compartilhar em outros sites

  • 0
Sim, acho que a idéia do Thales, de calcular todas as posições possíveis e depois verificar se a posição desejada está contida no conjunto, seria mais simples e clara do que esse monte de ifs.

Graymalkin>> Desculpe pela ignorancia mas tem alguma ideia desse metodo diferente de calcular todas as posições possiveis?,

pois estou usando if devido a falta de um amplo conhecimento em C++.

Tomemos o Cavalo como exemplo, já que a sua movimentação é peculiar (em relação às demais peças). Como o movimento do mesmo é sempre em L, só precisamos (em relação a posição inicial): somar/subtrair 2 colunas e somar/subtrair 1 linha e somar/subtrair 2 linhas e somar/subtrair 1 coluna. Com estes 8 cálculos teremos as 8 posições para uma dada posição inicial da peça. No caso da peça estar próxima das laterais alguns dos cálculos resultarão em posições inválidas que deverão ser descartadas.

Determinar as posições possíveis das demais peças é mais fácil ainda já que elas não possuem movimentos como os do Cavalo. Você só precisa se lembrar que elas não "pulam" outras peças que estejam no seu caminho (diferentemente do Cavalo).

há proposito estou montando em C++

Bom, se você está fazendo em C++ você poderia tirar proveito do suporte de OO (Orientação a Objetos) que a linguagem possui. Mas, isso iria requerer um pouco de estudo sobre esse método de programação. Vale a pena porque o resultado final seria muito mais organizado do que o modelo procedural (que é o que você está utilizando). Se você já conhecer algo sobre o assunto eu posso até te dar algumas dicas (mas, leia o meu último parágrafo).

"Você diz como um CGI? A saída do seu programa pode ser mostrada em um navegador? Se sim, então a parte gráfica é simples. É só você usar HTML para renderizar o tabuleiro com as peças nos seus devidos lugares. CSS também é bem-vinda, se você preferir, mas só HTML já dá pra fazer o que você quer."

Graymalkin> não sei fazer isso tem algo que explique isso em C++ pois só preciso ver a linha de raciocineo ai vou desenvolvendo e vendo no que da.

Mas, foi *você* mesmo que disse: "e estou fazendo em C pois ira ficar muito leve e agil e consigo fazer ele rodar através de uma pagina de internet sem o usuario ter que baixar o programa etc."

Como você pretendia fazer o seu programa rodar "através de uma página da Internet sem que o usuário tivesse que baixar o programa"? :huh: Que eu saiba o único jeito de se fazer isso é usando uma linguagem no servidor de forma que você possa determinar o que o usuário vai receber no navegador. E, C/C++ não é a melhor das linguagens para se fazer isso...

pois estou sozinho nessa e contando com o auxilio de vocês ai.

agradeço muito

e obrigado

Eu sugeriria a você estudar um pouco mais de lógica de programação e no caso de usar uma linguagem orientada a objetos, estudar este tópico também. Mais do que tudo, eu aconselharia a você procurar uma linguagem de programação mais simples (mas não simplória) e na qual você pudesse expressar melhor seus pensamentos (Python, por exemplo).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Mas, foi *você* mesmo que disse: "e estou fazendo em C pois ira ficar muito leve e agil e consigo fazer ele rodar através de uma pagina de internet sem o usuario ter que baixar o programa etc."

Como você pretendia fazer o seu programa rodar "através de uma página da Internet sem que o usuário tivesse que baixar o programa"? Que eu saiba o único jeito de se fazer isso é usando uma linguagem no servidor de forma que você possa determinar o que o usuário vai receber no navegador. E, C/C++ não é a melhor das linguagens para se fazer isso...

Mas aí vem o X da questão, já citado pelo Graymalkin: precisa ser em C/C++? Pois, você quer que rode em ambiente WEB. E caso você tenha liberdade de escolha em termo de linguagem: use ASP.net. Pode até longar seus estudos, pois você terá que estudar a linguagem (creio que você não programe em .Net), mas a possibilidade de interação com o usuário/facilidade para montagem da engine irá aumentar, e muito!

Falows! Qualquer coisa, estamos aí!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,7k
×
×
  • Criar Novo...