Advertisement
Rapido

clases.cpp

Oct 12th, 2017
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.08 KB | None | 0 0
  1. #include "clases.h"
  2.  
  3. //===============================================
  4. //== CONSTRUCTOR
  5. //===============================================
  6. Panel_sort::Panel_sort(QGraphicsRectItem *rectangulo)
  7. {
  8.     //== Tenemos una funcion que reestablece la semilla del random, diremos que se ejecute cada 12 segundos
  9.     refresh_seed();
  10.     QTimer *timer = new QTimer();
  11.     connect(timer,SIGNAL(timeout()),this,SLOT(refresh_seed()));
  12.     timer->start(12*1000);
  13.  
  14.     //== Ponemos los numeros sorteados en false
  15.     reset();
  16.  
  17.     //== Calculamos las dimensiones de las casillas segun el rectangulo establecido
  18.     int x = rectangulo->rect().x(),
  19.         y = rectangulo->rect().y(),
  20.         depX = (int) (rectangulo->rect().width() / 10),
  21.         depY = (int) (rectangulo->rect().height() / 6);
  22.  
  23.     //== Contador de numeros, empezamos desde el 1 para luego acceder de forma mas directa al array
  24.     int count = 1;
  25.  
  26.     //== Creamos un ciclo que crea todas las casillas del panel con sus numeros correspondientes
  27.     for(char u=0; u<6; u++)
  28.     {
  29.         for(char i=0; i<10; i++)
  30.         {
  31.             int x1 = x + (depX * i),
  32.                 y1 = y + (depY * u);
  33.  
  34.             text[count].setPlainText(QString::number(count));
  35.             text[count].setPos(x1,y1);
  36.             rectangulo->scene()->addItem(&text[count]);
  37.             count++;
  38.         }
  39.     }
  40. }
  41.  
  42. void Panel_sort::reset()
  43. {
  44.     for(int i=0; i<ArraySize(numeros); i++)
  45.     {
  46.         text[i].setFont(QFont("arial",15));
  47.         text[i].setDefaultTextColor(Qt::gray);
  48.         numeros[i]=false;
  49.     }
  50. }
  51.  
  52. void Panel_sort::nuevo_numero()
  53. {
  54.     //== Proceso para solo dar por validos numeros nuevos
  55.     bool buen_rand=false;
  56.     int num;
  57.     while(!buen_rand)
  58.     {
  59.         num = 1 + (rand() % 60);
  60.         buen_rand=true;
  61.         for(int i=0; i<ArraySize(numeros) && buen_rand; i++)
  62.         {
  63.             if(numeros[num] == true){ buen_rand=false; }
  64.         }
  65.     }
  66.     numeros[num]=true;
  67.     text[num].setFont(QFont("arial",17));
  68.     text[num].setDefaultTextColor(Qt::green);
  69. }
  70.  
  71. void Panel_sort::refresh_seed()
  72. {
  73.     QTime time;
  74.     time.start();
  75.     srand(time.msecsSinceStartOfDay());
  76. }
  77.  
  78. //===============================================
  79. //== CONSTRUCTOR DE LA CLASE CARTON (PAPELETA con los numeros)
  80. //===============================================
  81. Carton::Carton(QGraphicsRectItem *rectangulo)
  82. {
  83.     //== Nos guardamos el puntero de la escena que nos servirá mas tarde
  84.     m_scene = rectangulo->scene();
  85.  
  86.     //== Calculamos las dimensiones de los numeros segun el rectangulo establecido
  87.     int x = rectangulo->rect().x(),
  88.         y = rectangulo->rect().y(),
  89.         depX = (int) (rectangulo->rect().width() / 5),
  90.         depY = (int) (rectangulo->rect().height() / 3);
  91.  
  92.     //== Asignamos la posicion a los numeros
  93.     int count = 0;
  94.     for(char u=0; u<3; u++)
  95.     {
  96.         for(char i=0; i<5; i++)
  97.         {
  98.             int x1 = x + (depX * i),
  99.                 y1 = y + (depY * u);
  100.  
  101.             numeros[count].setPos(x1 + 15,y1 + 15);
  102.             m_scene->addItem(&numeros[count]);
  103.             count++;
  104.  
  105.             //== Dibujamos un cuadradito contenedor de los numeros
  106.             int m=2;
  107.             QGraphicsRectItem *r = new QGraphicsRectItem(x1+m,y1+m,depX-m,depY-m);
  108.             m_scene->addItem(r);
  109.         }
  110.     }
  111.  
  112.     Nuevo_Carton();
  113. }
  114.  
  115. //== Asigna los numeros de un nuevo carton
  116. void Carton::Nuevo_Carton()
  117. {
  118.     //== Ponemos a -1 el array de numeros tipo int
  119.     for(int i=0; i<ArraySize(int_numeros); i++)
  120.     {
  121.         numeros[i].setFont(QFont("arial",35));
  122.         numeros[i].setDefaultTextColor(Qt::black);
  123.         int_numeros[i]=-1;
  124.     }
  125.  
  126.     //== Ciclo para generar los numeros de la papeleta
  127.     for(int i=0; i<ArraySize(numeros); i++)
  128.     {
  129.         //== Proceso para solo dar por validos numeros nuevos
  130.         bool buen_rand=false;
  131.         while(!buen_rand)
  132.         {
  133.             buen_rand=true;
  134.  
  135.             int_numeros[i] = 1 + (rand() % 60);
  136.             for(int u=i-1; u>=0; u--)
  137.             {
  138.                 if(int_numeros[i] == int_numeros[u]){ buen_rand=false; }
  139.             }
  140.         }
  141.         numeros[i].setPlainText(QString::number(int_numeros[i]));
  142.     }
  143. }
  144.  
  145. //== CONSTRUCTOR DE LA CLASE GAME
  146. Game::Game(Panel_sort *num_sort, Carton *carton)
  147. {
  148.     m_sorteo = num_sort;
  149.     m_carton = carton;
  150.     score=0;
  151.  
  152.     score_text.setPos(350,170);
  153.     score_text.setFont(QFont("arial",20));
  154.     score_text.setPlainText(QString("PREMIO ACUMULADO = ")+QString::number(score));
  155.     m_carton->m_scene->addItem(&score_text);
  156.  
  157.     num_lanz.setPos(350,20);
  158.     num_lanz.setFont(QFont("arial",15));
  159.     m_carton->m_scene->addItem(&num_lanz);
  160.  
  161.     partida();
  162. }
  163.  
  164. void Game::partida()
  165. {
  166.     if(message_step>0){ return; }
  167.  
  168.     m_carton->Nuevo_Carton();
  169.     m_sorteo->reset();
  170.     numeros_lanzados=0;
  171.     num_lanz.setPlainText(QString("<- NUM SORTEADOS = ")+QString::number(numeros_lanzados));
  172.     lineas[0]=false; lineas[1]=false; lineas[2]=false;
  173.     bingo=false; mensaje("CARTON NUEVO");
  174.  
  175.     t.start(500);
  176.     connect(&t,SIGNAL(timeout()),this,SLOT(lanzada()));
  177. }
  178.  
  179. void Game::lanzada()
  180. {
  181.     //== Incrementamos el contador de numeros lanzados y salimos si ha acabado esta partida
  182.     numeros_lanzados++;
  183.     if(numeros_lanzados<=30)
  184.     {
  185.         num_lanz.setPlainText(QString("<- NUM SORTEADOS = ")+QString::number(numeros_lanzados));
  186.     }
  187.  
  188.     if(numeros_lanzados > 30 || bingo)
  189.     {
  190.         disconnect(&t,SIGNAL(timeout()),this,SLOT(lanzada()));
  191.         partida();
  192.         return;
  193.     }
  194.  
  195.     //== Lanzamos nuevo numero
  196.     m_sorteo->nuevo_numero();
  197.  
  198.     //== Chequeo si el numero ha coincidido y lo marco
  199.     for(int i=0; i<ArraySize(m_carton->int_numeros); i++)
  200.     {
  201.         int n = m_carton->int_numeros[i];
  202.         if(n>0)
  203.         {
  204.             if(m_sorteo->numeros[n])
  205.             {
  206.                 m_carton->int_numeros[i] = -1;
  207.                 m_carton->numeros[i].setDefaultTextColor(Qt::red);
  208.             }
  209.         }
  210.     }
  211.  
  212.     //== Comprobamos si hay BINGO
  213.     bingo=true;
  214.     for(int i=0; i<ArraySize(m_carton->int_numeros) && bingo; i++)
  215.     {
  216.         if(m_carton->int_numeros[i]>0){ bingo = false; }
  217.     }
  218.     if(bingo)
  219.     {
  220.         score+=1500;
  221.         score_text.setPlainText(QString("PREMIO ACUMULADO = ")+QString::number(score));
  222.         mensaje("BINGOOOOOO!!!");
  223.         return;
  224.     }
  225.  
  226.     //== Comprobamos si hay alguna linea
  227.     for(int i=0; i<3; i++)
  228.     {
  229.         if(!lineas[i])
  230.         {
  231.             int start = i * 5,
  232.                 end = start + 5;
  233.  
  234.             lineas[i]=true;
  235.             for(int u=start; u<end && lineas[i]; u++)
  236.             {
  237.                 if(m_carton->int_numeros[u]>0){ lineas[i]=false; }
  238.             }
  239.  
  240.             if(lineas[i])
  241.             {
  242.                 score+=10;
  243.                 score_text.setPlainText(QString("PREMIO ACUMULADO = ")+QString::number(score));
  244.                 mensaje("LINEA "+QString::number(i + 1)+"!!!!!");
  245.             }
  246.         }
  247.     }
  248. }
  249.  
  250. void Game::mensaje(QString text)
  251. {
  252.     //== Si habia un mensaje en pantalla eliminalo primero
  253.     if(message_step!=0)
  254.     {
  255.         disconnect(&mt,SIGNAL(timeout()),this,SLOT(mensaje_slot()));
  256.         m_carton->m_scene->removeItem(&message);
  257.         message_step=0;
  258.     }
  259.  
  260.     message.setPos(50,500);
  261.     message.setFont(QFont("arial",10));
  262.     message.setDefaultTextColor(Qt::yellow);
  263.     message.setPlainText(text);
  264.     message.setOpacity(1);
  265.  
  266.     m_carton->m_scene->addItem(&message);
  267.  
  268.     connect(&mt,SIGNAL(timeout()),this,SLOT(mensaje_slot()));
  269.     mt.start(50);
  270.  
  271. }
  272.  
  273. void Game::mensaje_slot()
  274. {
  275.     message_step++;
  276.     if(message_step>100)
  277.     {
  278.         disconnect(&mt,SIGNAL(timeout()),this,SLOT(mensaje_slot()));
  279.         m_carton->m_scene->removeItem(&message);
  280.         message_step=0;
  281.         if(numeros_lanzados >= 30){ partida(); }
  282.  
  283.     }
  284.     else if(message_step<60)
  285.     {
  286.         message.setPos(message.x(),message.y() - 7);
  287.         message.setFont(QFont("arial",10 + message_step));
  288.     }
  289.     else
  290.     {
  291.         message.setOpacity(message.opacity() - 0.05);
  292.     }
  293. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement