Jogo de Dominó com Interface

7 respostas
Milk15

Bom Pessoal, primeiramente quero deixar claro: NÃO estou pedindo o código na mão, não quero que me entreguem pronto o “trabalho da facul” como ultimamente muitos entram no fórum só pra pedir isso, até pq isso não é apenas um trabalho, pq também eu tenho que entender já que eu faço SI

Primeiro vou tentar situar vocês na minha situação, estou no 2º periodo, e vendo POO pela primeira vez na vida(vcs devem lembrar como é difícil o início), o problema é que esse professor, na mente dele acha que a gente já é os “feras” na parte de lógica de programação, ai a aula dele tá mais voltada especificamente para Java do que para OO em si, e ele acaba passando listas “impossíveis” pra gente resolver com pouco prazo. (Quem já foi iniciante eu acho que devia tb pensar assim sobre os exercícios hehe).

Voltando ao assunto, ele passou semana passada pra entregar uma lista até o prox dia 14, tendo que fazer um jogo de dominó, de 21 e uma calculadora, tudo com interface gráfica!

No jogo de 21, e a calculadora to tentando me virar

Mas fazer um jogo de dominó, eu não tenho idéia nem de como organizar! eu acho muito complicada a lógica e ainda mais com GUI.
E nem exemplo eu achei na net.

Vocês poderiam me dar algumas dicas de como fazer isso ? =)

A questão:

  1. Elabore uma aplicação em Java para gerenciar uma partida de dominó jogada por 2 participantes, um
    jogador humano e outro artificial. Utilize uma interface gráfica e tratamento de exceções.

As dúvidas(Muito provavelmente eu tenho mais que essas hehe)

-Suponho que eu terei que criar uma herança…em quantas classes vc recomendariam dividir o projeto? e qual seria a herança?
Mais ou menos como eu implementaria a lógica em cada classe (não é o código em si que quero saber, mas o que eu implementaria em cada classe) e como seria lidar ela junto à interface gráfica

  • Onde que entra a parte de tratamento de exceções?

Se puderem me auxiliar, eu agradeceria muitíssississisisimo =)

7 Respostas

E

A interface gráfica é meio chatinha, amigo :slight_smile:

Eu diria que, para começar a resolver seu problema, você tentasse primeiramente resolver o problema logicamente.

Depois, pense na parte gráfica - é claro, se der tempo, e se possível, tente simplificá-la (em termos de implementação, é claro) tambem.
(O que é simples para mostrar ou simples para usar normalmente é mais difícil para fazer - pense no Kinect, da Microsoft: é fácil de usar, mas quantos gênios foram necessários para fazer aquilo funcionar?).
Um modo de simplificar a implementação da parte gráfica é, em vez de mostrar aquela peça que tem 2 valores iguais (1, 1), (2, 2) de forma atravessada, mostrá-la como se fosse uma das peças normais. Talvez facilite se em vez de mostrar os 5 pontinhos, simplesmente mostrar o número 5.
É mais feio mas mais simples de mostrar.

Pra começar, você sabe que em um jogo de dominó temos 28 peças. Não estou usando as regras normais e sim regras bem simplificadas (as completas você pode encontrar aqui: http://pt.wikipedia.org/wiki/Dominó )

  1. Como representar cada peça? (Cuidado com a representação - um dominó pode ser representado como “6,1” ou “1,6”, mas é a mesma peça).
  2. Você tem de bolar como sortear essas peças, e dividi-las entre os jogadores.
  3. Pense como é possível criar uma estrutura de dados que represente essas peças.
  4. A seguir, pense em como você, dado um jogo que já está representado em uma estrutura de dados, consegue dizer se uma determinada peça pode ser encaixada no dominó. Não se esqueça que em um dominó você pode encaixar uma peça na frente ou atrás, mas não no meio. Isso já simplifica um pouco o seu problema.
    Note que isso será usado para cada jogador decide se pode encaixar uma peça, ou então passar a vez.
  5. No caso do jogador robótico, use uma lógica bem boboca - escolha a primeira peça que se encaixe no jogo corrente. A menos que o professor tenha ensinado também algoritmos de “backtracking” ou coisas mais complicadas, simplesmente use a lógica simples.
  6. No caso do jogador humano, você tem de mostrar as peças que já existem, e pedir para escolher uma delas. Você também precisa checar se a peça pode ser usada, e criar um botão de “Passar” para indicar ao computador que ele pode jogar.
  7. Para saber se o jogo acabou, ou ambos não conseguem mais encaixar nenhuma peça, ou então um dos jogadores ficou sem peças. O vitorioso é quem tem menos peças.

Eu digo que há poucas “classes” nesse programa; a descrição que eu dei já lhe permite que você descubra quais são elas. OK?

Milk15

valeuuu cara :smiley:

só uma dúvida, como eu iria ordenar as peças,tipo ,como seria esse “encaixe” de peças na frente ou atrás dependendo da mesa que ta em jogo? Um array?

[size=9]a medida que ir conseguindo fazer aki, vou tentar upar o tópico[/size]

E

Que estruturas de dados você já aprendeu? Você chegou a estudar para aquela prova de certificação SCJP, ou está aprendendo Java agora na escola, meio que “na marra”?

Milk15

entanglement:
Que estruturas de dados você já aprendeu? Você chegou a estudar para aquela prova de certificação SCJP, ou está aprendendo Java agora na escola, meio que “na marra”?

Então pow, essa certificação é pra quem vai ser programador java certo?Mas eu apenas estou pegando a matéria Programação Orientada a Objetos na universidade, ou seja tá mais pra segunda opção que vc falou rsrs

E

OK. Pelo menos você sabe o que é um ArrayList?

Milk15

Sim, mas como nunca usei ele, não conheco os métodos com que ele lida

E

Aprenda a mexer bem com ele, porque irá lhe economizar um monte de tempo que você iria gastar tentando usar arrays puros. Por exemplo, tanto o jogo em si, quanto as peças dos jogadores, podem ser facilmente representadas com um arraylist. Um array puro é difícil de lidar.

Vou dar um exemplo. Digamos que você queira acrescentar um elemento à primeira posição de um array. Basicamente você teria de fazer algo como:

int nElementosDoArray = 0;
int valorASerInserido = ...;
int tamanhoMaximoDoArray = ...;
int[] array = new int[tamanhoMaximoDoArray];
...
if (nElementosDoArray >= tamanhoMaximoDoArray) {
    throw new ArrayIndexOutOfBoundsException ("Excedido tamanho máximo do array: " + tamanhoMaximoDoArray);
}
System.arraycopy (array, 0, array, 1, tamanhoMaximoDoArray - 1);
array [0] = valorASerInserido;
nElementosDoArray++;

Ufa, que complicado!
No caso de um ArrayList é muito, muito, muito mais simples. Bastaria:

List<Integer> lista = new ArrayList<Integer>();
lista.add (0, valorASerInserido);

E só. Além disso, você não precisa especificar um valor máximo ou ficar controlando o número de elementos do array. Isso já é automaticamente controlado - o número corrente de elementos do array é lista.size().

Que tal olhar alguma daquelas apostilas da Caelum? Vão lhe ajudar muito. Veja em:

Criado 6 de dezembro de 2010
Ultima resposta 7 de dez. de 2010
Respostas 7
Participantes 2