扫雷游戏代码

上传人:suns****4568 文档编号:109947698 上传时间:2019-10-28 格式:DOC 页数:20 大小:47.92KB
返回 下载 相关 举报
扫雷游戏代码_第1页
第1页 / 共20页
扫雷游戏代码_第2页
第2页 / 共20页
扫雷游戏代码_第3页
第3页 / 共20页
扫雷游戏代码_第4页
第4页 / 共20页
扫雷游戏代码_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《扫雷游戏代码》由会员分享,可在线阅读,更多相关《扫雷游戏代码(20页珍藏版)》请在金锄头文库上搜索。

1、/*block.h*/#ifndef BLOCK_H_#define BLOCK_H_#includeclass QWidget;class Block:public QLabelQ_OBJECTpublic:explicit Block(bool mine_flag,QWidget* parent=0);void set_number(int number);void turn_over();bool is_mine()const;bool is_turn_over()const;signals:void turn_over(bool is_mine);protected:void mous

2、ePressEvent(QMouseEvent* event);private:bool mine_flag_;bool mark_flag_;bool turn_over_flag_;int number_;#endif#includeblock.h#include#include#include#includeBlock:Block(bool mine_flag,QWidget* parent):QLabel(parent)mine_flag_=mine_flag;mark_flag_=false;turn_over_flag_=false;number_=-1;setPixmap(QPi

3、xmap(:/images/normal.png);void Block:set_number(int number)number_=number;void Block:turn_over()if(!turn_over_flag_)turn_over_flag_=true;if(mine_flag_)setPixmap(QPixmap(:/images/mine.png);elsesetPixmap(QPixmap(:/images/mine_+QString(%1).arg(number_)+.png);update();bool Block:is_mine()constreturn min

4、e_flag_;bool Block:is_turn_over()constreturn turn_over_flag_;/*鼠标事件的实现*/void Block:mousePressEvent(QMouseEvent* event)if(event-button()=Qt:LeftButton)if(!turn_over_flag_&!mark_flag_)turn_over_flag_=true;if(mine_flag_=true)setPixmap(QPixmap(:/images/mine.png);update();emit turn_over(true);elsesetPixm

5、ap(QPixmap(:/images/mine_+QString(%1).arg(number_)+.png);update();emit turn_over(false);else if(event-button()=Qt:RightButton)if(!turn_over_flag_)if(!mark_flag_)mark_flag_=true;setPixmap(QPixmap(:/images/flag.png);elsemark_flag_=false;setPixmap(QPixmap(:/images/normal.png);update();QLabel:mousePress

6、Event(event);#ifndef BLOCK_AREA_H_#define BLOCK_AREA_H_#includeblock.h#includeclass QEvent;class QGridLayout;class QObject;class BlockArea:public QWidgetQ_OBJECTpublic: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

7、=false);signals:void game_over(bool is_win);protected:booleventFilter(QObject* watched, QEvent* event);private slots:void slot_turn_over(bool is_mine);private:int calculate_mines(int x,int y)const;/璁畻浠,y涓轰腑蹇幂殑涔濆镙煎唴镄勯浄鏁void try_to_turn_over_more_blocks(int x,int y);private:QGridLayout* mainLayout;int

8、 row_;int column_;int total_block_number_;int total_mine_number_;int turn_over_block_number_;bool game_over_flag_;#endif/*block_area.h*/#includeblock_area.h#include#include#include#include#include#include#include#include#include/*雷的随机布置*/ptrdiff_t random(ptrdiff_t i) return qrand()%i;ptrdiff_t (*p_r

9、andom)(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_number,int init_flag)if(!init_flag)for(int i=0;irow_;i+)for(int j=0;jcolumn_;j+)delete

10、 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 mine_flagtotal_block_number_;for(int i=0;itotal_mine_number_;i+)mine_flagi=true;for(int

11、i=total_mine_number_;itotal_block_number_;i+)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);mainLayout=new QGridLayout(this);for(int i=0;irow_;i+)for(int j=0;jaddWidget(new Block(mine_fl

12、agi*column_+j),i,j);for(int i=0;irow_;i+)for(int j=0;jcolumn_;j+)Block* current_block=static_cast(mainLayout-itemAtPosition(i,j)-widget();current_block-set_number(calculate_mines(i,j);connect(current_block,SIGNAL(turn_over(bool),this,SLOT(slot_turn_over(bool);current_block-installEventFilter(this);b

13、oolBlockArea:eventFilter(QObject* watched, QEvent* event)if(game_over_flag_)if(event-type()=QEvent:MouseButtonPress)return true;return QWidget:eventFilter(watched,event);void BlockArea: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_block_number_-total_mine_number_)game_over_flag_=true;emit game_over(true);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号