Desenvolvimento de um Jogo de Xadrez em Java
Bruno Fontana Canella1,Fabricio Giordani2
1Acadêmico do curso de Ciência da Computação Unidade Acadêmica de Ciências,
Engenharias e Tecnologias - Universidade do Extremo Sul Catarinense (UNESC) Criciúma, SC - Brasil
2
Professor(a) do curso de Ciência da Computação - Unidade Acadêmica de Ciências, Engenharias e Tecnologias - Universidade do Extremo Sul Catarinense (UNESC)
Criciúma, SC - Brasil
brunocanella@yahoo.com.br, fgiordani@gmail
Resumo. Desenvolvido durante as aulas do curso de ciências da computação da UNESC, e aprimorado durante o decorrer do ano, este artigo irá demonstrar alguma das características presentes no desenvolvimento de um jogo de Xadrez. Para sua codificação, foi utilizado principalmente a linguagem de programação Java, em conjunto da linguagem Lua, a qual foi utilizada para realizar os cálculos de movimentação das peças no tabuleiro. Palavraschave: Programação; Java; Lua; Jogo; Xadrez. 1. Proposta do Trabalho Durante a disciplina de Tópicos Especiais I, até então presente na 5ª fase da grade do curso de ciências da computação da UNESC, foi sugerido o desenvolvimento de um software simples, o qual deveria aproveitar o conhecimento adquirido até então durante o curso, principalmente os da disciplina em questão. Este trabalho deveria fazer uso intensivo dos componentes de interface “Swing”, bem como outros objetos presentes no pacote de desenvolvimento distribuído na JDK. Este software também deveria ser capaz de persistir informações que o usuário informaria, além de manipulação de arrays e objetos personalizados. Sendo assim, foi discutido com o professor Fabrício Giordani a possibilidade na confecção de um jogo de Xadrez, feito inteiramente em Java, que implementasse todos os quesitos préestipulados. Uma vez confirmado, o projeto foi levado adiante e apresentado com sucesso no decorrer das aulas. Contudo, como forma de alcançar um objetivo mais audacioso, o projeto do Jogo de Xadrez foi expandido, recebendo mais algumas características para sua apresentação no Workshop de trabalhos da SulComp, evento realizado anualmente na UNESC e que atualmente se encontra em sua quarta edição. Os tópicos que seguem apresentarão algumas das principais características presentes no projeto do jogo.
2. Características Principais do Projeto
Originalmente, o jogo de xadrez desenvolvido em aula possuía uma interface gráfica, a qual demonstrava opções como “controles do jogo”, para inicio de uma nova partida, carregar uma partida salva e salvar uma partida em andamento, além do controle de movimentação das peças pelo tabuleiro com o auxilio de um mouse, onde ao clicar em uma peça, esta era transferida para o cursor do mouse, e ao clicar novamente no tabuleiro a peça era devolvida novamente para o mesmo, sendo que se houvesse uma peça ocupando a posição em que a peça em movimento foi designada, a peça que estava na posição ocupada era eliminada e substituída pela peça em movimento. É importante ressaltar que nesta etapa do projeto, não havia nenhum controle de regras do jogo, sendo que era possível matar suas próprias peças, ou então jogar diversas vezes com as peças de uma mesma cor. Na versão final do projeto, existe todo um controle das regras do jogo, sendo que cada peça possui sua limitação baseada no tipo de peça que ela é, Ex: Peão, Cavalo. Também não é mais possível matar peças de seu próprio time, nem jogar diversas vezes as peças de mesma cor. A movimentação agora é alternada entre as peças de cor branca e preta. Foi implementado também uma lista, demonstrando o histórico de jogadas da partida, o qual foi adicionada a classe de persistência do jogo. Como forma de desafio, a parte de controle de movimentação das peças no tabuleiro foi implementada com o uso da linguagem de programação Lua, desenvolvida pela PUC do Rio de Janeiro. Está linguagem é muito utilizada em jogos para a criação de scripts, permitindo assim que possam ser feitas alterações nas regras do jogo, mesmo enquanto este se encontra em execução, evitando assim diversas compilações do códigofonte do jogo para alterar o mesmo, seguindo os princípios dos motores de jogos (Game Engine). 3. Detalhes do projeto Uma das requisições na construção da primeira fase do projeto, era de que o software em questão deveria ser fortemente orientado a objetos. A figura que segue, assim como os demais subtópicos, irão explicar em detalhes como ficou a estruturação do código:
Figure 1. Figura demonstrando a esquematização das classes do jogo. 3.1. Classe Xadrez Esta classe é responsável por fazer toda a inicialização do programa, criando os objetos de persistência, interface, e controle do tabuleiro. É a classe principal do projeto. 3.2. Classe XadrezRegra Nesta classe estão contidas boa parte das verificações das regras do jogo, como a determinação das condições de fim de jogo, vitória ou empate, turno dos jogadores, entre outros. 3.3. Classe XadrezInterface A classe XadrezInterface é responsável por criar todos os componentes que servirão para comunicação com o usuário do jogo. Nela são criadas as opções do jogo, são montadas as partes visuais do tabuleiro, e também demonstra o histórico de jogadas em uma lista. 3.4. Classe XadrezPersistencia Encarregada da persistência dos dados do jogo, ou seja, a gravação e recuperação de dados. Em geral, as informações persistentes são as posições das peças e o histórico de jogadas. 3.5. Classe XadrezTabuleiro Responsável por manter um registro das peças que estão em jogo, além do formato do tabuleiro em si. Ela possui diversos objetos do tipo XadrezPiso, os quais ficam armazenados em uma array, que por padrão possui tamanho 8x8, igual ao do jogo.
3.6. Classe XadrezPiso Possui herança no componente JPanel, onde além das propriedades comuns, recebe também o código necessário para armazenar e representar graficamente uma peça do jogo de xadrez. 3.7. Classe XadrezPeca É a representação de uma peça de xadrez do mundo real, no jogo. Ela possui um método abstrato de movimentação e detecção de movimentos válidos, os quais são sobre escritos pelas classes que herdam desta peça. 3.8. Classes que herdam de XadrezPeca Estas seriam as classes PeaoPeca, CavaloPeca, BispoPeca, TorrePeca, RainhaPeca e ReiPeca. Cada classe sobreescreve os métodos de movimentação de XadrezPeca, bem como possui sua própria constante, contendo o endereço de sua imagem de exibição 4. Linguagem Lua Como citado anteriormente no projeto, um pequeno trecho do código foi escrito em Lua, mais precisamente a parte de verificação e movimentação em sí das peças do tabuleiro. Para realizar esta integração entre as duas linguagens, foi utilizado uma biblioteca chamada LuaJava, a qual realize todas as chamadas das DLL’s da linguagem Lua para o código em Java.
Cada classe que herda de XadrezPeca é obrigada a especificar a sua rotina de movimentação. Nesta parte do programa, foi realizada a chamada de funções escritas em Lua, que estavam em arquivos separados do projeto principal, para avaliar a movimentação de cada peça. Esta chamada dinâmica de verificação permite a alteração nas regras de movimentação das peças, sem a necessidade de recompilação do software, ou até mesmo o seu fechamento.
5. Conclusão
Com o fim deste trabalho, foi possivel contruir um pequeno e funcional jogo de xadrez, utilizando apenas ensinamentos adquiridos no curso de ciencias da comutação da UNESC até a 5ª fase. A adição de recursos extras, como a utilização de uma linguagem de scripts, como a Lua, tiveram de ser aprendidos por conta do acadêmico, mas são de facil acesso e aprendizagem.
Referencias
Davison, Andrew. (2005) Killer Game Programming in Java, Edited by Brett McLaughlin, O’Reilly Media, United States of America.
Buckland, Mat. (2005) Programming Game AI by Example, Wordware Publishing Inc, United States of America.
Martins, Guilherme e Eduardo Jason Santos, Luis e Ponte, Thiago. (2004) “LuaJava: A Script Tool for Java”, http://www.keplerproject.org/luajava/, Junho.
Tecnologia em Computação Gráfica da PUCRio. (1997) “A Linguagem de Programação Lua”, http://www.lua.org/portugues.html. Fevereiro.