C#控制台实现扫雷程序.docx
- 文档编号:25475575
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:12
- 大小:33.19KB
C#控制台实现扫雷程序.docx
《C#控制台实现扫雷程序.docx》由会员分享,可在线阅读,更多相关《C#控制台实现扫雷程序.docx(12页珍藏版)》请在冰豆网上搜索。
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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 控制台 实现 扫雷 程序