Jump to content

BlackJack c++


herege
 Share

Recommended Posts

Boas,

Estou a fazer um jogo de blackjack em c++ e estou com uma dúvida.

Em cada jogo tenho um vector para armazenar todas as cartas que vão saindo.

Cada vez que é dada uma carta a um jogador preciso compara-la primeiro com as que já saíram para não ser repetida.

Nesta caso criei um vector dinâmico em que vou fazendo push_back de cada carta para dentro do vector.

A minha dúvida é:

Como faço a comparação da carta nova que sai com as outras que já saíram, que podem ser uma, duas ou mais??               

Este é um excerto do código, que é uma função para dar as primeiras duas cartas a cada jogador:

void pedirMao() {
        
        Card nova;   //cria nova instancia de uma Carta, com numero, naipe e respectivo nome
        nova.deal();   //gera numero e naipe aleatório e da-lhe o respectivo nome
        cartas.push_back(nova);  //mete carta na mão do jogador
        todas.push_back(nova);  //mete carta num vector que vai receber todas as cartas
        do {
            nova.deal();   //criar a segunda carta
            cartas.push_back(nova);
            todas.push_back(nova);
        } while (nova.getName() == todas[0].getName());  //só coloca nos vectores caso seja diferente da primeira
                 
    };

Isto funciona para comparar a segunda carta da mão com a primeira que já saiu e não repeti-la.

Agora como faço para comprar uma carta nova com 3 ou 4 que já tenham saído?

Obrigado pela ajuda

Atentamente:

Alexandre Afonso

Link to comment
Share on other sites

Porque não criar um stack com todas as cartas do baralho e tirares sempre uma carta de lá? Assim garantes que nenhuma carta é repetida e escusas de estar a fazer comparações.

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

Olha ai está uma boa ideia 😉

Criar um vector, preenche-lo com as cartas todas.

Cada vez que faço deal escolho aleatoriamente uma carta do vector e no fim do jogo reponho o vector, certo?

Mas quando escolho uma carta de lá tenho que apaga-la também certo? posso usar a função erase 🙂

Muito obrigado pela sugestão

Link to comment
Share on other sites

Já coloquei as cartas todas numa stack com for loops, agora o problema com que estou e em baralha-las.

Com um vector consigo me safar usando esta função para as colocar de forma aleatória :

random_shuffle(<#_RandomAccessIterator __first#>, <#_RandomAccessIterator __last#>)

Agora com a stack como não tem example_stack.begin() ou example_stack.end() não consigo usar esta função.

Ha alguma forma prática de baralhar a stack???

Teres que criar algum pointer para apontar para o inicio e fim da stack??

Obrigado

Link to comment
Share on other sites

O stack podes utilizar para retirar cartas, mas para as baralhares precisas de outra estrutura de suporte. Um vector, por exemplo, funciona. Inseres as cartas todas num vector de forma sequencial, e utilizas um random para ir seleccionando cartas que removes do vector e colocas no stack.

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.