Ver Mensaje Individual
  #8 (permalink)  
Antiguo 06/06/2014, 12:46
alvarogt91
 
Fecha de Ingreso: junio-2014
Ubicación: San Vicente del Raspeig
Mensajes: 9
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Juego 4 en raya

Muchas gracias por la ayuda pero ya he resuelto mi problema. Aqui os dejo el código y si alguien quiere el mainwindow.ui tambien puedo pasarlo pero es demasiado largo por eso he preferido dejarlo.

Código C++:
Ver original
  1. <mainwindow.h>
  2. #ifndef MAINWINDOW_H
  3. #define MAINWINDOW_H
  4.  
  5. #include <QMainWindow>
  6. #include <QPushButton>
  7.  
  8. namespace Ui {
  9. class MainWindow;
  10. }
  11.  
  12. class MainWindow : public QMainWindow
  13. {
  14.     Q_OBJECT
  15.  
  16. public:
  17.     explicit MainWindow(QWidget *parent = 0);
  18.     ~MainWindow();
  19.  
  20. private slots:
  21.  
  22.     void on_actionSalir_triggered();
  23.  
  24.     void on_actionAcerca_de_triggered();
  25.  
  26.     void on_actionNuevo_Juego_triggered();
  27.  
  28.     void on_pushButton_7_clicked();
  29.  
  30.     void on_pushButton_9_clicked();
  31.  
  32.     void on_pushButton_11_clicked();
  33.  
  34.     void on_pushButton_13_clicked();
  35.  
  36.     void on_pushButton_15_clicked();
  37.  
  38.     void on_pushButton_17_clicked();
  39.  
  40.     void on_pushButton_19_clicked();
  41.  
  42.     void BotonPulsado(int columna);
  43.  
  44.     void Ganado(int fila,int columna,int ficha);
  45.  
  46.     bool Comprobar4EnLinea(int fila,int columna,int incFila,int incColumna);
  47.  
  48.     bool ComprobarDiagonalIzquierda(int fila,int columna);
  49.  
  50.     bool ComprobarDiagonalDerecha(int fila,int columna);
  51.  
  52.     bool ComprobarVertical(int fila,int columna);
  53.  
  54.     bool ComprobarHorizontal(int fila,int columna);
  55.  
  56. private:
  57.     //declaracion de los atributos necesarios para nuestro codigo.
  58.     Ui::MainWindow *ui;
  59.     QPushButton *M[6][7];
  60.     int V[7];
  61.     int Mint[6][7];
  62.     int empate;
  63.     bool turno;
  64.     bool ganadorojas;
  65.     bool ganadoamar;
  66. };
  67.  
  68. #endif // MAINWINDOW_H
  69. ---------------------------------------------------------------------------------------------------------------------
  70. <main.cpp>
  71. #include "mainwindow.h"
  72. #include <QApplication>
  73.  
  74.  
  75. int main(int argc, char *argv[])
  76. {
  77.     QApplication a(argc, argv);
  78.     MainWindow w;
  79.     w.show();
  80.  
  81.     return a.exec();
  82. }
  83. ----------------------------------------------------------------------------------------------------------------------
  84. <mainwindow.cpp>
  85. #include "mainwindow.h"
  86. #include "ui_mainwindow.h"
  87.  
  88. //librerias para las distinas opciones
  89. #include <QMessageBox>
  90. #include <QPushButton>
  91. #include <QIcon>
  92.  
  93. //Constructor de la ventana principal
  94. MainWindow::MainWindow(QWidget *parent) :
  95.     QMainWindow(parent),
  96.     ui(new Ui::MainWindow)
  97. {
  98.     //Inicializacion de la ventana.
  99.     ui->setupUi(this);
  100.  
  101.     //Asignacion de los botones a las distintas posiciones de la matriz.
  102.     M[0][0] = ui->pushButton_8;
  103.     M[0][1] = ui->pushButton_10;
  104.     M[0][2] = ui->pushButton_12;
  105.     M[0][3] = ui->pushButton_14;
  106.     M[0][4] = ui->pushButton_16;
  107.     M[0][5] = ui->pushButton_18;
  108.     M[0][6] = ui->pushButton_20;
  109.     M[1][0] = ui->pushButton_21;
  110.     M[1][1] = ui->pushButton_22;
  111.     M[1][2] = ui->pushButton_23;
  112.     M[1][3] = ui->pushButton_24;
  113.     M[1][4] = ui->pushButton_25;
  114.     M[1][5] = ui->pushButton_26;
  115.     M[1][6] = ui->pushButton_27;
  116.     M[2][0] = ui->pushButton_28;
  117.     M[2][1] = ui->pushButton_29;
  118.     M[2][2] = ui->pushButton_30;
  119.     M[2][3] = ui->pushButton_31;
  120.     M[2][4] = ui->pushButton_32;
  121.     M[2][5] = ui->pushButton_33;
  122.     M[2][6] = ui->pushButton_34;
  123.     M[3][0] = ui->pushButton_35;
  124.     M[3][1] = ui->pushButton_36;
  125.     M[3][2] = ui->pushButton_37;
  126.     M[3][3] = ui->pushButton_38;
  127.     M[3][4] = ui->pushButton_39;
  128.     M[3][5] = ui->pushButton_40;
  129.     M[3][6] = ui->pushButton_41;
  130.     M[4][0] = ui->pushButton_42;
  131.     M[4][1] = ui->pushButton_43;
  132.     M[4][2] = ui->pushButton_44;
  133.     M[4][3] = ui->pushButton_45;
  134.     M[4][4] = ui->pushButton_46;
  135.     M[4][5] = ui->pushButton_47;
  136.     M[4][6] = ui->pushButton_48;
  137.     M[5][0] = ui->pushButton_49;
  138.     M[5][1] = ui->pushButton_50;
  139.     M[5][2] = ui->pushButton_51;
  140.     M[5][3] = ui->pushButton_52;
  141.     M[5][4] = ui->pushButton_53;
  142.     M[5][5] = ui->pushButton_54;
  143.     M[5][6] = ui->pushButton_55;
  144.  
  145.     for(int i=0;i<7;i++){
  146.         V[i]=0;
  147.     }
  148.     for(int j=0;j<6;j++){
  149.         for(int k=0;k<7;k++){
  150.             Mint[j][k]=0;
  151.         }
  152.     }
  153.     empate=0;
  154.     turno=true;
  155.     ganadorojas=false;
  156.     ganadoamar=false;
  157.  
  158. }
  159. //Destructor
  160. MainWindow::~MainWindow()
  161. {
  162.     delete ui;
  163. }
  164. //funcion salir triggered
  165. void MainWindow::on_actionSalir_triggered()
  166. {
  167.     close();
  168. }
  169. //funcion acerca de triggered
  170. void MainWindow::on_actionAcerca_de_triggered()
  171. {
  172.     QMessageBox::information(this,"Acerca del Juego","Realizado por Alvaro Garrido Tafalla y Jorge Medina Carbonell","Aceptar");
  173. }
  174. //funcion reiniciar juego triggered
  175. void MainWindow::on_actionNuevo_Juego_triggered()
  176. {
  177.     for(int i=0;i<6;i++){
  178.         for(int j=0;j<7;j++){
  179.             M[i][j]->setIcon(QIcon(":/Iconos/Material ejercicio 1/circle_grey.png"));
  180.             Mint[i][j]=0;
  181.         }
  182.     }
  183.     for(int i=0;i<7;i++){
  184.         V[i]=0;
  185.     }
  186.     turno=true;
  187.     ganadorojas=false;
  188.     ganadoamar=false;
  189.     empate=0;
  190.     ui->label->setText("Turno de las rojas");
  191. }
  192. //Funciones clicked de cada boton del panel, que llaman a la funcion BotonPulsado
  193. void MainWindow::on_pushButton_7_clicked()
  194. {
  195.     BotonPulsado(0);
  196. }
  197. void MainWindow::on_pushButton_9_clicked()
  198. {
  199.     BotonPulsado(1);
  200. }
  201. void MainWindow::on_pushButton_11_clicked()
  202. {
  203.     BotonPulsado(2);
  204. }
  205. void MainWindow::on_pushButton_13_clicked()
  206. {
  207.     BotonPulsado(3);
  208. }
  209. void MainWindow::on_pushButton_15_clicked()
  210. {
  211.     BotonPulsado(4);
  212. }
  213. void MainWindow::on_pushButton_17_clicked()
  214. {
  215.     BotonPulsado(5);
  216. }
  217. void MainWindow::on_pushButton_19_clicked()
  218. {
  219.     BotonPulsado(6);
  220. }
  221. //funcion BotonPulsado que permite cambir el icono de los botones.
  222. void MainWindow::BotonPulsado(int columna)
  223. {
  224.     if(V[columna]<6){//comprueba que no se tira sobre una columna llena
  225.         int pos=5-V[columna];
  226.         V[columna]=V[columna]+1;
  227.         if(turno==true){
  228.             M[pos][columna]->setIcon(QIcon(":/Iconos/Material ejercicio 1/circle_red.png"));
  229.             Mint[pos][columna]=1;
  230.             turno=false;
  231.             ui->label->setText("Turno de las amarillas");
  232.             Ganado(pos,columna,1);
  233.         }else{
  234.             M[pos][columna]->setIcon(QIcon(":/Iconos/Material ejercicio 1/circle_yellow.png"));
  235.             Mint[pos][columna]=2;
  236.             turno=true;
  237.             ui->label->setText("Turno de las rojas");
  238.             Ganado(pos,columna,2);
  239.         }
  240.         empate++;
  241.     }
  242. }
  243. //Ganador o Empate
  244. void MainWindow::Ganado(int fila,int columna,int ficha)
  245. {
  246.     bool ganador=false;
  247.  
  248.     ganador |= ComprobarDiagonalDerecha(fila,columna);
  249.     ganador |= ComprobarDiagonalIzquierda(fila,columna);
  250.     ganador |= ComprobarVertical(fila,columna);
  251.     ganador |= ComprobarHorizontal(fila,columna);
  252.  
  253.     if(ganador){
  254.         if(ficha==1){
  255.             QMessageBox::information(this,"Fin de juego","Ganan las Rojas","OK");
  256.         }else{
  257.             QMessageBox::information(this,"Fin de juego","Ganan las Amarillas","OK");
  258.         }
  259.         on_actionNuevo_Juego_triggered();
  260.     }
  261.     if(empate==41){
  262.         QMessageBox::information(this,"Fin de juego","Rojas y Amarillas han quedado empate","OK");
  263.         on_actionNuevo_Juego_triggered();
  264.     }
  265. }
  266. //comprueba la diagonal derecha
  267. bool MainWindow::ComprobarDiagonalDerecha( int fila, int columna)
  268. {
  269.   bool encontrado=false;
  270.   // Se prueban todas las combinaciones en las que esta involucrada la ficha recien puesta
  271.   for(int i=0;i<4;i++){
  272.     if(Comprobar4EnLinea(fila+i,columna+i,1,-1)){
  273.       encontrado=true;
  274.       break;
  275.     }
  276.   }
  277.   return encontrado;
  278. }
  279. //comprueba la diagonal izquierda
  280. bool MainWindow::ComprobarDiagonalIzquierda( int fila, int columna)
  281. {
  282.     bool encontrado=false;
  283.     // Se prueban todas las combinaciones en las que esta involucrada la ficha recien puesta
  284.     for(int i=0;i<4;i++){
  285.         if(Comprobar4EnLinea(fila + i,columna + i,-1,-1)){
  286.             encontrado=true;
  287.             break;
  288.         }
  289.     }
  290.     return encontrado;
  291. }
  292. //comprueba las verticales
  293. bool MainWindow::ComprobarVertical(int fila,int columna)
  294. {
  295.     bool encontrado=false;
  296.     for(int i=0;i<4;i++){
  297.         if(Comprobar4EnLinea(fila+i,columna,-1,0)){
  298.             encontrado=true;
  299.             break;
  300.         }
  301.     }
  302.     return encontrado;
  303. }
  304. //comprueba las horizontales
  305. bool MainWindow::ComprobarHorizontal(int fila,int columna)
  306. {
  307.     bool encontrado=false;
  308.     for(int i=0;i<4;i++){
  309.         if(Comprobar4EnLinea(fila,columna+i,0,-1)){
  310.             encontrado=true;
  311.             break;
  312.         }
  313.     }
  314.     return encontrado;
  315. }
  316. // comprueba si ha hecho 4 en linea
  317. bool MainWindow::Comprobar4EnLinea(int fila,int columna,int incFila,int incColumna )
  318. {
  319.     bool encontrado=true;
  320.     if(fila>=0 && fila<6 && columna>=0 && columna<7){
  321.         int ficha=Mint[fila][columna];
  322.         for(int i=0;i<3;i++){
  323.             fila+=incFila;
  324.             columna+=incColumna;
  325.             if(fila>=0 && fila<6 && columna>=0 && columna<7){
  326.                 if(Mint[fila][columna]!=ficha){
  327.                     encontrado=false;
  328.                     break;
  329.                 }
  330.             }else{
  331.                 encontrado=false;
  332.             }
  333.         }
  334.     }else{
  335.         encontrado=false;
  336.     }
  337.     return encontrado;
  338. }
  339. ----------------------------------------------------------------------------------------------------------------------