1、QLabel(parent) mine_flag_=mine_flag; mark_flag_=false; turn_over_flag_=false; number_=-1; setPixmap(QPixmap(/images/normal.png);void Block:set_number(int number) number_=number;turn_over() if(!turn_over_flag_) turn_over_flag_=true; if(mine_flag_) setPixmap(QPixmap(/images/mine.png else/images/mine_+
2、QString(%1).arg(number_)+.png update(); bool Block:is_mine()const return mine_flag_;is_turn_over()const return turn_over_flag_;/*鼠标事件的实现*/mousePressEvent(QMouseEvent* event) if(event-button()=Qt:LeftButton) if(!turn_over_flag_&!mark_flag_) turn_over_flag_=true; if(mine_flag_=true) setPixmap(QPixmap(
3、 update(); emit turn_over(true); else emit turn_over(false); else if(event-RightButton) if(! mark_flag_=true;/images/flag.png mark_flag_=false; update(); QLabel:mousePressEvent(event);#ifndef BLOCK_AREA_H_#define BLOCK_AREA_H_class QEvent;class QGridLayout;class QObject;class BlockArea:public QWidge
4、t BlockArea(int row,int column,int mine_number,QWidget* parent=0); void set_block_area(int row,int column,int mine_number,int init_flag=false); void game_over(bool is_win); bool eventFilter(QObject* watched, QEvent* event);private slots: void slot_turn_over(bool is_mine); int calculate_mines(int x,i
5、nt y)const; /璁畻浠 ,y涓轰腑蹇幂殑涔濆 镙煎唴镄勯浄鏁 void try_to_turn_over_more_blocks(int x,int y); QGridLayout* mainLayout; int row_; int column_; int total_block_number_; int total_mine_number_; int turn_over_block_number_; bool game_over_flag_;/*block_area.h*/block_area.halgorithmQEventQGridLayoutQLayoutQObjectQ
6、QueueQTime/*雷的随机布置*/ptrdiff_t random(ptrdiff_t i) return qrand()%i;ptrdiff_t (*p_random)(ptrdiff_t)=random;BlockArea:BlockArea(int row,int column,int mine_number,QWidget* parent)QWidget(parent) set_block_area(row,column,mine_number,true);void BlockArea:set_block_area(int row,int column,int mine_numb
7、er,int init_flag)init_flag) for(int i=0;irow_;i+) for(int j=0;jcolumn_;j+) delete static_cast(mainLayout-itemAtPosition(i,j)-widget(); delete mainLayout; row_=row; column_=column; total_block_number_=row_*column_; total_mine_number_=mine_number; turn_over_block_number_=0; game_over_flag_=false; bool
8、 mine_flagtotal_block_number_; for(int i=0;total_mine_number_; mine_flagi=true; for(int i=total_mine_number_;total_block_number_; mine_flagi=false; QTime time; time=QTime:currentTime(); qsrand(time.msec()+time.second()*1000); std:random_shuffle(mine_flag,mine_flag+total_block_number_,p_random); main
9、Layout=new QGridLayout(this); for(int j=0; mainLayout-addWidget(new Block(mine_flagi*column_+j),i,j);i+)j+) Block* current_block=static_castset_number(calculate_mines(i,j); connect(current_block,SIGNAL(turn_over(bool),this,SLOT(slot_turn_over(bool);installEventFilter(this); bool BlockArea:eventFilte
10、r(QObject* watched, QEvent* event) if(game_over_flag_) if(event-type()=QEvent:MouseButtonPress) return true; return QWidget:eventFilter(watched,event);slot_turn_over(bool is_mine) if(is_mine) game_over_flag_=true; emit game_over(false); else +turn_over_block_number_; if(turn_over_block_number_=total
11、_block_number_-total_mine_number_) game_over_flag_=true; emit game_over(true); else for(int i=0; for(int j=0; if(sender()=static_cast=0) & (x-1+i (y-1+jcolumn_) ) if(static_castwidget()-is_mine() +number; return number;try_to_turn_over_more_blocks(int x,int y) QQueueQPair queue; QPair (pair.first-1+
12、i (pair.second-1+jcolumn_) ) if(!static_castis_turn_over() static_castQTimerclass QAction;class QActionGroup;class QCloseEvent;class QMenu;class QToolBar;class MainWindow:public QMainWindow MainWindow(QWidget* parent=0); void closeEvent(QCloseEvent* event); void slot_new_game(); void slot_rank(); vo
13、id slot_show_game_toolBar(bool show); void slot_show_statusBar(bool show); void slot_standard(QAction* standard_action); void slot_about_game(); void slot_game_over(bool is_win); void slot_timer(); void read_settings(); void write_settings(); void create_actions(); void create_menus(); void create_g
14、ame_toolBar(); void create_statusBar(); BlockArea* area_; int mine_number_; int easy_record_time_; int middle_record_time_; int hard_record_time_; QString easy_record_name_; QString middle_record_name_; QString hard_record_name_; int current_standard_; QMenu* game_menu; QMenu* setting_menu; QMenu* h
15、elp_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; Q
16、ActionGroup* standard_actionGroup; QAction* about_game_action; QAction* about_qt_action; QLabel* time_label; QTimer timer;main_window.hQActionQActionGroupQApplicationQDialogQDialogButtonBoxQHBoxLayoutQIconQInputDialogQMenuQMenuBarQMessageBoxQPushButtonQSettingsQSpinBoxQStatusBarQToolBarQVBoxLayout/*
17、关于游戏介绍的信息*/const QString g_software_name=Mine Sweeper;const QString g_software_version=1.2const QString g_software_author=CHANGHUIZHEN/*关于排行榜的信息*/const int g_no_record_time=9999;const QString g_no_record_name=MainWindow:MainWindow(QWidget* parent)QMainWindow(parent) area_=new BlockArea(9,9,10);/一般设置
18、 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);setApplicationName(g_software_name); read_settings(); layout()-setSizeCo
19、nstraint(QLayout:SetFixedSize); setWindowTitle(g_software_name); setWindowIcon(QIcon(/game.png /*等待最长时间,到时间就会提示游戏失败*/ timer.start(1000); connect(&timer,SIGNAL(timeout(),this,SLOT(slot_timer(); slot_new_game();void MainWindow:closeEvent(QCloseEvent*) write_settings();slot_new_game() area_-set_block_area(row_,column_,mine_number_); time_label-setText(0); time.restart(); timer.start();slot_rank() QDialog dialog; dialog.setWindowTitle(tr(rank QGridLayout* up_layout=new QGridLayout; up_layout-addWidget(new QLabel(tr(Standard),0,0);Time),0,1);Name),0,2);a
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1