扫雷游戏代码Word格式.docx

上传人:b****4 文档编号:18512860 上传时间:2022-12-18 格式:DOCX 页数:25 大小:23.26KB
下载 相关 举报
扫雷游戏代码Word格式.docx_第1页
第1页 / 共25页
扫雷游戏代码Word格式.docx_第2页
第2页 / 共25页
扫雷游戏代码Word格式.docx_第3页
第3页 / 共25页
扫雷游戏代码Word格式.docx_第4页
第4页 / 共25页
扫雷游戏代码Word格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

扫雷游戏代码Word格式.docx

《扫雷游戏代码Word格式.docx》由会员分享,可在线阅读,更多相关《扫雷游戏代码Word格式.docx(25页珍藏版)》请在冰豆网上搜索。

扫雷游戏代码Word格式.docx

QLabel(parent)

mine_flag_=mine_flag;

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_)

setPixmap(QPixmap("

/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){

if(!

turn_over_flag_&

&

!

mark_flag_){

turn_over_flag_=true;

if(mine_flag_==true){

setPixmap(QPixmap("

update();

emitturn_over(true);

}else{

emitturn_over(false);

}

}

}elseif(event->

RightButton){

if(!

mark_flag_=true;

/images/flag.png"

mark_flag_=false;

update();

}

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_];

for(inti=0;

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);

for(intj=0;

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_)

if(event->

type()==QEvent:

MouseButtonPress)

returntrue;

returnQWidget:

eventFilter(watched,event);

slot_turn_over(boolis_mine)

if(is_mine){

game_over_flag_=true;

emitgame_over(false);

}else{

++turn_over_block_number_;

if(turn_over_block_number_==total_block_number_-total_mine_number_){

game_over_flag_=true;

emitgame_over(true);

}else{

for(inti=0;

for(intj=0;

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;

QPair<

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_)){

if(!

static_cast<

itemAtPosition(pair.first-1+i,pair.second-1+j)->

is_turn_over()){

static_cast<

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_){

#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);

a

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1