Hice el ciclo while pero no se como hago para que reparta mis cartas a mis 4 jugadores, y que cuando a alguien le salga una A este le de el poder que cogerle la carta que tiene arriba los otros 3 jugadores, pero este poder se decide si lo quiere usar en el instante o en otro momento, ayuda por favor.
#include <iostream>
#include <stack>
#include <stdlib.h>
#include <time.h>
#include <list>
#include <conio.h>
using namespace std;
class Carta{
public:
Carta* siguiente;
Carta(){
siguiente = NULL;
}
Carta(string n,int v){
nombre=n;
valor=v;
siguiente = NULL;
}
string nombre;
int valor;
};
class Pila{
public:
Carta* cabeza;
void agregar(string nombre, int valor){
Carta* carta= new Carta(nombre,valor);
if(cabeza==NULL){
cabeza=carta;
}
else{
carta->siguiente=cabeza;
cabeza=carta;
}
}
Pila(){
cabeza=NULL;
}
Carta* pop(){
Carta* aux = cabeza;
cabeza = cabeza->siguiente;
aux->siguiente = NULL;
return aux;
}
Carta* peek(){
return cabeza;
}
bool estaVacia(){
if(cabeza==NULL)
return true;
else
return false;
}
};
class Jugador{
public:
Jugador(string nombre,int numjugador){
this->nombre=nombre;
this->numjugador=numjugador;
siguiente=NULL;
anterior=NULL;
tienepoder=false;
}
Pila cartas;
string nombre;
int numjugador;
Jugador* siguiente;
Jugador* anterior;
bool tienepoder;
};
class Lista{
public:
Jugador* Primero;
Jugador* Ultimo;
void agregar(string nombre, int numjugador){
Jugador* jugador=new Jugador(nombre,numjugador);
if(Primero==NULL){
Primero=Ultimo=jugador;
}
else{
Ultimo->siguiente=jugador;
jugador->anterior=Ultimo;
Ultimo=jugador;
Ultimo->siguiente=Primero;
}
}
Jugador* getPrimero(){
return Primero;
}
Lista(){
this->Primero = NULL;
this->Ultimo = NULL;
}
};
void pasarPila(Carta carta[], Pila* pila){
for(int i=0; i<52; i++){
if(carta.valor != 0)
pila->agregar(carta.nombre, carta.valor);
}
}
void barajar(Carta cartas[]){
Carta aux;
for(int x=0; x<51; x++){
int i=rand() % 51 + 0;
int j=rand() % 51 + 0;
aux = cartas;
cartas = cartas[j];
cartas[j] = aux;
}
}
int main()
{
Lista jugadores;
Carta carta[52];
Pila pilaCartas;
int pos =0;
for(int i=0; i<4; i++){
for(int j=0; j<13; j++){
if(i == 0)
carta[pos] = Carta("Espada",j+2);
if(i == 1)
carta[pos] = Carta("Corazon",j+2);
if(i == 2)
carta[pos] = Carta("Diamante",j+2);
if(i == 3)
carta[pos] = Carta("Trebol",j+2);
pos++;
}
}
pos = 0;
//int carta[52]={1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13};
//list< string> jugadores;
//int suma[5]={0,0,0,0,0};
string jugador;
srand(time(NULL));
cout <<"Ingrese el Primer Jugador: ";
cin>>jugador;
jugadores.agregar(jugador, 1);
cout <<"Ingrese el Segundo Jugador: ";
cin>>jugador;
jugadores.agregar(jugador, 2);
cout <<"Ingrese el Tercer Jugador: ";
cin>>jugador;
jugadores.agregar(jugador, 3);
cout <<"Ingrese el Cuarto Jugador: ";
cin>>jugador;
jugadores.agregar(jugador, 4);
//stack <int> cartas;
//stack <int> entregadas;
/*for(int i=0; i<51; i++){
int ran=rand() % 51 + 0;
cartas.push(carta[ran]);
}*/
barajar(carta);
cout<<"Las cartas Fueron Barajadas"<<endl;
//Jugadores toman carta para decidir el turno
Jugador* aux = jugadores.getPrimero();
do{ aux->cartas.agregar(carta[pos].nombre, carta[pos].valor);
carta[pos].nombre = "";
carta[pos].valor = 0;
pos++;
aux=aux->siguiente;
}while(aux!= jugadores.getPrimero());
/*aux->cartas.agregar(carta[pos].nombre, carta[pos].valor);
carta[pos].nombre = "";
carta[pos].valor = 0;
cout<<"@";
pos++;*/
barajar(carta);
pasarPila(carta, &pilaCartas);
aux = jugadores.getPrimero();
Jugador* primero;
int valor = 0;
do{
if(aux->cartas.peek()->valor > valor){
valor = aux->cartas.peek()->valor;
primero = aux;
}
}while(aux->siguiente != jugadores.getPrimero());
while(!pilaCartas.estaVacia()){
Jugador* aux2 = jugadores.getPrimero();
while(aux2->siguiente!=jugadores.getPrimero());{
aux2=aux2->siguiente;
}
}
/*cout<<"Las cartas Fueron Barajadas"<<endl;
list<string>::iterator iter(jugadores.begin());
int cont=0;
while(cartas.empty()==false){
if(iter==jugadores.begin()){
while(iter!=jugadores.end()&&cartas.empty()==false){
entregadas.push(cartas.top());
cout<<"Jugador "<<*iter<<" "<<entregadas.top()<<endl;
if (cont!=4)
suma[cont]+=entregadas.top();
cartas.pop();
cont++;
iter++;
getch();
}
}
if(iter==jugadores.end()){
while(iter!=jugadores.begin()&&cartas.empty()==false){
iter--;
entregadas.push(cartas.top());
cout<<"Jugador "<<*iter<<" "<<entregadas.top()<<endl;
if (cont!=4)
suma[cont]=suma[cont]+entregadas.top();
cartas.pop();
cont--;
getch();
}
}
}
list<string>::iterator iter2(jugadores.begin());
int cont2=0;
while(iter2!=jugadores.end()){
cout <<"El Jugador "<<*iter2<<" Tiene "<<suma[cont2]<<" Cartas"<<endl;
cont2++;
iter2++;
}*/
return 0;
}
#include <iostream>
#include <stack>
#include <stdlib.h>
#include <time.h>
#include <list>
#include <conio.h>
using namespace std;
class Carta{
public:
Carta* siguiente;
Carta(){
siguiente = NULL;
}
Carta(string n,int v){
nombre=n;
valor=v;
siguiente = NULL;
}
string nombre;
int valor;
};
class Pila{
public:
Carta* cabeza;
void agregar(string nombre, int valor){
Carta* carta= new Carta(nombre,valor);
if(cabeza==NULL){
cabeza=carta;
}
else{
carta->siguiente=cabeza;
cabeza=carta;
}
}
Pila(){
cabeza=NULL;
}
Carta* pop(){
Carta* aux = cabeza;
cabeza = cabeza->siguiente;
aux->siguiente = NULL;
return aux;
}
Carta* peek(){
return cabeza;
}
bool estaVacia(){
if(cabeza==NULL)
return true;
else
return false;
}
};
class Jugador{
public:
Jugador(string nombre,int numjugador){
this->nombre=nombre;
this->numjugador=numjugador;
siguiente=NULL;
anterior=NULL;
tienepoder=false;
}
Pila cartas;
string nombre;
int numjugador;
Jugador* siguiente;
Jugador* anterior;
bool tienepoder;
};
class Lista{
public:
Jugador* Primero;
Jugador* Ultimo;
void agregar(string nombre, int numjugador){
Jugador* jugador=new Jugador(nombre,numjugador);
if(Primero==NULL){
Primero=Ultimo=jugador;
}
else{
Ultimo->siguiente=jugador;
jugador->anterior=Ultimo;
Ultimo=jugador;
Ultimo->siguiente=Primero;
}
}
Jugador* getPrimero(){
return Primero;
}
Lista(){
this->Primero = NULL;
this->Ultimo = NULL;
}
};
void pasarPila(Carta carta[], Pila* pila){
for(int i=0; i<52; i++){
if(carta.valor != 0)
pila->agregar(carta.nombre, carta.valor);
}
}
void barajar(Carta cartas[]){
Carta aux;
for(int x=0; x<51; x++){
int i=rand() % 51 + 0;
int j=rand() % 51 + 0;
aux = cartas;
cartas = cartas[j];
cartas[j] = aux;
}
}
int main()
{
Lista jugadores;
Carta carta[52];
Pila pilaCartas;
int pos =0;
for(int i=0; i<4; i++){
for(int j=0; j<13; j++){
if(i == 0)
carta[pos] = Carta("Espada",j+2);
if(i == 1)
carta[pos] = Carta("Corazon",j+2);
if(i == 2)
carta[pos] = Carta("Diamante",j+2);
if(i == 3)
carta[pos] = Carta("Trebol",j+2);
pos++;
}
}
pos = 0;
//int carta[52]={1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13};
//list< string> jugadores;
//int suma[5]={0,0,0,0,0};
string jugador;
srand(time(NULL));
cout <<"Ingrese el Primer Jugador: ";
cin>>jugador;
jugadores.agregar(jugador, 1);
cout <<"Ingrese el Segundo Jugador: ";
cin>>jugador;
jugadores.agregar(jugador, 2);
cout <<"Ingrese el Tercer Jugador: ";
cin>>jugador;
jugadores.agregar(jugador, 3);
cout <<"Ingrese el Cuarto Jugador: ";
cin>>jugador;
jugadores.agregar(jugador, 4);
//stack <int> cartas;
//stack <int> entregadas;
/*for(int i=0; i<51; i++){
int ran=rand() % 51 + 0;
cartas.push(carta[ran]);
}*/
barajar(carta);
cout<<"Las cartas Fueron Barajadas"<<endl;
//Jugadores toman carta para decidir el turno
Jugador* aux = jugadores.getPrimero();
do{ aux->cartas.agregar(carta[pos].nombre, carta[pos].valor);
carta[pos].nombre = "";
carta[pos].valor = 0;
pos++;
aux=aux->siguiente;
}while(aux!= jugadores.getPrimero());
/*aux->cartas.agregar(carta[pos].nombre, carta[pos].valor);
carta[pos].nombre = "";
carta[pos].valor = 0;
cout<<"@";
pos++;*/
barajar(carta);
pasarPila(carta, &pilaCartas);
aux = jugadores.getPrimero();
Jugador* primero;
int valor = 0;
do{
if(aux->cartas.peek()->valor > valor){
valor = aux->cartas.peek()->valor;
primero = aux;
}
}while(aux->siguiente != jugadores.getPrimero());
while(!pilaCartas.estaVacia()){
Jugador* aux2 = jugadores.getPrimero();
while(aux2->siguiente!=jugadores.getPrimero());{
aux2=aux2->siguiente;
}
}
/*cout<<"Las cartas Fueron Barajadas"<<endl;
list<string>::iterator iter(jugadores.begin());
int cont=0;
while(cartas.empty()==false){
if(iter==jugadores.begin()){
while(iter!=jugadores.end()&&cartas.empty()==false){
entregadas.push(cartas.top());
cout<<"Jugador "<<*iter<<" "<<entregadas.top()<<endl;
if (cont!=4)
suma[cont]+=entregadas.top();
cartas.pop();
cont++;
iter++;
getch();
}
}
if(iter==jugadores.end()){
while(iter!=jugadores.begin()&&cartas.empty()==false){
iter--;
entregadas.push(cartas.top());
cout<<"Jugador "<<*iter<<" "<<entregadas.top()<<endl;
if (cont!=4)
suma[cont]=suma[cont]+entregadas.top();
cartas.pop();
cont--;
getch();
}
}
}
list<string>::iterator iter2(jugadores.begin());
int cont2=0;
while(iter2!=jugadores.end()){
cout <<"El Jugador "<<*iter2<<" Tiene "<<suma[cont2]<<" Cartas"<<endl;
cont2++;
iter2++;
}*/
return 0;
}