herege Posted March 13, 2012 at 02:27 AM Report #443667 Posted March 13, 2012 at 02:27 AM 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
KTachyon Posted March 13, 2012 at 07:24 AM Report #443669 Posted March 13, 2012 at 07:24 AM 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
herege Posted March 13, 2012 at 12:22 PM Author Report #443698 Posted March 13, 2012 at 12:22 PM 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
pedrosorio Posted March 13, 2012 at 01:33 PM Report #443716 Posted March 13, 2012 at 01:33 PM Criar um vector, preenche-lo com as cartas todas. Não. Um stack Não respondo a dúvidas por mensagem.
herege Posted March 13, 2012 at 01:37 PM Author Report #443718 Posted March 13, 2012 at 01:37 PM Boa, Como sou noob nisto ainda não conhecia stacks, vou estudar o assunto. Obrigado mais uma vez 😄
herege Posted March 13, 2012 at 04:41 PM Author Report #443771 Posted March 13, 2012 at 04:41 PM 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
KTachyon Posted March 13, 2012 at 05:57 PM Report #443790 Posted March 13, 2012 at 05:57 PM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now