• Lunes 29 de Abril de 2024, 05:16

Autor Tema:  Juego  (Leído 1267 veces)

gdan_m

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Juego
« en: Viernes 2 de Diciembre de 2005, 00:51 »
0
hola lo que debo de hacer es un juego de domino que tenga dos jugadores, un pozo, y que sea pormedio de lista de apuntadores
#include "stdafx.h"
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <process.h>
#include <stdio.h>


struct ficha
{
   struct ficha *izq;
   int num,num1;
   struct ficha *der;
};
struct ficha *p,*inicio,*q;
struct ficha *nvoele()
{return((struct ficha *)malloc(sixeof(struct ficha)));}

void juego()
{
q=nvoele();
cin>>q->num;
q->izq=NULL;
q->der=NULL;



if(inicio->izq==q->der || inicio->izq==q->izq)
{
   inicio->izq=q;
   q->der=inicio || q->izq=inicio;
   inicio=q;
   q->izq=NULL;
}
else
{
   if(fin->izq==q->der || fin->izq==q->izq)
   {
      p->der=q;
      q->izq=p;
      p=q;
      q->der=NULL;
   }
   else
      cout<<"No encuentra combinacion\n";
}

inicio=q; p=q;
while (resp=='s')
{
   q=nvoele();
   cin>>q->num;
   p->der=q;
   q->izq=p;
   q->der=NULL;
   p=q;
}
}

