if(!
static_cast(mainLayout->itemAtPosition(pair.first-1+i,pair.second-1+j)->widget())->is_turn_over()){
static_cast(mainLayout->itemAtPosition(pair.first-1+i,pair.second-1+j)->widget())->turn_over();
++turn_over_block_number_;
queue.enqueue(qMakePair(pair.first-1+i,pair.second-1+j));
}
}
}
}
}
}
if(turn_over_block_number_==total_block_number_-total_mine_number_){
game_over_flag_=true;
emitgame_over(true);
}
}
#ifndefMAIN_WINDOW_H_
#defineMAIN_WINDOW_H_
#include"block_area.h"
#include
#include
#include
classQAction;
classQActionGroup;
classQCloseEvent;
classQMenu;
classQToolBar;
classQWidget;
classMainWindow:
publicQMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget*parent=0);
protected:
voidcloseEvent(QCloseEvent*event);
privateslots:
voidslot_new_game();
voidslot_rank();
voidslot_show_game_toolBar(boolshow);
voidslot_show_statusBar(boolshow);
voidslot_standard(QAction*standard_action);
voidslot_about_game();
voidslot_game_over(boolis_win);
voidslot_timer();
private:
voidread_settings();
voidwrite_settings();
voidcreate_actions();
voidcreate_menus();
voidcreate_game_toolBar();
voidcreate_statusBar();
private:
BlockArea*area_;
introw_;
intcolumn_;
intmine_number_;
inteasy_record_time_;
intmiddle_record_time_;
inthard_record_time_;
QStringeasy_record_name_;
QStringmiddle_record_name_;
QStringhard_record_name_;
intcurrent_standard_;
QMenu*game_menu;
QMenu*setting_menu;
QMenu*help_menu;
QToolBar*game_toolBar;
QAction*new_game_action;
QAction*rank_action;
QAction*exit_action;
QAction*show_game_toolBar_action;
QAction*show_statusBar_action;
QAction*easy_standard_action;
QAction*middle_standard_action;
QAction*hard_standard_action;
QAction*custom_standard_action;
QActionGroup*standard_actionGroup;
QAction*about_game_action;
QAction*about_qt_action;
QLabel*time_label;
QTimetime;
QTimertimer;
};
#endif
#include"main_window.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
/*关于游戏介绍的信息*/
constQStringg_software_name="MineSweeper";
constQStringg_software_version="1.2";
constQStringg_software_author="CHANGHUIZHEN";
/*关于排行榜的信息*/
constintg_no_record_time=9999;
constQStringg_no_record_name="";
MainWindow:
:
MainWindow(QWidget*parent)
:
QMainWindow(parent)
{
area_=newBlockArea(9,9,10);//一般设置
connect(area_,SIGNAL(game_over(bool)),this,SLOT(slot_game_over(bool)));
setCentralWidget(area_);
create_actions();
create_menus();
create_game_toolBar();
create_statusBar();
QCoreApplication:
:
setOrganizationName(g_software_author);
QCoreApplication:
:
setApplicationName(g_software_name);
read_settings();
layout()->setSizeConstraint(QLayout:
:
SetFixedSize);
setWindowTitle(g_software_name);
setWindowIcon(QIcon(":
/game.png"));
/*等待最长时间,到时间就会提示游戏失败*/
timer.start(1000);
connect(&timer,SIGNAL(timeout()),this,SLOT(slot_timer()));
slot_new_game();
}
voidMainWindow:
:
closeEvent(QCloseEvent*)
{
write_settings();
}
voidMainWindow:
:
slot_new_game()
{
area_->set_block_area(row_,column_,mine_number_);
time_label->setText("0");
time.restart();
timer.start();
}
voidMainWindow:
:
slot_rank()
{
QDialogdialog;
dialog.setWindowTitle(tr("rank"));
QGridLayout*up_layout=newQGridLayout;
up_layout->addWidget(newQLabel(tr("Standard")),0,0);
up_layout->addWidget(newQLabel(tr("Time")),0,1);
up_layout->addWidget(newQLabel(tr("Name")),0,2);
up_layout->addWidget(newQLabel(tr("Easy")),1,0);
up_layout->addWidget(newQLabel(QString("%1").arg(easy_record_time_)),1,1);
up_layout->addWidget(newQLabel(easy_record_name_),1,2);
up_layout->addWidget(newQLabel(tr("Middle")),2,0);
up_layout->addWidget(newQLabel(QString("%1").arg(middle_record_time_)),2,1);
up_layout->addWidget(newQLabel(middle_record_name_),2,2);
up_layout->addWidget(newQLabel(tr("Hard")),3,0);
up_layout->addWidget(newQLabel(QString("%1").arg(hard_record_time_)),3,1);
up_layout->addWidget(newQLabel(hard_record_name_),3,2);
QPushButton*recount_button=newQPushButton(tr("recount"));
QPushButton*close_button=newQPushButton(tr("close"));
close_button->setDefault(true);
connect(rec