扫雷游戏代码.docx
- 文档编号:10529978
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:10
- 大小:16.40KB
扫雷游戏代码.docx
《扫雷游戏代码.docx》由会员分享,可在线阅读,更多相关《扫雷游戏代码.docx(10页珍藏版)》请在冰豆网上搜索。
扫雷游戏代码
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 } /// ///雷方块拓展(对于周围无雷的空白区域) /// 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();//将地图中所有雷标识出来 } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 扫雷 游戏 代码