Java, Projeto de jogo de Truco

Estou começando um projeto básico de jogo de truco, so que é jogado contra a maquina. Vou fazer por enquanto o jogo aparecer somente por escrita, nada de imagem ainda. Ai quando a lógica estiver pronta, tentarei fazer essa parte do visual. Vejam como está ficando a parte teórica e me ajudem se possível a pensar em boa maneiras de implementar. Não precisa colocar código nem nada. Só sugestões do que devo mudar:

[quote]Especificações do Jogo Truco Mineiro
1 - Especificação de Requisitos
Criar um jogo de Truco através da linguagem Java. O jogo deverá distribuir as cartas entre 4 jogadores, e rodar 3 turnos. A cada turno, cada jogador deve jogar uma carta e comparar a maior, para assim somar os pontos. Vence quem conseguir 10 pontos primeiro.
2 - Procedimento

  • Criar jogo
  • Embaralhar cartas
  • Distribuir para 4 jogadores 3 cartas aleatórias
  • Inicia partida
  • Iniciar turno 1
  • Durante o turno, quem truca dobra os pontos da partida se vercer
  • Durante o truco, a outra dupla pode colocar 6 e triplicar os pontos da partida
  • Durante o 6, a outra dupla pode colocar 9 e vencer o jogo
  • Jogador 1 começa jogando a primeira carta
  • Aguarda os outros jogadores jogar 1 carta
  • Compara a maior carta
  • Adiciona ponto de turno para jogador vencedor
  • Jogador vencedor inicia o proximo turno
  • Jogadores pares vencerem 2 turnos, ja vencem a partida
  • A dupla que vencer a partida ganha ponto
  • Inicia nova partida com o proximo jogador depois do que iniciou a partida anterior
  • Vence a dupla que ganhar 10 pontos
    3 - Classes e funções
  • Cartas
    • Int Valor (Variável) - Valor para comparar com outras cartas
    • String Naipe (Variável) - Nome do Naipe da carta
    • String Nome(Variável) - Nome ou número da carta. Ex: Ás, 2,Rei
    • String Imagem(Variável) - Nome do arquivo de imagem que a carta vai usar
  • Baralho
    • Cartas monte[40] (Variável) - Declara vetor de cartas
    • Cartas j1[3], j2[3], j3[3], j4[3] - Declara 4 vetores para jogadores
    • Baralho() (Construtor) - Define as cartas no vetor baralho
    • Embaralha() (Método) - Embaralha posições do vetor de cartas
    • Distribui() (Método) - Distribui 3 cartas para 4 vetores[/quote]

Para te ajudar na lógica :arrow: http://www.guj.com.br/java/264443-logica-em-um-jogo-de-truco

:thumbup:

gostei da idéia.

também gosto de jogos.

podemos tentar

tenho um tcc que fiz sobre jogos.

o anexo é muito grande, se vc me passar o email eu mando o jar.

tem inclusive um jogo de poker, que é até parecido…

mas note que fiz tudo em uma classe só…

o algoritmo é que cada carta é um número, então analiso todas as combinações possíveis. já que as jogadas são calculadas…

mas é interessante usar a poo.

sobre o gráfico eu vejo uma maneira bem fácil de implementar…

posso acompanhar seu projeto e colaborar. mande o email . o meu é raghy@ig.com.br

são 7 jogos neste meu projeto…

se vc gosta de jogos, tambem olha o snake game que postaram aqui recentemente, muito bacana…

outra idéia é fazer o jogo se tornar tcp ip, em outra etapa.

também gostaria de implementaralguns jogos que fiz para web… como o poker mesmo, que também é contra a máquina…

tenho forca que pode ser uma applet,e um bingo que se melhorado fica bom de jogar. +visual e interação nele.

Valeu raghy e InicianteJavaHenrique. Então, sou muito interessado nessa parte de jogos. É mais um desafio mesmo.
Estava lendo esse post que o henrique postou e ja havia pensado numa forma parecida de ranquear as cartas.
Vou tentar implementar dessa forma que estou pensando. Se não der certo, volto a pedir ajuda aqui.
Meu email é brunolfagundes@hotmail.com. raghy, se não se importar de mandar os exemplos, eu ficaria agradecido!
Essa parte de TCP acho que é muito avançado pra mim ainda, vamos ver mais pra frente. Mas o ideal seria isso, disponibilizar o jogo para multiplayer, deixa as partidas mais interessantes.
Abraço a todos.

valeu meu chapa. va em frente e poste as notícias e andamento. não tens nada pronto aí…

posso me atrever na parte visual , como disse. fiz algo do poker… é bem simples…

mas claro as vezes precisa de um artista para as imagens, aí o projeto fica bonito.

mandei meu tcc, com 7 jogos java, para vc… no email. aguardo retorno…

quem quiser conhecer, email :raghy@ig.com.br

(espero ser aprovado) (ainda não peguei o resultado)

E ai Raghy, recebi sim, seu email. So não tive ainda tempo disponivel pra olhar. So tenho tempo mais a noite. Vou tentar por em pratica alguma coisa hoje e postar os resultados aqui. Obrigado pelos exemplos, depois vou olhar eles com mais cuidado. Abraço!

Pessoal, o que estou fazendo errado? Estou querendo apenas visualizar o valor que armazenei na primeira posição do vetor monte[]
O erro é [quote]Exception in thread “main” java.lang.NullPointerException
at Baralho.geraBaralho(Baralho.java:21)
at Truco.main(Truco.java:14)[/quote]

classe Cartas

public class Cartas {
    private int valor; //Valor de compargação das cartas
    private String numero; //Numeração da carta
    private String naipe; //Naipe das cartas
    private String imagem; //Campo para armazenar link da imagem

