扫雷游戏代码.docx

上传人:b****4 文档编号:4232846 上传时间:2023-05-06 格式:DOCX 页数:10 大小:16.40KB
下载 相关 举报
扫雷游戏代码.docx_第1页
第1页 / 共10页
扫雷游戏代码.docx_第2页
第2页 / 共10页
扫雷游戏代码.docx_第3页
第3页 / 共10页
扫雷游戏代码.docx_第4页
第4页 / 共10页
扫雷游戏代码.docx_第5页
第5页 / 共10页
扫雷游戏代码.docx_第6页
第6页 / 共10页
扫雷游戏代码.docx_第7页
第7页 / 共10页
扫雷游戏代码.docx_第8页
第8页 / 共10页
扫雷游戏代码.docx_第9页
第9页 / 共10页
扫雷游戏代码.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

扫雷游戏代码.docx

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

扫雷游戏代码.docx

扫雷游戏代码

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Text;

usingSystem.Windows.Forms;

namespaceMine

{

publicpartialclassForm1:

Form

{

publicForm1()

{

InitializeComponent();

}

privateButton[,]Mines;

privateintXNum=8;//一行方块的数目

privateintYNum=9;//一列方块的数目

privateintMineNum=10;//雷的总数

privateint[,]Turn;//==-1表示这个位置已经翻开;

//==0表示这个位置没有翻开;

//==1表示这个位置插上红旗;

privateintCostTime=0;//所用时间

privateintRestMine=10;//剩余的雷数

privateintMineWidth=30;//雷方块的大小(宽度为30像素)

privatevoidForm1_Load(objectsender,EventArgse)

{

Turn=newint[XNum,YNum];

Mines=newButton[XNum,YNum];

for(intx=0;x

for(inty=0;y

{

Mines[x,y]=newButton();

this.Controls.Add(Mines[x,y]);

Mines[x,y].Left=10+MineWidth*x;

Mines[x,y].Top=50+MineWidth*y;

Mines[x,y].Width=MineWidth;

Mines[x,y].Height=MineWidth;

Mines[x,y].Font=newFont("宋体",10.5F,FontStyle.Bold,GraphicsUnit.Point,((byte)(134)));

Mines[x,y].BackgroundImageLayout=System.Windows.Forms.ImageLayout.Stretch;

Mines[x,y].Name="Mines"+(x+y*XNum).ToString();

Mines[x,y].MouseUp+=newMouseEventHandler(bt_MouseUp);

Mines[x,y].Visible=false;

}

}

privatevoidGameInit()//游戏初始化

{

for(intx=0;x

for(inty=0;y

{

Mines[x,y].Text="";

Mines[x,y].Visible=true;

Mines[x,y].Enabled=true;

Mines[x,y].Tag=null;

Mines[x,y].BackgroundImage=null;

Turn[x,y]=0;

}

LayMines();

}

///

///布雷

///

privatevoidLayMines()

{

intx,y;

Randoms=newRandom();

//取随机数

for(inti=0;i

{

//取随机数

x=s.Next(XNum);

y=s.Next(YNum);

if(Convert.ToInt16(Mines[x,y].Tag)!

=1)

{

//==1时,代表这个位置是地雷

Mines[x,y].Tag=1;//修改属性为雷

//Mines[x,y].Text="u";

i++;

}

}

}

///

///获取某个小方块区域相邻8个区域的雷个数

///

privateintGetAroundNum(introw,intcol)

{

inti,j;

intaround=0;

intminRow=(row==0)?

0:

row-1;

intmaxRow=row+2;

intminCol=(col==0)?

0:

col-1;

intmaxCol=col+2;

for(i=minRow;i

{

for(j=minCol;j

{

if(!

IsInMineArea(i,j))//判断是否在扫雷区域

continue;

if(Convert.ToInt16(Mines[i,j].Tag)==1)around++;

}

}

returnaround;

}

///

///判断是否在扫雷区域

///

privateboolIsInMineArea(introw,intcol)

{

return(row>=0&&row=0&&col

}

///

///雷方块拓展(对于周围无雷的空白区域)

///

privatevoidExpandMines(introw,intcol)

{

inti,j;

intminRow=(row==0)?

0:

row-1;

intmaxRow=row+2;

intminCol=(col==0)?

0:

col-1;

intmaxCol=col+2;

intaround=GetAroundNum(row,col);

//对周围一个雷都没有的空白区域拓展

if(around==0)

{

Mines[row,col].Enabled=false;

for(i=minRow;i

{

for(j=minCol;j

{

//对于周围可以拓展的区域进行的规拓展

if(!

IsInMineArea(i,j))continue;

if(!

(i==row&&j==col)&&Mines[i,j].Enabled!

=false)

//&&Convert.ToInt16(Mines[i,j].Tag)!

=1

{

ExpandMines(i,j);

}

Mines[i,j].Enabled=false;//周围无雷的区域按钮无效

if(GetAroundNum(i,j)!

=0)//周围无雷**********6--28

Mines[i,j].Text=GetAroundNum(i,j).ToString();

}

}

}

}

///

///胜利判断并处理

///

privateboolVictory()//检测是否胜利

{

for(inti=0;i

for(intj=0;j

{

//没翻开且未标示,则未成功

if(Mines[i,j].Enabled==true&&Turn[i,j]!

=1)returnfalse;

//不是雷却误标示为雷,则也未成功

if(Convert.ToInt16(Mines[i,j].Tag)!

=1&&Turn[i,j]==1)returnfalse;

}

returntrue;

}

//添加按钮控件Click事件与处理方法bt_Click:

privatevoidbt_MouseUp(objectsender,MouseEventArgse)//这里处理事件方法

{

StringbtName;

ButtonbClick=(Button)sender;//将被击的按钮赋给定义的bClick变量

btName=bClick.Name;//获取按钮的Name

intn=Convert.ToInt16(btName.Substring(5));

intx=n%XNum;

inty=n/XNum;

//通过按钮Name属性来判断是哪个Button被点击,并执行相应的操作

switch(e.Button)

{

caseMouseButtons.Left:

if(Convert.ToInt16(Mines[x,y].Tag)!

=1)//不是雷

{

Mines[x,y].BackgroundImage=null;

Mines[x,y].Text=GetAroundNum(x,y).ToString();

Mines[x,y].Enabled=false;

ExpandMines(x,y);//完成无雷拓展

if(Victory())

{

//判断是否胜利,是则将地图中所有雷标识出来

show();

MessageBox.Show("胜利!

!

!

","结束");

timer1.Enabled=false;//停止计时

}

}

else//触雷

{

Mines[x,y].BackgroundImage=Image.FromFile("mine1.bmp");

MessageBox.Show("失败!

!

!

","结束");

timer1.Enabled=false;//停止计时

show();//将地图中所有雷标识出来

}

break;

caseMouseButtons.Right:

Mines[x,y].BackgroundImage=Image.FromFile("flag.bmp");

if(Turn[x,y]==1)//表示这个位置插上红旗

{

Turn[x,y]=0;//取消红旗,表示这个位置没有翻开

RestMine++;

Mines[x,y].BackgroundImage=null;

}

else

{

Turn[x,y]=1;//表示这个位置插上红旗

RestMine--;

}

lblMine.Text=RestMine.ToString();

if(Victory())

{

MessageBox.Show("胜利!

!

!

","结束");

timer1.Enabled=false;//停止计时

}

break;

}

}

privatevoidshow()//将地图中所有雷标识出来

{

for(inti=0;i

for(intj=0;j

if(Convert.ToInt16(Mines[i,j].Tag)==1)

{

//==1时,代表这个位置是地雷

Mines[i,j].BackgroundImage=Image.FromFile("mine.bmp");

}

}

privatevoidbtnStart_Click(objectsender,EventArgse)

{

GameInit();//游戏初始化

timer1.Enabled=true;

}

privatevoidtimer1_Tick(objectsender,EventArgse)

{

CostTime++;

lblTime.Text=CostTime.ToString();//"用时:

"+CostTime.ToString()+"秒";

}

privatevoidbutton2_Click(objectsender,EventArgse)

{

show();//将地图中所有雷标识出来

}

}

}

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2