C#控制台实现扫雷程序.docx

上传人:b****6 文档编号:12845729 上传时间:2023-06-08 格式:DOCX 页数:12 大小:33.19KB
下载 相关 举报
C#控制台实现扫雷程序.docx_第1页
第1页 / 共12页
C#控制台实现扫雷程序.docx_第2页
第2页 / 共12页
C#控制台实现扫雷程序.docx_第3页
第3页 / 共12页
C#控制台实现扫雷程序.docx_第4页
第4页 / 共12页
C#控制台实现扫雷程序.docx_第5页
第5页 / 共12页
C#控制台实现扫雷程序.docx_第6页
第6页 / 共12页
C#控制台实现扫雷程序.docx_第7页
第7页 / 共12页
C#控制台实现扫雷程序.docx_第8页
第8页 / 共12页
C#控制台实现扫雷程序.docx_第9页
第9页 / 共12页
C#控制台实现扫雷程序.docx_第10页
第10页 / 共12页
C#控制台实现扫雷程序.docx_第11页
第11页 / 共12页
C#控制台实现扫雷程序.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C#控制台实现扫雷程序.docx

《C#控制台实现扫雷程序.docx》由会员分享,可在线阅读,更多相关《C#控制台实现扫雷程序.docx(12页珍藏版)》请在冰点文库上搜索。

C#控制台实现扫雷程序.docx

C#控制台实现扫雷程序

C#在控制台实现扫雷程序

最终运行结果如图所示

使用说明

玩法同系统自带扫雷游戏规则

按Enter键”踩有无雷”

按M键标记有雷区域

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

namespacetest