    /**
     * @return the valor
     */
    public int getValor() {
        return valor;
    }

    /**
     * @param valor the valor to set
     */
    public void setValor(int valor) {
        this.valor = valor;
    }

    /**
     * @return the numero
     */
    public String getNumero() {
        return numero;
    }

    /**
     * @param numero the numero to set
     */
    public void setNumero(String numero) {
        this.numero = numero;
    }

    /**
     * @return the naipe
     */
    public String getNaipe() {
        return naipe;
    }

    /**
     * @param naipe the naipe to set
     */
    public void setNaipe(String naipe) {
        this.naipe = naipe;
    }

    /**
     * @return the imagem
     */
    public String getImagem() {
        return imagem;
    }

    /**
     * @param imagem the imagem to set
     */
    public void setImagem(String imagem) {
        this.imagem = imagem;
    }
}

classe Baralho

[code]
public class Baralho {

//cria vetor do baralho
Cartas[] monte;

public void geraBaralho() {

    //determina quantidade de posicoes do baralho
    monte = new Cartas[40];

    //4 de espada
    monte[0].setValor(0);
    monte[0].setNumero("4");
    monte[0].setNaipe("Espada");
    monte[0].setImagem("4_espada");

}

}[/code]

classe truco

[code]public class Truco {

public static void main(String[] args){
        Baralho novo = new Baralho();
        novo.geraBaralho();
        System.out.println(novo.monte[0].getValor());
}

}[/code]

E ai pessoal. Dando continuidade no tópico, e com a ajuda sobre as dúvidas de programação, meu jogo já está:

  • Criando um baralho.
  • Embaralhando.
  • Distribuindo para 4 jogadores.

No final eu fiz um método main só pra mostrar o resultado:

[quote]
Jogador 1:
2 de Ouro
Dama de Paus
7 de Paus

Jogador 2:
4 de Paus
Dama de Copas
3 de Copas

Jogador 3:
As de Espada
Rei de Copas
Rei de Paus

Jogador 4:
Dama de Ouro
3 de Paus
As de Copas[/quote]

Pra esse resultado eu criei uma classe Baralho que gera um monte de 40 cartas e um método que embaralha. E uma nova classe Jogo que pega esse baralho e já distribui para 4 jogadores.

A classe Baralho() eu declarei todas as cartas 1 a 1, pois algumas cartas possuem valor diferente. Se alguém souber um jeito melhor de fazer isso e quiser contribuir com o tópico, eu agradeço. (Não da pra fazer por um for porque no truco mineiro o 4 de paus é a maior carta do baralho, e não dava pra colocar atributos automaticamente).

//4 de espada
        monte[0] = new Cartas(); //instancia carta no vetor
        monte[0].setValor(0); //rank da carta para comparação de maior
        monte[0].setNumero("4"); //número da carta
        monte[0].setNaipe("Espada"); //naipe da carta
        monte[0].setImagem("4_espada.gif"); //link para futura imagem

Na classe Turno() é que vai ditribuir as cartas. Como cada partida são turnos como “melhor de 3”, eu chamei essa classe assim e ela vai ser responsável em distribuir o baralho para os 4 jogadores em cada partida. Me baseei no exemplo do livro do Deitel pra aprender a mexer com esse número randômico.

[code]
//gera baralho com cartas aleatorias
for (int i = 0; i < 40; i++) {
posicao = aleatorio.nextInt(40);
temporario = new Cartas();
temporario = jogo.monte[i];
embaralhado[i] = jogo.monte[posicao];
embaralhado[posicao] = temporario;
}

//distribui valores para jogador 1
for (int i = 0; i < 3; i++){
j1[i]=new Cartas();
j1[i]=embaralhado[i];
}

    //distribui valores para jogador 2
    for (int i = 0; i < 3; i++){
        j2[i]=new Cartas();
        j2[i]=embaralhado[i+3];
    }
    
    //distribui valores para jogador 3
    for (int i = 0; i < 3; i++){
        j3[i]=new Cartas();
        j3[i]=embaralhado[i+6];
    }
    
    //distribui valores para jogador 4
    for (int i = 0; i < 3; i++){
        j4[i]=new Cartas();
        j4[i]=embaralhado[i+9];
    } [/code]

E finalmente a classe Partida() que vai gerar cada partida do jogo. Até aqui eu ainda não terminei essa classe e só imprimi o resultado que você viu no começo desse post.
Se vocês souberem maneiras melhores de fazer essas classes, fiquem a vontade para ajudar. =)

Pessoal, estou tentando achar uma logica pra definir a ordem dos jogadores na mesa, mas até agora não me veio nada mais fácil do que fazer na unha mesmo.
Ex: tem 4 jogadores, o jogador 1 é sempre que inicia. Ai se o jogador 3, por exemplo jogar a maior carta, ele inicia o proximo turno, ai depois seria a vez do jogador 4, jogador 1 e finalmente o jogador 2. Deu pra entender? Não precisa postar código, só uma solução lógica pra resolver isso já me ajudaria… desde já agradeço!

Bom, eu nem sei jogar truco (só postei aquele link lá me cima porque achei pesquisando) :wink:

Mas sobre este problema de quem é a próxima jogada, você poderia ter um vetor de 4 posições e armazenar nele tem que é a vez de jogar, exemplo:

vez[0] = "Jogador3";
vez[1] = "Jogador1";
vez[2] = "Jogador4";
vez[3] = "Jogador2";

Posso ter entendido errado sua dúvida, como disse, nem sei jogar.

Acho que o raghy entende mais do assunto, envia um e-mail ou mp pra ele olhar este tópico ou espere que outra pessoa aqui do fórum entenda sobre jogo de truco e te ajude, sei lá são só sugestões :wink:

:thumbup: