<mainwindow.h>
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_actionSalir_triggered();
void on_actionAcerca_de_triggered();
void on_actionNuevo_Juego_triggered();
void on_pushButton_7_clicked();
void on_pushButton_9_clicked();
void on_pushButton_11_clicked();
void on_pushButton_13_clicked();
void on_pushButton_15_clicked();
void on_pushButton_17_clicked();
void on_pushButton_19_clicked();
void BotonPulsado(int columna);
void Ganado(int fila,int columna,int ficha);
bool Comprobar4EnLinea(int fila,int columna,int incFila,int incColumna);
bool ComprobarDiagonalIzquierda(int fila,int columna);
bool ComprobarDiagonalDerecha(int fila,int columna);
bool ComprobarVertical(int fila,int columna);
bool ComprobarHorizontal(int fila,int columna);
private:
//declaracion de los atributos necesarios para nuestro codigo.
Ui::MainWindow *ui;
QPushButton *M[6][7];
int V[7];
int Mint[6][7];
int empate;
bool turno;
bool ganadorojas;
bool ganadoamar;
};
#endif // MAINWINDOW_H
---------------------------------------------------------------------------------------------------------------------
<main.cpp>
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
----------------------------------------------------------------------------------------------------------------------
<mainwindow.cpp>
#include "mainwindow.h"
#include "ui_mainwindow.h"
//librerias para las distinas opciones
#include <QMessageBox>
#include <QPushButton>
#include <QIcon>
//Constructor de la ventana principal
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
//Inicializacion de la ventana.
ui->setupUi(this);
//Asignacion de los botones a las distintas posiciones de la matriz.
M[0][0] = ui->pushButton_8;
M[0][1] = ui->pushButton_10;
M[0][2] = ui->pushButton_12;
M[0][3] = ui->pushButton_14;
M[0][4] = ui->pushButton_16;
M[0][5] = ui->pushButton_18;
M[0][6] = ui->pushButton_20;
M[1][0] = ui->pushButton_21;
M[1][1] = ui->pushButton_22;
M[1][2] = ui->pushButton_23;
M[1][3] = ui->pushButton_24;
M[1][4] = ui->pushButton_25;
M[1][5] = ui->pushButton_26;
M[1][6] = ui->pushButton_27;
M[2][0] = ui->pushButton_28;
M[2][1] = ui->pushButton_29;
M[2][2] = ui->pushButton_30;
M[2][3] = ui->pushButton_31;
M[2][4] = ui->pushButton_32;
M[2][5] = ui->pushButton_33;
M[2][6] = ui->pushButton_34;
M[3][0] = ui->pushButton_35;
M[3][1] = ui->pushButton_36;
M[3][2] = ui->pushButton_37;
M[3][3] = ui->pushButton_38;
M[3][4] = ui->pushButton_39;
M[3][5] = ui->pushButton_40;
M[3][6] = ui->pushButton_41;
M[4][0] = ui->pushButton_42;
M[4][1] = ui->pushButton_43;
M[4][2] = ui->pushButton_44;
M[4][3] = ui->pushButton_45;
M[4][4] = ui->pushButton_46;
M[4][5] = ui->pushButton_47;
M[4][6] = ui->pushButton_48;
M[5][0] = ui->pushButton_49;
M[5][1] = ui->pushButton_50;
M[5][2] = ui->pushButton_51;
M[5][3] = ui->pushButton_52;
M[5][4] = ui->pushButton_53;
M[5][5] = ui->pushButton_54;
M[5][6] = ui->pushButton_55;
for(int i=0;i<7;i++){
V[i]=0;
}
for(int j=0;j<6;j++){
for(int k=0;k<7;k++){
Mint[j][k]=0;
}
}
empate=0;
turno=true;
ganadorojas=false;
ganadoamar=false;
}
//Destructor
MainWindow::~MainWindow()
{
delete ui;
}
//funcion salir triggered
void MainWindow::on_actionSalir_triggered()
{
close();
}
//funcion acerca de triggered
void MainWindow::on_actionAcerca_de_triggered()
{
QMessageBox::information(this,"Acerca del Juego","Realizado por Alvaro Garrido Tafalla y Jorge Medina Carbonell","Aceptar");
}
//funcion reiniciar juego triggered
void MainWindow::on_actionNuevo_Juego_triggered()
{
for(int i=0;i<6;i++){
for(int j=0;j<7;j++){
M[i][j]->setIcon(QIcon(":/Iconos/Material ejercicio 1/circle_grey.png"));
Mint[i][j]=0;
}
}
for(int i=0;i<7;i++){
V[i]=0;
}
turno=true;
ganadorojas=false;
ganadoamar=false;
empate=0;
ui->label->setText("Turno de las rojas");
}
//Funciones clicked de cada boton del panel, que llaman a la funcion BotonPulsado
void MainWindow::on_pushButton_7_clicked()
{
BotonPulsado(0);
}
void MainWindow::on_pushButton_9_clicked()
{
BotonPulsado(1);
}
void MainWindow::on_pushButton_11_clicked()
{
BotonPulsado(2);
}
void MainWindow::on_pushButton_13_clicked()
{
BotonPulsado(3);
}
void MainWindow::on_pushButton_15_clicked()
{
BotonPulsado(4);
}
void MainWindow::on_pushButton_17_clicked()
{
BotonPulsado(5);
}
void MainWindow::on_pushButton_19_clicked()
{
BotonPulsado(6);
}
//funcion BotonPulsado que permite cambir el icono de los botones.
void MainWindow::BotonPulsado(int columna)
{
if(V[columna]<6){//comprueba que no se tira sobre una columna llena
int pos=5-V[columna];
V[columna]=V[columna]+1;
if(turno==true){
M[pos][columna]->setIcon(QIcon(":/Iconos/Material ejercicio 1/circle_red.png"));
Mint[pos][columna]=1;
turno=false;
ui->label->setText("Turno de las amarillas");
Ganado(pos,columna,1);
}else{
M[pos][columna]->setIcon(QIcon(":/Iconos/Material ejercicio 1/circle_yellow.png"));
Mint[pos][columna]=2;
turno=true;
ui->label->setText("Turno de las rojas");
Ganado(pos,columna,2);
}
empate++;
}
}
//Ganador o Empate
void MainWindow::Ganado(int fila,int columna,int ficha)
{
bool ganador=false;
ganador |= ComprobarDiagonalDerecha(fila,columna);
ganador |= ComprobarDiagonalIzquierda(fila,columna);
ganador |= ComprobarVertical(fila,columna);
ganador |= ComprobarHorizontal(fila,columna);
if(ganador){
if(ficha==1){
QMessageBox::information(this,"Fin de juego","Ganan las Rojas","OK");
}else{
QMessageBox::information(this,"Fin de juego","Ganan las Amarillas","OK");
}
on_actionNuevo_Juego_triggered();
}
if(empate==41){
QMessageBox::information(this,"Fin de juego","Rojas y Amarillas han quedado empate","OK");
on_actionNuevo_Juego_triggered();
}
}
//comprueba la diagonal derecha
bool MainWindow::ComprobarDiagonalDerecha( int fila, int columna)
{
bool encontrado=false;
// Se prueban todas las combinaciones en las que esta involucrada la ficha recien puesta
for(int i=0;i<4;i++){
if(Comprobar4EnLinea(fila+i,columna+i,1,-1)){
encontrado=true;
break;
}
}
return encontrado;
}
//comprueba la diagonal izquierda
bool MainWindow::ComprobarDiagonalIzquierda( int fila, int columna)
{
bool encontrado=false;
// Se prueban todas las combinaciones en las que esta involucrada la ficha recien puesta
for(int i=0;i<4;i++){
if(Comprobar4EnLinea(fila + i,columna + i,-1,-1)){
encontrado=true;
break;
}
}
return encontrado;
}
//comprueba las verticales
bool MainWindow::ComprobarVertical(int fila,int columna)
{
bool encontrado=false;
for(int i=0;i<4;i++){
if(Comprobar4EnLinea(fila+i,columna,-1,0)){
encontrado=true;
break;
}
}
return encontrado;
}
//comprueba las horizontales
bool MainWindow::ComprobarHorizontal(int fila,int columna)
{
bool encontrado=false;
for(int i=0;i<4;i++){
if(Comprobar4EnLinea(fila,columna+i,0,-1)){
encontrado=true;
break;
}
}
return encontrado;
}
// comprueba si ha hecho 4 en linea
bool MainWindow::Comprobar4EnLinea(int fila,int columna,int incFila,int incColumna )
{
bool encontrado=true;
if(fila>=0 && fila<6 && columna>=0 && columna<7){
int ficha=Mint[fila][columna];
for(int i=0;i<3;i++){
fila+=incFila;
columna+=incColumna;
if(fila>=0 && fila<6 && columna>=0 && columna<7){
if(Mint[fila][columna]!=ficha){
encontrado=false;
break;
}
}else{
encontrado=false;
}
}
}else{
encontrado=false;
}
return encontrado;
}
----------------------------------------------------------------------------------------------------------------------