Duvida com "Jogo de Cartas"

Bem pessoal, estou fazendo um jogo de cartas aqui…vou explicar como é o jogo, e onde é minha duvida!
JOGO
O jogo consiste em um baralho de 64 cartas, onde existem as cartas (A,2,3,4,5,6,7,8,9,10,J,Q,K) uma dessas para cada naipe (ouro,espada,copas,paus).
Define-se o numero de jogadores e o numero de cartas que cada jogador poderá pegar e começa o jogo!
Cada carta é pega de maneira aleatória,porém se uma carta foi pega , ela nao existe mais no “monte” correto?ou seja, se algum jogador tirou a carta 7 de copas(exemplo) ela não poderá ser retirada do baralho novamente!
E é exatamente aí onde está minha duvida, eu consigo fazer o programa selecionar aleatoriamente uma carta e um naipe por jogada, porém não consigo fazer um algorítimo que permita verificar se a carta já foi retirada, ou qualquer outra solução para o meu problema…
Alguem poderia me ajudar?

Atte,
Adam Calaça

Faça igual ao jogo de baralho:
a) Crie um array com todas as cartas;
b) Embaralhe o array com o método shuffle;
c) Retire as cartas do “topo”, isto é, índice a índice, em ordem.

Com certeza você terá cartas aleatórias e sem repetição.

Bom em uma análise rápida eu diria para você usar Collections de cartas, onde cada jogar tenha sua coleção de cartas e haveria uma outra coleção chamada “Monte”, basta você remover as cartas do monte sempre que necessário.

Espero ter ajudado.

[quote=ViniGodoy]Faça igual ao jogo de baralho:
a) Crie um array com todas as cartas;
b) Embaralhe o array com o método shuffle;
c) Retire as cartas do “topo”, isto é, índice a índice, em ordem.

Com certeza você terá cartas aleatórias e sem repetição.[/quote]

Bem Vini, achei bastante interessante sua opção…porém eu sou obrigado nesse caso a usar o Math.random(); primeiramente pra selecionar a carta e logo depois selecionar o naipe com outro Math.random(); !

eu tenho um jogo de poker que funciona muito bem, vc pode conferir é só pedir no meu email, que segue na assinatura, mas é raghy@ig.com.br subject TCC-GUJ.

Meu algoritmo foi diferente dos convencionais ou orientado a objetos. Eu fiz que cada carta tem um número. SE são 52 cartas, existem 52 números. e vc lida com eles.

Vc não pode repetir números, etc.

No meu caso funcionou de fato, pois minha idéia era um jogo de poker, não estou distribuindo muitas cartas, mas acho que funciona igual, pois quando jogo sei que não posso repetir cartas.

De fato acredito que elas estão em um List. . e quando sorteio aleatoriamente, observo se elas 'não contem ’ no list.

Acho que é isto.

Mas a solução é esta, usar alguma ‘coleção’ que lhe permita controlar ‘quem tem o que’. Dependendo da coleção, ela pode ter um método próprio para verificar isto.

A solução do vini, me parece uma ‘pilha’., que sempre pega o que está em cima. (que é o monte do baralho).
(porém usando o ‘array’ mesmo como ele falou). Existem pilhas (FIFO -FIRST IN FIRST OUT) SE ENTRA O PRIMEIRO, SAI O PRIMEIRO, SEMPRE SAI O TOPO E ENTRA NO TOPO SE ENTRA ALGO) , filas (LIFO -LAST IN FIRST OUT) (O ULTIMO ENTRA (atrás) E SAI O PRIMEIRO) e
podem fazer alguma diferença. É um estudo dedicado, tive isto em algum momento (em aula).

Dizem que o java tem uma classe STACK que se chama pilha, até abro a discussão aqui, pois deu ‘discussão’ em aula, de certa forma. Pois o professor disse que STACK de java : não é pilha e não funciona como pilha. Mas pelo nome deveria ser. E tivemos que construir uma classe ‘pilha’. Foi dificil aceitar que nesta versão, não exista nada pronto, mas sempre é bom construir ‘a classe’ para entende-la melhor. (FICA A DISCUSSAO)

Acho que a idéia do array parece mais fácil por enquanto.
Ou uma collection LIST mesmo vai depender do estudo aí, que vc tenha.

[quote=Adamgnr][quote=ViniGodoy]Faça igual ao jogo de baralho:
a) Crie um array com todas as cartas;
b) Embaralhe o array com o método shuffle;
c) Retire as cartas do “topo”, isto é, índice a índice, em ordem.

Com certeza você terá cartas aleatórias e sem repetição.[/quote]

Bem Vini, achei bastante interessante sua opção…porém eu sou obrigado nesse caso a usar o Math.random(); primeiramente pra selecionar a carta e logo depois selecionar o naipe com outro Math.random(); !
[/quote]

Faz a função que embaralha com o Math.random() (embora seja preferível usar o método nextInt() da classe Random):

  1. Para cada carta do baralho
    1.1. Sorteie uma carta dos índices posteriores
    1.2. Troque essa carta de lugar com a carta atual.