void asigna()
{
bool si(int* fi,int j)
{
   
 for(int i=0;i<15;i++){
      if (*(fi+i)==j)
         return true;
      }
   return false;
}
}
void main()
{
   jugador jug[2];

    srand(time(NULL));

   Ficha cant[28]={Ficha(0,0),Ficha(0,1),Ficha(0,2),Ficha(0,3),Ficha(0,4),Ficha(0,5),Ficha(0,6),
                Ficha(1,1),Ficha(1,2),Ficha(1,3),Ficha(1,4),Ficha(1,5),Ficha(1,6),
                Ficha(2,2),Ficha(2,3),Ficha(2,4),Ficha(2,5),Ficha(2,6),
                Ficha(3,3),Ficha(3,4),Ficha(3,5),Ficha(3,6),
                Ficha(4,4),Ficha(4,5),Ficha(4,6),
                Ficha(5,5),Ficha(5,6),
                Ficha(6,6)};
   
   int a=0;
    int k=0;
    int fi[15];
      for (int i=0;i<15;i++)
         ya=-1;
    for(int i=0;i<2;i++)
    {
          for(int j=0;j<7;j++)
        {
          a=rand()%28;
            jug.RecibeFicha(cant[a]);
            while(si(fi,a))
           {
               a=rand()%28;
               jug.fichas(cant[a],j);
            }
            fi[k]=a;
            k++;
         }

char resp='s';
int opc;

while (resp=='s')

{
   cout<<"*******************DOMINO********************\n";
   cout<<"1. Jugar\n";
   cout<<"2. Salir\n";
   cout<<"Selecciona una opcion\n";
   cin>>opc;

   switch opc;
   {
   case 1: {juego();break;}
   case 2: resp='n';
   }
}
system("pause");
}

pitukilloloco

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Juego
« Respuesta #1 en: Viernes 2 de Diciembre de 2005, 04:01 »
0
Pensando un poco en tu programa aquí está una idea de cómo hacerlo. Necesitas tener una estructura como la que pusiste pero además debes de indicar en los números qué parte de la ficha es. Lo que quiero decir es que cuando coloques una ficha en la lista debes de poder identificar cual parte es la que se une y cual queda libre. Por esto yo pondría la estructura así
Código: Text
  1.  
  2. struct ficha {
  3.    int numder;
  4.    struct ficha *der;
  5.    int numizq;
  6.    struct ficha *izq;
  7. };
  8.  
  9.  
  Después definiría un arreglo de 28 objetos de esta estructura, las cuales representarían las fichas del dominó. Definiría un jugador como teniendo 7 apuntadores a estas estructuras, y como puedo tener hasta cuatro jugadores, entonces definiría un arreglo de 4 de estos. Definiría una variable Monton que tuviera 28 apuntadores a esta estructura para que contenga las fichas que no se repartan entre los jugadores. Por último definiría dos variables que apunten a esta estructura para que contengan la cabeza y la cola de la lista del juego, o sea, de las fichas que se vayan poniendo en la mesa.
   Esto en código sería
Código: Text
  1.  
  2. typedef struct ficha FICHA;
  3. typedef struct ficha *PTRFICHA;
  4.  
  5. FICHA Ficha[28];
  6. PTRFICHA Jugador[4][7], Monton[28], cabeza, cola;
  7.  
  8.  
  Ahora necesito varias funciones.
   Una función InicializaFichas que me inicialize el arreglo Ficha con los números de la 28 fichas del dominó. Esta función se llamaría una sólo vez en el programa.
   Una función NuevoJuego que llamaría cada vez que se comienze un juego y que inicializaría las variables Monton, Jugador, cabeza y cola.
   Una función EscogeFicha que me regresaría aleatoreamente un apuntador a una ficha del montón.
   Una función ReparteFichas que escogería aleatoreamente 7 fichas del montón para el jugador que yo le indicara
   Bueno, esto es sólo una idea para comenzar, no se que te parezca. Hice un pequeño programa para que veas como trabajan estas funciones
Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3. #include &#60;stdlib.h&#62;
  4. #include &#60;time.h&#62;
  5.  
  6. struct ficha {
  7.    int numder;
  8.    struct ficha *der;
  9.    int numizq;
  10.    struct ficha *izq;
  11. };
  12. typedef struct ficha FICHA;
  13. typedef struct ficha *PTRFICHA;
  14.  
  15. FICHA Ficha[28];
  16. PTRFICHA Jugador[4][7], Monton[28], cabeza, cola;
  17.  
  18. void InicializaFichas ()
  19. {
  20.    int i, j;
  21.  
  22.    for (i = 0; i &#60; 7; i++)
  23.       for (j = i; j &#60; 7; j++) {
  24.          int k, m;
  25.          for (k = m = 0; m &#60; i; m++)
  26.             k += 7 - m;
  27.          Ficha[k + j - i].numder = i;
  28.          Ficha[k + j - i].numizq = j;
  29.          Ficha[k + j - i].der = Ficha[k + j - i].izq = NULL;
  30.       }
  31.    randomize ();
  32. }
  33.  
  34. void NuevoJuego ()
  35. {
  36.    int i, j;
  37.  
  38.    for (i = 0; i &#60; 28; i++) {
  39.        Ficha[i].der = Ficha[i].izq = NULL;
  40.       Monton[i] = Ficha + i;
  41.    }
  42.    for (i = 0; i &#60; 4; i++)
  43.       for (j = 0; j &#60; 7; j++)
  44.          Jugador[i][j] = NULL;
  45.    cabeza = cola = NULL;
  46. }
  47.  
  48. PTRFICHA EscogeFicha ()
  49. {
  50.    int i;
  51.    PTRFICHA p;
  52.  
  53.    while (1) {
  54.       i = random (28);
  55.       if (Monton[i] != NULL) {
  56.          p = Monton[i];
  57.          Monton[i] = NULL;
  58.          return p;
  59.       }
  60.    }
  61. }
  62.  
  63. void ReparteFichas (int numjugador)
  64. {
  65.    int i;
  66.    for (i = 0; i &#60; 7; i++)
  67.       Jugador[numjugador][i] = EscogeFicha ();
  68. }
  69.  
  70. void ImprimeFichasJugador (int numjugador)
  71. {
  72.    int i;
  73.    printf (&#34;&#092;n&#092;n&#34;);
  74.    for (i = 0; i &#60; 7; i++)
  75.       printf (&#34;%d &#34;, Jugador[numjugador][i]-&#62;numizq);
  76.    printf (&#34;&#092;n&#34;);
  77.    for (i = 0; i &#60; 7; i++)
  78.       printf (&#34;- &#34;);
  79.    printf (&#34;&#092;n&#34;);
  80.    for (i = 0; i &#60; 7; i++)
  81.       printf (&#34;%d &#34;, Jugador[numjugador][i]-&#62;numder);
  82. }
  83.  
  84. int main ()
  85. {
  86.    int i;
  87.  
  88.    InicializaFichas ();
  89.    NuevoJuego ();
  90.  
  91.    for (i = 0; i &#60; 4; i++)
  92.       ReparteFichas (i);
  93.    for (i = 0; i &#60; 4; i++)
  94.       ImprimeFichasJugador (i);
  95. }
  96.  
  97.  
  Si te interesa la idea podemos seguir para ver como se programaría más en detalle. Si tienes otra idea de cómo hacerlo, bueno, al menos ya más o menos con esto te podrás hacer una idea de como hacerlo.

gdan_m

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Juego
« Respuesta #2 en: Viernes 2 de Diciembre de 2005, 06:59 »
0
Gracias por ayudarme!! y la verdad si me interesa, me agrada la idea que tuviste, pero como lo seguirias programando?