扫雷游戏代码Word格式.docx
- 文档编号:20881246
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:23
- 大小:20.28KB
扫雷游戏代码Word格式.docx
《扫雷游戏代码Word格式.docx》由会员分享,可在线阅读,更多相关《扫雷游戏代码Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
mark_flag_=false;
turn_over_flag_=false;
number_=-1;
setPixmap(QPixmap("
/images/normal.png"
));
}
voidBlock:
set_number(intnumber)
number_=number;
turn_over()
if(!
turn_over_flag_){
turn_over_flag_=true;
if(mine_flag_)
/images/mine.png"
else
/images/mine_"
+QString("
%1"
).arg(number_)+"
.png"
update();
boolBlock:
is_mine()const
returnmine_flag_;
is_turn_over()const
returnturn_over_flag_;
/*鼠标事件的实现*/
mousePressEvent(QMouseEvent*event)
if(event->
button()==Qt:
LeftButton){
turn_over_flag_&
&
!
mark_flag_){
if(mine_flag_==true){
emitturn_over(true);
}else{
emitturn_over(false);
}elseif(event->
RightButton){
mark_flag_=true;
/images/flag.png"
QLabel:
mousePressEvent(event);
#ifndefBLOCK_AREA_H_
#defineBLOCK_AREA_H_
classQEvent;
classQGridLayout;
classQObject;
classBlockArea:
publicQWidget
BlockArea(introw,intcolumn,intmine_number,QWidget*parent=0);
voidset_block_area(introw,intcolumn,intmine_number,intinit_flag=false);
voidgame_over(boolis_win);
booleventFilter(QObject*watched,QEvent*event);
privateslots:
voidslot_turn_over(boolis_mine);
intcalculate_mines(intx,inty)const;
//璁$畻浠,y涓轰腑蹇幂殑涔濆镙煎唴镄勯浄鏁voidtry_to_turn_over_more_blocks(intx,inty);
QGridLayout*mainLayout;
introw_;
intcolumn_;
inttotal_block_number_;
inttotal_mine_number_;
intturn_over_block_number_;
boolgame_over_flag_;
/*block_area.h*/
block_area.h"
algorithm>
QEvent>
QGridLayout>
QLayout>
QObject>
QQueue>
QTime>
/*雷的随机安插*/
ptrdiff_trandom(ptrdiff_ti)
returnqrand()%i;
ptrdiff_t(*p_random)(ptrdiff_t)=random;
BlockArea:
BlockArea(introw,intcolumn,intmine_number,QWidget*parent)
QWidget(parent)
set_block_area(row,column,mine_number,true);
voidBlockArea:
set_block_area(introw,intcolumn,intmine_number,intinit_flag)
init_flag){
for(inti=0;
i<
row_;
i++)
for(intj=0;
j<
column_;
j++)
deletestatic_cast<
Block*>
(mainLayout->
itemAtPosition(i,j)->
widget());
deletemainLayout;
row_=row;
column_=column;
total_block_number_=row_*column_;
total_mine_number_=mine_number;
turn_over_block_number_=0;
game_over_flag_=false;
boolmine_flag[total_block_number_];
total_mine_number_;
mine_flag[i]=true;
for(inti=total_mine_number_;
total_block_number_;
mine_flag[i]=false;
QTimetime;
time=QTime:
currentTime();
qsrand(time.msec()+time.second()*1000);
std:
random_shuffle(mine_flag,mine_flag+total_block_number_,p_random);
mainLayout=newQGridLayout(this);
mainLayout->
addWidget(newBlock(mine_flag[i*column_+j]),i,j);
i++){
j++){
Block*current_block=static_cast<
current_block->
set_number(calculate_mines(i,j));
connect(current_block,SIGNAL(turn_over(bool)),this,SLOT(slot_turn_over(bool)));
installEventFilter(this);
boolBlockArea:
eventFilter(QObject*watched,QEvent*event)
if(game_over_flag_)
type()==QEvent:
MouseButtonPress)
returntrue;
returnQWidget:
eventFilter(watched,event);
slot_turn_over(boolis_mine)
if(is_mine){
game_over_flag_=true;
emitgame_over(false);
++turn_over_block_number_;
if(turn_over_block_number_==total_block_number_-total_mine_number_){
emitgame_over(true);
if(sender()==static_cast<
widget()))
try_to_turn_over_more_blocks(i,j);
intBlockArea:
calculate_mines(intx,inty)const
intnumber=0;
3;
if((x-1+i>
=0)&
(x-1+i<
row_)&
(y-1+j>
(y-1+j<
column_))
if(static_cast<
itemAtPosition(x-1+i,y-1+j)->
widget())->
is_mine())
++number;
returnnumber;
try_to_turn_over_more_blocks(intx,inty)
QQueue<
QPair<
int,int>
>
queue;
pair;
queue.enqueue(qMakePair(x,y));
while(!
queue.isEmpty()){
pair=queue.head();
queue.dequeue();
if(calculate_mines(pair.first,pair.second)==0){
if((pair.first-1+i>
(pair.first-1+i<
(pair.second-1+j>
(pair.second-1+j<
column_)){
static_cast<
itemAtPosition(pair.first-1+i,pair.second-1+j)->
is_turn_over()){
turn_over();
queue.enqueue(qMakePair(pair.first-1+i,pair.second-1+j));
#ifndefMAIN_WINDOW_H_
#defineMAIN_WINDOW_H_
QMainWindow>
QTimer>
classQAction;
classQActionGroup;
classQCloseEvent;
classQMenu;
classQToolBar;
classMainWindow:
publicQMainWindow
MainWindow(QWidget*parent=0);
voidcloseEvent(QCloseEvent*event);
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();
voidread_settings();
voidwrite_settings();
voidcreate_actions();
voidcreate_menus();
voidcreate_game_toolBar();
voidcreate_statusBar();
BlockArea*area_;
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;
QTimertimer;
main_window.h"
QAction>
QActionGroup>
QApplication>
QDialog>
QDialogButtonBox>
QHBoxLayout>
QIcon>
QInputDialog>
QMenu>
QMenuBar>
QMessageBox>
QPushButton>
QSettings>
QSpinBox>
QStatusBar>
QToolBar>
QVBoxLayout>
/*关于游戏介绍的信息*/
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);
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();
slot_new_game()
area_->
set_block_area(row_,column_,mine_number_);
time_label->
setText("
0"
);
time.restart();
timer.start();
slot_rank()
QDialogdialog;
dialog.setWindowTitle(tr("
rank"
QGridLayout*up_layout=newQGridLayout;
up_layout->
addWidget(newQLabel(tr("
Standard"
)),0,0);
Time"
)),0,1);
Name"
)),0,2);
Easy"
)),1,0);
addWidget(newQLabel(QString("
).arg(easy_record_time_)),1,1);
addWidget(newQLabel(easy_record_name_),1,2);
Middle"
)),2,0);
).arg(middle_record_time_)),2,1);
addWidget(newQLabel(middle_record_name_),2,2);
Hard"
)),3,0);
).arg(hard_record_time_)),3,1);
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 扫雷 游戏 代码