Exemplo: http://www.guj.com.br/java/231057-erro-ao-utilizar-sequencia-de-numeros-aleatorios---resolvido#1186910

Ao final, vc tem um array embaralhado.

[quote=ViniGodoy]
Faz a função que embaralha com o Math.random() (embora seja preferível usar o método nextInt() da classe Random):

  1. Para cada carta do baralho
    1.1. Sorteie uma carta dos índices posteriores
    1.2. Troque essa carta de lugar com a carta atual.

Exemplo: http://www.guj.com.br/java/231057-erro-ao-utilizar-sequencia-de-numeros-aleatorios---resolvido#1186910

Ao final, vc tem um array embaralhado.[/quote]

Bem Vini, eu estou usando sua ideia primeiramente para fazer um baralho com array, após raciocinar aqui vi que posso usar um Array e o metodo shuffle no lugar de um vetor com Math.random() , na teoria é a mesma coisa e dá pra diminuir bastante o código!!

Fiz primeiro essas linhas de código para criar as cartas do baralho no array

        List<String> baralho = new ArrayList<String>();
        for (int contnaipe = 1; contnaipe < 5; contnaipe++) {
            for (int contcarta = 2; contcarta < 15; contcarta++) {
                if (contnaipe == 1) {
                    nomenaipe = "O";
                } else {
                    if (contnaipe == 2) {
                        nomenaipe = "C";
                    } else {
                        if (contnaipe == 3) {
                            nomenaipe = "P";
                        } else {
                            if (contnaipe == 4) {
                                nomenaipe = "E";
                            }
                        }
                    }
                }
                if (contcarta == 2 || contcarta == 3 || contcarta == 4 || contcarta == 5 || contcarta == 6 || contcarta == 7 || contcarta == 8 || contcarta == 9 || contcarta == 10) {
                    nomecarta = String.valueOf(contcarta);
                } else {
                    if (contcarta == 11) {
                        nomecarta = "J";
                    } else {
                        if (contcarta == 12) {
                            nomecarta = "Q";
                        } else {
                            if (contcarta == 13) {
                                nomecarta = "K";
                            } else {
                                if (contcarta == 14) {
                                    nomecarta = "A";
                                }
                            }
                        }
                    }
                }
                baralho.add(nomecarta+"-"+nomenaipe);

Usuarei após isso o Collections.shuffle(baralho); para embaralhar!!
Agora me surgiu a duvida de como tirar o valor do Array!
no caso eu posso usar um for pegando a ordem do baralho já embaralhado e ir usando o "baralho.remove()"??

[quote=ViniGodoy]
Faz a função que embaralha com o Math.random() (embora seja preferível usar o método nextInt() da classe Random):

  1. Para cada carta do baralho
    1.1. Sorteie uma carta dos índices posteriores
    1.2. Troque essa carta de lugar com a carta atual.

Exemplo: http://www.guj.com.br/java/231057-erro-ao-utilizar-sequencia-de-numeros-aleatorios---resolvido#1186910

Ao final, vc tem um array embaralhado.[/quote]

Bem Vini, eu estou usando sua ideia primeiramente para fazer um baralho com array, após raciocinar aqui vi que posso usar um Array e o metodo shuffle no lugar de um vetor com Math.random() , na teoria é a mesma coisa e dá pra diminuir bastante o código!!

Fiz primeiro essas linhas de código para criar as cartas do baralho no array

        List<String> baralho = new ArrayList<String>();
        for (int contnaipe = 1; contnaipe < 5; contnaipe++) {
            for (int contcarta = 2; contcarta < 15; contcarta++) {
                if (contnaipe == 1) {
                    nomenaipe = "O";
                } else {
                    if (contnaipe == 2) {
                        nomenaipe = "C";
                    } else {
                        if (contnaipe == 3) {
                            nomenaipe = "P";
                        } else {
                            if (contnaipe == 4) {
                                nomenaipe = "E";
                            }
                        }
                    }
                }
                if (contcarta == 2 || contcarta == 3 || contcarta == 4 || contcarta == 5 || contcarta == 6 || contcarta == 7 || contcarta == 8 || contcarta == 9 || contcarta == 10) {
                    nomecarta = String.valueOf(contcarta);
                } else {
                    if (contcarta == 11) {
                        nomecarta = "J";
                    } else {
                        if (contcarta == 12) {
                            nomecarta = "Q";
                        } else {
                            if (contcarta == 13) {
                                nomecarta = "K";
                            } else {
                                if (contcarta == 14) {
                                    nomecarta = "A";
                                }
                            }
                        }
                    }
                }
                baralho.add(nomecarta+"-"+nomenaipe);

Usuarei após isso o Collections.shuffle(baralho); para embaralhar!!
Agora me surgiu a duvida de como tirar o valor do Array!
no caso eu posso usar um for pegando a ordem do baralho já embaralhado e ir usando o "baralho.remove()"??

Isso mesmo.

kkkkkkkkkkkkk meu herói…sou seu fã cara