{

classProgram

{

staticvoidMain(string[]args)

{

intn=int.Parse(Console.ReadLine());//用户输入扫雷二维数组大小

int[,]mine=newint[n,n];//定义一个扫雷二维数组

int[,]record=newint[n,n];//定义一个记录用户当前判定情况的二维数组

int[,]amount=newint[n,n];//记录以当前方块为中心的周围八个方块中雷的数量

intmc=0;

for(inti=0;i

{

for(intj=0;j

{

record[i,j]=-2;

}

}

Randomr=newRandom();//随机布雷

for(inti1=0;i1

{

for(intj1=0;j1

{

mine[i1,j1]=r.Next(0,4)/3;//从0到2中产生随机数0,1其中0代表无雷,而1代表有雷

}

}

//遍历出雷的数量

for(inti2=0;i2

{

for(intj2=0;j2

{

if(mine[i2,j2]==1)

mc++;

}

}

//记录以当前方块为中心的周围八个方块中雷的数量的产生方法

intmine_count=0;//雷的数量

for(inti=0;i

{

for(intj=0;j

{

if(mine[i,j]!

=1)

{

if(i-1<0||j-1<0||i+1>n-1||j+1>n-1)

{

if(i-1<0&&j-1<0)//左上角

{

if(mine[i+1,j]==1)

mine_count++;

if(mine[i,j+1]==1)

mine_count++;

if(mine[i+1,j+1]==1)

mine_count++;

amount[i,j]=mine_count;

mine_count=0;

}

if(j-1>=0&&j+1<=n-1&&i-1<0)//上边

{

if(mine[i,j-1]==1)

mine_count++;

if(mine[i+1,j-1]==1)

mine_count++;

if(mine[i+1,j]==1)

mine_count++;

if(mine[i+1,j+1]==1)

mine_count++;

if(mine[i,j+1]==1)

mine_count++;

amount[i,j]=mine_count;

mine_count=0;

}

if(i-1<0&&j+1>n-1)//右上角

{

if(mine[i,j-1]==1)

mine_count++;

if(mine[i+1,j-1]==1)

mine_count++;

if(mine[i+1,j]==1)

mine_count++;

amount[i,j]=mine_count;

mine_count=0;

}

if(j+1>n-1&&i-1>=0&&i+1<=n-1)//右边

{

if(mine[i-1,j]==1)

mine_count++;

if(mine[i-1,j-1]==1)

mine_count++;

if(mine[i,j-1]==1)

mine_count++;

if(mine[i+1,j-1]==1)

mine_count++;

if(mine[i+1,j]==1)

mine_count++;

amount[i,j]=mine_count;

mine_count=0;

}

if(i+1>n-1&&j+1>n-1)//右下角

{

if(mine[i-1,j-1]==1)

mine_count++;

if(mine[i-1,j]==1)

mine_count++;

if(mine[i,j-1]==1)

mine_count++;

amount[i,j]=mine_count;

mine_count=0;

}

if(i+1>n-1&&j-1>=0&&j+1<=n-1)//下边

{

if(mine[i-1,j-1]==1)

mine_count++;

if(mine[i,j-1]==1)

mine_count++;

if(mine[i-1,j]==1)

mine_count++;

if(mine[i-1,j+1]==1)

mine_count++;

if(mine[i,j+1]==1)

mine_count++;

amount[i,j]=mine_count;

mine_count=0;

}

if(j-1<0&&i+1>n-1)//左下角

{

if(mine[i-1,j]==1)

mine_count++;

if(mine[i-1,j+1]==1)

mine_count++;

if(mine[i,j+1]==1)

mine_count++;

amount[i,j]=mine_count;

mine_count=0;

}

if(j-1<0&&i-1>=0&&i+1<=n-1)//左边

{

if(mine[i-1,j]==1)

mine_count++;

if(mine[i-1,j+1]==1)

mine_count++;

if(mine[i,j+1]==1)

mine_count++;

if(mine[i+1,j+1]==1)

mine_count++;

if(mine[i+1,j]==1)

mine_count++;

amount[i,j]=mine_count;

mine_count=0;

}

}

else

{

if(mine[i-1,j-1]==1)

mine_count++;

if(mine[i-1,j+1]==1)

mine_count++;

if(mine[i+1,j-1]==1)

mine_count++;

if(mine[i+1,j+1]==1)

mine_count++;

if(mine[i-1,j]==1)

mine_count++;

if(mine[i+1,j]==1)

mine_count++;

if(mine[i,j-1]==1)

mine_count++;

if(mine[i,j+1]==1)

mine_count++;

amount[i,j]=mine_count;

mine_count=0;

}

}

else

amount[i,j]=-1;

}

}

//扫雷布局,灰色为判断区域

for(inti=0;i

{

for(intj=0;j

{

Console.BackgroundColor=ConsoleColor.Gray;//判断区域

Console.Write("");//空格代表

Console.BackgroundColor=ConsoleColor.Black;//返回系统默认颜色

Console.Write("");//将判断区域隔开

}

Console.WriteLine("\n");//两次换行

}

Console.CursorLeft=0;//将光标定位到第0列

Console.CursorTop=1;//将光标定位到第1行,因为用户输入占了一行

intx=0;//数组横坐标,就是第几列

inty=0;//数组纵坐标,就是第几行

while(true)

{

intmark_count=0;//标记雷的数量

intremainder=0;//剩余的数量

for(inti=0;i

{

for(intj=0;j

{

if(record[i,j]==-2)

remainder++;//

if(record[i,j]==-1)

mark_count++;

}

}

if(remainder==0&&mark_count==mc)

{

Console.Clear();

Console.WriteLine("YouWin");

break;

}

ConsoleKeyck=Console.ReadKey(true).Key;//获取用户按键

if(ck==ConsoleKey.DownArrow)//向下键

{

if(Console.CursorTop==2*n-1)//判断是否会超出雷区范围

{

Console.CursorTop=1;

y=0;

}

else

{

Console.CursorTop+=2;

y++;

}

}

if(ck==ConsoleKey.UpArrow)//向上键

{

if(Console.CursorTop==1)//判断是否会超出雷区范围

{

Console.CursorTop=2*n-1;

y=n-1;//数组的值改变

}

else

{

Console.CursorTop-=2;

y--;

}

}

if(ck==ConsoleKey.LeftArrow)//向左键

{

if(Console.CursorLeft==0)

{

Console.CursorLeft=2*n-2;

x=n-1;

}

else

{

Console.CursorLeft-=2;

x--;//数组的值改变

}

}

if(ck==ConsoleKey.RightArrow)//向右键

{

if(Console.CursorLeft==2*n-2)

{

Console.CursorLeft=0;

x=0;

}

else

{

Console.CursorLeft+=2;

x++;

}

}

if(ck==ConsoleKey.M)//标记雷区

{

Console.Clear();//清屏重新打印

Console.WriteLine(n);

record[x,y]=-1;

for(inti=0;i

{

for(intj=0;j

{

if(record[j,i]!

=-2)//若满足当前的坐标值的话,就用红色背景标注

{

if(record[j,i]==-1)

{

Console.BackgroundColor=ConsoleColor.Red;

Console.Write("");

Console.BackgroundColor=ConsoleColor.Black;

Console.Write("");

}

if(record[j,i]!

=-1)

{

Console.BackgroundColor=ConsoleColor.Gray;

 

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

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

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

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