herege Posted March 13, 2012 Report Share Posted March 13, 2012 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 More sharing options...
KTachyon Posted March 13, 2012 Report Share Posted March 13, 2012 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 More sharing options...
herege Posted March 13, 2012 Author Report Share Posted March 13, 2012 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 More sharing options...
pedrosorio Posted March 13, 2012 Report Share Posted March 13, 2012 Criar um vector, preenche-lo com as cartas todas. Não. Um stack Não respondo a dúvidas por mensagem. Link to comment Share on other sites More sharing options...
herege Posted March 13, 2012 Author Report Share Posted March 13, 2012 Boa, Como sou noob nisto ainda não conhecia stacks, vou estudar o assunto. Obrigado mais uma vez 😄 Link to comment Share on other sites More sharing options...
herege Posted March 13, 2012 Author Report Share Posted March 13, 2012 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 More sharing options...
KTachyon Posted March 13, 2012 Report Share Posted March 13, 2012 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 More sharing options...
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