C#控制台实现扫雷程序

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

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

最终运行结果如图所示

使用说明

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

按Enter键”踩有无雷”

按M键标记有雷区域

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace test

{

class Program

{

static void Main(string[] args)

{

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

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

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

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

int mc = 0;

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n; j++)

{

record[i, j] = -2;

}

}

Random r = new Random();//随机布雷

for (int i1 = 0; i1 < n; i1++)

{

for (int j1 = 0; j1 < n; j1++)

{

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

}

}

//遍历出雷的数量

for(int i2=0;i2

{

for (int j2 = 0; j2 < n; j2++)

{

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

mc++;

}

}

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

int mine_count = 0;//雷的数量

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n; 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 (int i = 0; i < n; i++)//行扫描

{

for (int j = 0; j < n; j++)//列扫描

{

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

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

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

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

}

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

}

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

Console.CursorTop = 1;//将光标定位到第1行,因为用户输入占了一行int x = 0;//数组横坐标,就是第几列

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

while (true)

{

int mark_count = 0;//标记雷的数量

int remainder = 0;//剩余的数量

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n; j++)

{

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

remainder++;//

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

mark_count++;

}

}

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

{

Console.Clear();

Console.WriteLine("You Win");

break;

}

ConsoleKey ck = 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 (int i = 0; i < n; i++)

{

for (int j = 0; j < n; 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;

Console.ForegroundColor = ConsoleColor.Red;

Console.Write(amount[j, i]);

Console.ForegroundColor = ConsoleColor.Gray;

Console.BackgroundColor = ConsoleColor.Black;

Console.Write(" ");

}

}

else//否则仍然按照红色标注

{

Console.BackgroundColor = ConsoleColor.Gray;

Console.Write(" ");

Console.BackgroundColor = ConsoleColor.Black;

Console.Write(" ");

}

}

Console.WriteLine("\n");

}//行循环

Console.CursorLeft = 2*x;

Console.CursorTop = 2*y+1;

}

if (ck == ConsoleKey.Enter)//判断光标所在位置是否有地雷

{

if (mine[x, y] == 1)

{

Console.Clear();

Console.WriteLine("You lose");

break;

}

else

{

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

Console.WriteLine(n);

record[x, y] = amount[x, y];

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n; 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.ForegroundColor = ConsoleColor.White;

Console.Write(amount[j, i]);

Console.ForegroundColor = ConsoleColor.Gray;

Console.Write(" ");

}

}

else//否则仍然按照红色标注

{

Console.BackgroundColor = ConsoleColor.Gray;

Console.Write(" ");

Console.BackgroundColor = ConsoleColor.Black;

Console.Write(" ");

}

}

Console.WriteLine("\n");

}//行循环

Console.CursorLeft = 2 * x;

Console.CursorTop = 2 * y + 1;

}

}

}

}//main

}

}

c语言课程设计——扫雷

扫雷设计 网101 陈超张艳 1.游戏规则 设计1010格区域,单击鼠标后,该格显示数字,则表示它周围8个空格内含有的地雷数,周围没有地雷的显示空白,则不能再单击了.如果是地雷,则游戏结束.如果判断是地雷,可以单击鼠标右键标出,显示红旗,要取消红旗标志则单击鼠标右键,当所有地雷都标出时,每个空格都处理过了,则胜利结束。 2.设计思路 扫雷程序主要用了一个10行10列的二维数组,数组的每个元素都是结构体类型,结构体中的num代表格内当前处于什么状态,值1表示有雷,值0表示已经变成空白格或者显示过数字,roundnum 统计每个格子周围有多少地雷,flag是鼠标右键的标志,如果flag为1表示格子显示红旗,这样鼠标左键点击在这个格子上无效。 在程序一开始统计好每个格子周围有多少地雷,然后当鼠标左键点击在没有地雷的格子上时进行两种判断,如果格子周围没有地雷,就在原来的格子位置显示空白格,然后用递归的方法同样判断周围的8个格子;如果格子周围有地雷,就在该空格显示具体的雷数。 在递归判断8个格子时,如果格子上有雷或者格子已经显示过雷数或者空白,以及格子上有红旗标志的话,就不再对格子进行任何判断。 具体函数流程图如下:

(1)main()主函数 定义使用到的常数,全局变量,函数原型说明。然后初始化图形系统,调用游戏控制函数,按任意键结束游戏,关闭图形系统,游戏结束。 (2)Control()游戏控制函数 调用函数GameBegain()显示游戏初始化界面,调用

GamePlay()函数具体实现游戏操作,该函数的返回值有可能有两种:一是正在玩中,提前结束游戏;一是玩完,要么失败,要么胜利。如果是前者,则重新开始游戏。如果是后者,则判断是否单击了笑脸,是则重新开始,否则结束程序。 (3)GameBegin()画初始界面 这个函数完成初始界面的设计以及随机生成地雷。初始界面的主要工作是确定图的位置和方格显示的位置。外边框的左上角为(190,60),右上角坐标为(390,290),显示笑脸和地雷数的区域为(190,60)~(390,90),每个方格的宽度和高度均为16. (4)DrawSmile()画笑脸 利用画椭圆的函数fillellipse()和bar()画笑脸,设置好填充模式。 (5)DrawEmpty()两种格子的显示 函数的参数为四个,确定格子的坐标i和j模式,颜色。格子有两种:一是可以单击的格子;一是已经显示空白的格子,比前一种格子小,通过参数模式和颜色来控制。 (6)DrawFlag()显示红旗 用单击鼠标右键表示起地雷,起雷后显示一个小红旗 (7)GamePlay()游戏控制 游戏过程主要是对鼠标按键的处理,集体算法实现如下: a.如果单击了鼠标左键则判断 如果单击了笑脸,则游戏重新开始‘

扫雷教程

大家好。许多人现在都在玩一些刺激的网游,但许多人忽视了许多别的游戏。 现在,我开始教大家玩扫雷。
扫雷软件可以在 Windows 的“开始”—“程序”—“附件”—“游戏”中找到。 推荐大家使用 Minesweeper Clone 0.97,好处多多哦
可以从这里下载:https://www.360docs.net/doc/735906270.html,/Download/Minesweeper_Clone_0.97.exe
进入扫雷界面,会出现一大片方格:
先介绍一下操作吧: 鼠标左键可以打开方格 鼠标右键可以把方格标记为地雷 打开的方格里的数字表示本方格周围有几颗地雷。 如果一个方格周围已经标出的地雷数量和方格内数字相同,在方格上同时按左键和右键可以打开其余方格。
如果不幸踩雷,可以按
按钮重新来过,不想用鼠标的话可以按键盘上的 F2 键。
操作介绍完了,现在我们实际演练一盘,就先初级的开始吧:
咱先从这个阵学习先从简单学起

请看左下角的
如果会玩的一看当然就知道左下角的那个不是雷 为什么会知道呢? 这里有一个规律 当方格子里有 1 时就表示它周围的 8 个格子里肯定有一个是雷 从这个分析
看中间的 1 它周围有 5 个空 就表示有 5 个格子不是雷 看它左面的和下面的 1 也表示这两个不是雷 那么现在咱可以知道中间的 1 周围 8 个格子里有 7 个不是雷 下面咱就可以知道左下角的肯定是雷
你猜对了 咱知道这个了
在看最左面中间的那个 1 再看周围 8 个格子里 可是他周围不是 8 个 所以就考虑剩下的 6 个 还继续看那个 1 它周围有一个小红旗 表示已经有一个雷了 就表示它的周围已经有一个雷了所以剩下的几个格子都不是雷 咱就可以得到
你已经学会了最简单的部分了 下面咱再分析左上的那部分

C语言实现扫雷游戏

C语言实现扫雷游戏运行环境:Windows系统,V isualC++6.0 _head.h #ifndef _HEAD_H_ #define _HEAD_H_ #define XX 40 #define YY 20 typedef struct { char boom; char flag; //默认为0,1代表标记为雷,2代表翻牌 char recursionMark; //默认为0,1代表已经被递归} Node; extern Node node[YY][XX]; void randomBoom(int width, int high, int num); void gotoxy(int x, int y); int clear_boom(int width, int high, int y, int x); void myPrint(int i); #endif clear_boom.c #include #include #include #include"_head.h" /* 功能:递归翻牌 参数:int width, high 雷区的宽度和高度 int y, x 要翻牌的坐标 返回值:int 返回 1 代表输了 */ int clear_boom(int width, int high, int y, int x) { node[y][x].recursionMark=1; node[y][x].flag=2; //本方格标记为翻牌 gotoxy(2*x, y);

if(node[y][x].boom=='*')//如果是雷就输出字符'*',否则输出数字 printf("%-2c\b\b", node[y][x].boom); else myPrint(node[y][x].boom);//调用输出双字符函数 if(node[y][x].boom=='*') return 1; //返回1代表输了 else if(node[y][x].boom==0) //说明周围8个方向的方格没有雷,在8个方向上做上翻牌标记 { if(y-1>=0) //在该方格上面的雷区做翻牌标记 { if(x-1>=0 && node[y-1][x-1].flag==0) //标记左上方 { node[y-1][x-1].flag=2; //2代表翻牌,1代表地雷 gotoxy(2*(x-1), y-1); //跳转到方格处并翻牌 if(node[y-1][x-1].boom=='*')//如果是雷就输出字符'*',否则输出数字 printf("%-2c\b\b", node[y-1][x-1].boom); else myPrint(node[y-1][x-1].boom);//调用输出双字符函数 if(node[y-1][x-1].boom==0 && node[y-1][x-1].recursionMark==0)//递归调用 clear_boom(width, high, y-1, x-1); } if(node[y-1][x].flag==0) { node[y-1][x].flag=2; //标记正上方 gotoxy(2*x, y-1); //跳转到方格处并翻牌 if(node[y-1][x].boom=='*')//如果是雷就输出字符'*',否则输出数字 printf("%-2c\b\b", node[y-1][x].boom); else myPrint(node[y-1][x].boom);//调用输出双字符函数 if(node[y-1][x].boom==0 && node[y-1][x].recursionMark==0)//递归调用 clear_boom(width, high, y-1, x); } if(x+1

简版扫雷代码

#include #include #include #define MAX 100 //最大范围为100x100 struct place{ int show;//显示状态(-1为不显示,0为显示@,1为显示status ) char status;//身份(数字为周围8位地雷数,*为地雷,#号为边界标志) }; /*显示函数*/ void print_all(place mine_area[][MAX+2]){ for(int i=0;i<=MAX+1;i++){ for(int j=0;j<=MAX+1;j++){ if(mine_area[i][j].status<=8) printf("%d",mine_area[i][j].status+48); else if(mine_area[i][j].status=='#') printf("#"); else if(mine_area[i][j].status=='*') printf("*"); printf(":%d ",mine_area[i][j].show); } printf("\n"); } } void print_all(place mine_area[][MAX+2],int length,int width){ for(int i=0;i

C程序课程设计报告(扫雷游戏)

C程序设计 扫雷游戏 一、设计题目:扫雷游戏 二、设计目的 1.使学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。 2.培养学生综合运用所学知识独立完成课题的能力。 3.培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。 4.提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基

本素质。 5.培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。 6.对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。 三、设计要求 1.汪洋和孔维亮组成设计小组。小组成员分工协作完成。要求每个成员有自己相对独立的模块,同时要了解其他组员完成的内容。 2.查阅相关资料,自学具体课题中涉及到的新知识。 3.采用结构化、模块化程序设计方法,功能要完善,界面要美观。 4.按要求写出课程设计报告,并于设计结束后1周内提交。 一概述 1)掌握数组指针的概念及其应用 2)培养团结合作精神 2. 课程设计的要求 要求我们有扎实的C语言知识,以及良好的编程习惯,能够熟练的应用循环,有毅力,还要求我们有较强的合作精神,善于总结。同时还要求我们自学C语言作图部分知识。在必要时还要上网查相关资料。 3.课程设计的主要设计思想 扫雷游戏主要用了一个10行10列的二维数组,刚开始利用random随机布雷。 每一个程序最主要的是算法。扫雷游戏算法的重点是一开始统计好每个格子周围有多少雷,当鼠标左键点在格子上时做出判断,如果周围8个格子有雷则显示出雷数,如果没有雷则显示空白格(在四个角的格子显示周围3个格子,其它边缘的格子显示周围5个的状态),我们在主函数中用两个for语句来判断周围雷数。我们还加了鼠标处理函数。 如果格子上有雷则调用函FailExitGame(),显示“Fail!”,游戏结束。若所有的雷都标出,且所有的格子都处理过,则调用函数ExitGame(),显示“OK,Good!”,游戏结束。游戏结束后,按任意键出去。

C语言扫雷源代码

C语言扫雷源代码.txt如果背叛是一种勇气,那么接受背叛则需要更大的勇气。爱情是块砖, 婚姻是座山。砖不在多,有一块就灵;山不在高,守一生就行。 #include #include #include #include /*鼠标信息宏定义*/ #define WAITING 0xff00 #define LEFTPRESS 0xff01 #define LEFTCLICK 0xff10 #define LEFTDRAG 0xff19 #define RIGHTPRESS 0xff02 #define RIGHTCLICK 0xff20 #define RIGHTDRAG 0xff2a #define MIDDLEPRESS 0xff04 #define MIDDLECLICK 0xff40 #define MIDDLEDRAG 0xff4c #define MOUSEMOVE 0xff08 struct { int num;/*格子当前处于什么状态,1有雷,0已经显示过数字或者空白格子*/ int roundnum;/*统计格子周围有多少雷*/ int flag;/*右键按下显示红旗的标志,0没有红旗标志,1有红旗标志*/ }Mine[10][10]; int gameAGAIN=0;/*是否重来的变量*/ int gamePLAY=0;/*是否是第一次玩游戏的标志*/ int mineNUM;/*统计处理过的格子数*/ char randmineNUM[3];/*显示数字的字符串*/ int Keystate; int MouseExist; int MouseButton; int MouseX; int MouseY; int up[16][16],down[16][16],mouse_draw[16][16],pixel_save[16][16]; void MouseMath()/*计算鼠标的样子*/ {int i,j,jj,k; long UpNum[16]={ 0x3fff,0x1fff,0x0fff,0x07ff, 0x03ff,0x01ff,0x00ff,0x007f, 0x003f,0x00ff,0x01ff,0x10ff,

扫雷游戏程序设计课程设计报告

课 程 设 计 扫雷游戏程序设计 2013 年 11 月 5 日 设计题目 学 号专业班级 学生姓名 指导教师

合肥工业大学课程设计任务书

一. 设计任务 (1)鼠标左击排雷,右击插小旗,打问号; (2)方格里面的数字表示方格周围的雷数; (3)能够显示未标记雷数和游戏用时; (4)雷区上面的小脸可以变化,显示微笑,惊讶,痛苦,胜利。在任何情况下单击小脸可以重新开始游戏; (5)可进行游戏难度的设定:包括预定义的难度级别(雷区行数,列数和雷数),和自行定义雷区行数,列数和雷数的功能; (6)排行榜功能,扫雷成功时候,根据游戏用时更新排行榜。 二. 具体设计 (一)、设计思路 扫雷游戏是很经典也很有趣的一款游戏,这次的游戏程序设计要求设计出功能与原游戏相近的一款游戏,首先定义变量和类要画出游戏方格以及位图,设计游戏等级,等级越高方格越多雷数也越多;然后设置随机布雷以保证每次重新开始游戏都有不同的雷区地图;另外定义鼠标左击扫雷,左击标记周围埋雷情况,右击奇数次排雷偶数次取消上次排雷,以及扫雷第一次左击不能扫到雷。

(二)、设计表示: 1、鼠标左击排雷,右击插小旗,打问号; 2、方格里面的数字表示方格周围的雷数; 3、能够显示未标记雷数和游戏用时; 4、雷区上面的小脸可以变化,显示微笑,惊讶,痛苦,胜利。在任何情况下单击小脸可以重新开始游戏; 5、可进行游戏难度的设定:包括预定义的难度级别(雷区行数,列数和雷数); 6、任何时候开始游戏第一次点击不会扫到雷。 由于时间等原因未完成功能: 排行榜和自行定义雷区行数,列数和雷数功能。 (四)、详细设计 1、添加位图 前十二幅是在雷区的,后四幅是按钮。为了便于加载,必须各自保证其连续性。 分别表示游戏进行的状态、结果胜利或触雷。

c语言实现扫雷程序模拟

本人写的扫雷程序,由于时间紧迫,写的比较粗糙,但经过c编译可运行,下面是源代码: /*name:kaituozhe001saolei1125.cpp*/ #include #include #include #define N 9 int mine[N][N],game[N][N]; int row=0,col=0,a,b; void main() { void putmine(int n1); int expand(int row,int col); int Remain(); void myprintf1(); void myprintf2(); int aroundmine(int row,int col); /* 提示说明 */ printf(" -------------------------------------------------------------------\n* 您接下来要玩一个%d*%d的扫雷游戏。 *\n* 请按提示操作(否则会出意外的), *\n* 在这个游戏中“*”代表地雷,“#”代表未打开的盒子。 *\n* 当您将全部非雷盒子打开后,您就赢了! *\n* 谢谢参与游 戏!》》开拓者制作bo《《 *\n -------------------------------------------------------------------",N,N); int n1,i=0,j=0;

/*初始化雷区*/ for(i=0;i> ",N,N,N*N); scanf("%d",&n1); printf("\n下面是所布雷阵>> \n"); putmine(n1); myprintf1(); for(i=0;i> \n"); myprintf1(); while(Remain()!=n1) { printf("\n请输入扫雷坐标,以“,”分开>> "); scanf("%d,%d",&row,&col); for(i=0;i

能力拓展训练-----扫雷游戏

课程设计 题目扫雷游戏 学院计算机学院 专业软件工程 班级0803班 姓名徐泽前 指导教师 2010 年7 月15 日

扫雷游戏 1规则描述 游戏开始后,系统会在雷区的小方块中随机布下若干个地雷。部署完毕后,系统会在其他非雷方块中填充一些数字。某一个具体数字表示与其紧邻的8个方块中雷方块的数量,玩家可以根据这些信息去半段时候可以打开某些方块,并把认为是地雷的方块打上标记,当玩家吧所有地雷找出来后,其余非雷方块区域都已打开,这时游戏结束。在游戏过程中一旦错误的打开了雷方块则立即失败,游戏结束;当玩家标识的地雷数量超过程序设定,虽然打开了全部其余方块,游戏仍不会结束。 2软件环境 Windows XP Microsoft Visual C++ 3功能需求分析 游戏需要提供两个计数器,一个用来显示用户扫雷所花费的时间,以秒为单位;一个用来显示当前还剩多少个雷方块。另外提供一个按钮,用来开始游戏。在游戏区域方面,按功能将它分成两大区域:雷区和提示区。提示区除了上面提供的计数器外,还包括两个按钮,一个用来开始游戏,一个用来显示版本信息。游戏过程中,当玩家用鼠标点击相应的方块,程序就会做出相应的鼠标响应时间,程序处理这些鼠标时间的过程中会伴随着GDI绘图,而众多鼠标事件的处理,都是围绕着实现扫雷程序的算法而衍生的。

4程序实现 4.1界面设计 图1 界面设计图 4.2具体实现 4.21布雷 随机获取一个状态为非雷的点,将它的属性标识为雷,重复这样的工作,直到布下足够的累为止,流程图如下 在CMineWind类中添加游戏的布雷模块的处理函数,该函数的具体实现如下所示:

c语言扫雷程序代码

#include #include #include #include #define Map_list 6 #define Map_line 6 void map_printf(int x,int y,int b[][Map_list]) { int i,j; for(i=0;i0&&b[i][j]<9) printf(" %d",b[i][j]); } printf("\n"); } } void Move(int x,int y) { HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE); COORD pos= {x, y}; SetConsoleCursorPosition(hOut, pos); } int kb_cursor() { int a=getch(); char input[2]; if(a<0) { input[0]=a; input[1]=getch(); } else {

input[1]=a; } return input[1]; } void HideCursor() { CONSOLE_CURSOR_INFO cursor_info = {1, 0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); } void printf_0(int b[][Map_list],int x,int y) { int i,j,n; if(x==0&&y==0) { n=0; for(i=0;i<2;i++) for(j=0;j<2;j++) if(b[x+i][y+j]==11) n++; if(n==0) { for(i=0;i<2;i++) for(j=0;j<2;j++) { if(b[x+i][x+j]==10) { b[x+i][y+j]=0; printf_0(b,x+i,y+j); } } } else b[x][y]=n; } else if(x==0&&y0) { n=0; for(i=0;i<2;i++) for(j=-1;j<2;j++) if(b[x+i][y+j]==11) n++; if(n!=0) b[x][y]=n; else for(i=0;i<2;i++)

扫雷小游戏课程设计

西安科技大学 软件工程课程设计报告 题目:扫雷游戏开发 班级:计科0901班 学号: xxxxxxxxxxxx 姓名: xxxxxxx 电话:xxxxxxxxxxxxx

2012年7月 目录 1 绪论 (3) 1.1 选题目的及意义 (3) 1.2 系统概述 (3) 2 可行性研究报告 (4) 3 需求规格说明书 (5) 4 总体设计说明书 (6) 5详细设计说明书 (7) 6 系统实现 (16) 6.1 开发环境 (16) 6.2 关键技术 (16) 6.3 运行结果 (16) 7测试分析报告 (17) 8心得体会 (19) 参考文献

1.绪论 1.1选题目的及意义 随着现在生活节奏的加快,人们在工作学习之余需要一个轻松娱乐的放松环境。因此我编写此软件的目的,一方面作为初学者来了解java环境下的小程序开发,另一方面使用户能在娱乐休闲的同时拓展思维能力。扫雷是单人计算机游戏。游戏的用户界面由小方格组成的战场构成。当游戏开始时,计算机将固定的地雷数随机的放到战场的方格。此游戏还允许玩家指定战场中的地雷数。 参考Windows 操作系统提供的扫雷游戏,改进扫雷游戏程序,增加以下功能:在主界面中添加一个菜单栏,菜单栏中包括游戏和帮助两个菜单,其中游戏菜单中设置初级、中级、高级、自定义、声音、扫雷英雄榜这几个菜单项,帮助菜单中设置游戏规则和制作人员两个菜单项。 背景说明: a.软件名称:扫雷 b.用户:所有扫雷游戏爱好者 1.2 系统概述 1.2.1扫雷游戏的基本要求 Windows 2000/XP系统提供的扫雷游戏是一个很有趣的游戏。本章的课程设计使用Java语言编写一个与其类似的扫雷游戏。具体要求如下: (1) 扫雷游戏分为初级、中级和高级三个级别。单击游戏菜单可以选择“初级”、“中级”和“高级”。 (2) 选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击‘“开始”便启动计时器。 (3) 用户要揭开某个方块,可左键单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。 (4) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。 (5)当用户点中雷时,将有“你输了”的提示出现,胜利时,将有“你赢了”的提示出现。 1.2.2 需实现的主要功能 用户可以自定义级别并且可以任意输入雷数; 具有计时功能,即显示用户完成移动盘子所花费的时间。

扫雷游戏设计代码(VB完善版)

扫雷游戏VB设计实现最终界面如下:

显然只需完成三个窗体的设计即可,具体设计界面和代码如下: 一、主窗体(form10)设计界面:

主窗体(form10)的代码: Dim d(11, 11) As Integer Dim k As Integer Dim v(100) As Integer '定义全局变量' Private Sub Command1_Click(Index As Integer) Timer1.Enabled = True '当点击任意一个命令按钮时(即开始游戏),则启动计时器' i = Index \ 10 + 1 j = Index Mod 10 + 1 '将二维数组的元素与命令按钮一一对应' If d(i, j) = 1 Then '判断是否点到地雷' Timer1.Enabled = False '关闭计时器,游戏结束' For i = 1 To 10 For j = 1 To 10 n = 10 * (i - 1) m = j - 1 If d(i, j) = 1 Then

Command1.Item(m + n).Picture = LoadPicture(App.Path & "\2.jpg") '在按钮上显示地雷图片' End If Form1.Show '弹出子窗体1(判断输赢)' Next j Next i Else If v(Index) = Index + 1 Then '判断是否插上红旗或是问号图片' Command1.Item(Index).Picture = LoadPicture() '清除图片' Command1.Item(Index).Caption = f(i, j) '调用函数,显示周围地雷数' Command1.Item(Index).Enabled = False '将按钮设为不可用' Label7.Caption = Val(Label7.Caption) + 1 v(Index) = 0 End If h = s(i, j) '调用函数,显示周围的情况(边界)' For Y = 0 To 99 If v(Y) = Y + 1 Then Command1.Item(Y).Enabled = True '如果是按钮插上了红旗则将按钮设置为可用' End If Next Y End If

扫雷游戏教程技巧大全

扫雷游戏教程技巧大全 扫雷软件可以在Windows的“开始”—“程序”—“附件”—“游戏”中找到。进入扫雷界面,会出现一大片方格: 先介绍一下操作吧:鼠标左键可以打开方格,鼠标右键可以把方格标记为地雷,打开的方格里的数字表示本方格周围有几颗地雷。如果一个方格周围已经标出的地雷数量和方格内数字相同,在方格上同时按左键和右键可以打开其 余方格。如果不幸踩雷,可以按按钮重新来过,不想用鼠标的话可以按键盘 上的F2键。操作介绍完了,现在我们实际演练一盘,就先初级的开始吧: 咱先从这个阵学习先从简单学起,请看左下角的 如果会玩的一看当然就知道左下角的那个不是雷,为什么会知道呢?这里有一个规律当方格子里有 1 时就表示它周围的 8 个格子里肯定有一个是雷,从这个分析 看中间的 1 它周围有 5 个空就表示有 5 个格子不是雷,看它左面的和下,的 1 也表示这两个不是雷,那么现在咱可以知道中间的 1 周围 8 个格子里有 7 个不是雷,下面咱就可以知道左下角的肯定是雷

在看最左面中间的那个 1 再看周围 8 个格子里可是他周围不是 8 个所以就考虑剩下的 6 个 还继续看那个 1 它周围有一个小红旗表示已经有一个雷了,就表示它的周围已经有一个雷了所以剩下的几个格子都不是雷 咱就可以得到 你已经学会了最简单的部分了,下面咱再分析左上的那部分 先用我上面给你介绍的那种方法,把下面三个 1 上面的两个格子解出来 可以得到 这时你是不是有点迷惘不知道怎么点了?别着急咱继续分析,看到这块右面的下面的 2 了吗?,它就表示它的周围有 2 颗雷但咱已经分析出已经有一个是雷了,还有它周围还剩下 1 个未知的格子还有6个已知的格子,所以咱就可以判断出刚才那个雷的上面还是个雷,咱们就可以得到 再看左边的那个 2 这时它周围已经有两个雷了,所以咱就可以把剩下的三个格点开,咱就可以知道 这时 2 上面还是 2 并且它周围已经有两颗雷 我们就可以把这部分解出来

Java扫雷游戏源代码

import java.awt.BorderLayout; import java.awt.Container; import java.awt.Font; import java.awt.GridLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.Timer; public class ScanLei1 extends JFrame implements ActionListener{ private static final long serialVersionUID = 1L; private Container contentPane; private JButton btn; private JButton[] btns; private JLabel b1; private JLabel b2; private JLabel b3; private Timer timer; private int row=9; private int col=9; private int bon=10; private int[][] a; private int b; private int[] a1; private JPanel p,p1,p2,p3; public ScanLei1(String title){ super(title); contentPane=getContentPane(); setSize(297,377); this.setBounds(400, 100, 400, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); timer =new Timer(1000,(ActionListener) this); a = new int[row+2][col+2]; initGUI(); } public void initGUI(){ p3=new JPanel();

C++ 扫雷程序输出报告

程序输出报告 程序设计时使用环境----Win10 VS2015 1程序设计思路 模块化设计一个扫雷游戏。 要实现埋雷,计算一个格子周围雷数,打开雷位,显示雷区几个功能. 需要以下几个主要数据,判断雷位的雷是否存在,雷位周围的雷数,是否已经被打开,游戏是否结束,雷区大小,布雷量(本程序中非必须保存于类中数据) 2功能的具体实现 为了方便计算和理解先分出类 class OneMine { OneMine(); //雷位构造函数 void InitOneMine(); //初始化一个雷位 bool IsMine; //是否是雷 bool Opened; //是否已经打开 short AroundMines; //周边的雷数 friendclass Operation; friendclass Mines; }; class Mines//创建雷区类 { bool GameOver; //扫雷是否结束 short Rows; //雷区的行数 short Cols; //雷区的列数 short MinesCount; //布设雷的数量 OneMine *pos[50][50]; //存放雷对象的数组指针 public: Mines(); //雷区类构造函数 ~Mines(); //析构函数 friendclass Operation; };

class Operation :public Mines//操作类 { public: void ReInitMine(short row, short col, short mines); //重新初始化雷区 void LayOneMines(); //布置一个地雷 void CalculateAroundMine(int x, int y); //计算每个雷周边的雷数 void ShowOneMine(int x,int y); //触雷时的执行函数 void ShowMine(); //显示未触雷时的雷区情况void ShowAllMine(); //触雷时的触发函数 void OpenOneMine(int x, int y); //打开一个雷位 };

C语言经典题目“扫雷”代码

扫雷(选做) 输入 输入中将包括一系列的地图,每个地图的第一行有两个整数n 和m(0 #define N 110 void main() { char a[N][N]; int n,m,t,i,j,k=1; static int b[N][N]; for(n=m=1; n!=0 && m!=0; ) { for(i=0;i0;t--) scanf("%s",a[n-t]); for(i=0;i

{ if(a[i][j]=='*') { b[i][j]++;b[i+1][j]++;b[i+2][j]++;b[i][j+1]++;b[i+2][j+1]++;b[i][j+2]++;b[i+1][j+2]++;b[i+2][j+2]+ +; } } } if(n!=0&&k>1) {printf("\nField #%d:\n",k); k++;} else if(n!=0) {printf("Field #%d:\n",k); k++;} for(i=0;i

扫雷-程序设计报告

Visual Basic课程设计报告 名称:扫雷难度:四星 设计人:田林 指导老师:张小兵 班级: 学号: 时间:2012.3 南京理工大学能源与动力工程学院 知识点:(1)控件数组;(2)绘图;(3)菜单;(4)文本文件的读写;(5)多

模块设计;(6)资源文件的使用。 一、功能简介: (1)启动程序后,进入初始界面(form1),游戏共有3种预定义的难度级别,为初级(9行9列10个雷),中级(16行16列40个雷),高级(16 行30列99个雷),还有“自定义”命令,可以自行定义雷区行数, 列数和雷数; (2)雷区上面的小脸可以变化,显示微笑,惊讶,痛苦,胜利。在任何情况下单击小脸可以重新开始游戏; (3)鼠标左击排雷,右击插小旗,打问号; (4)方格里面的数字表示方格周围的雷数; (5)扫雷成功时候,调用文件看有没有打破该级别的记录。 二、课程设计的详细设计 (1).绘制方格,使用如下程序: Dim picf As New StdPicture 'picf保存图片对象 form1.pic2.ScaleMode = 3 '以像素为单位 form1.pic2.Cls '图片框清空 Set picf = LoadPicture(App.Path & "1.bmp") For i = 0 To m - 1 For j = 0 To n - 1 form1.pic2.PaintPicture picf, j * 16, i * 16 '加载图片 Next Next (2).放雷的方法:定义一个二维数组aarMine,行数为inthang,列数为intlie,雷的个数intlei,使用下面的程序来解决: Randomize ReDim arrMine(inthang, intlie) Do While int3 < intlei '雷数的随机分布 col = Int(Rnd * intlie) ln = Int(Rnd * inthang) If arrMine(ln, col) = False Then arrMine(ln, col) = True int3 = int3 + 1 End If Loop (3).使用三个pictureclip控件来管理图片: form1.PictureClip1.Picture = LoadPicture(App.Path & "face.bmp") form1.PictureClip1.Rows = 1 form1.PictureClip1.Cols = 5 form1.PictureClip2.Picture = LoadPicture(App.Path & "number.bmp") form1.PictureClip2.Rows = 1 form1.PictureClip2.Cols = 12 form1.PictureClip3.Picture = LoadPicture(App.Path & "mine.bmp")

VB做扫雷游戏

编号 南京航空航天大学 毕业论文 题目用VB实现一个简单的游戏 学生姓名 学号 学院 专业 班级 指导教师

南京航空航天大学 本科毕业设计(论文)诚信承诺书本人郑重声明:所呈交的毕业设计(论文)(题目:)是本人在导师的指导下独立进行研究所取得的成果。尽本人所知,除了毕业设计(论文)中特别加以标注引用的内容外,本毕业设计(论文)不包含任何其他个人或集体已经发表或撰写的成果作品。 作者签名:年月日 (学号):

用VB实现一个简单的游戏 摘要 当前,随着计算机应用及网络的的深入普及,越来越多的政府部门、厂矿企业、学校等单位及个人都拥有了自己的计算机,计算机不仅在工作方面给人们以很大的帮助,还给人们带来了多种的娱乐享受.,操作系统自带的游戏也起到了很大的娱乐作用,而且它的开发成本小,所以小游戏的开发在这种形势下就应运而生,它的开发主要采用VC++ ,VB 等编程语言. 本设计采用VB编写,VB一直以来被认为有以下优缺点:优点是上手快、开发效率高;缺点是能力有限,运行效率低.这正是有些软件把VB做为首选语言,而有些软件肯定不会用VB做的原因.而很多VC,DELPHI的程序员都认为VB里搞开发不自由.的确,简单和功能强大这两者本身就是一对矛盾. 扫雷游戏是操作系统中的一个主要的益智类游戏. 用户对鼠标进行操作,单击鼠标左键为踩雷,单击鼠标左键在标记,疑问,空白三种状态中循环,同时单击鼠标左右键为踩单击点在内的周围九格内所有没有标记为已标记的所有格子.同时程序从你单击第一次时开始计时,到胜利或引爆地雷终结.结束后单击开始按钮重新开始游戏.这款游戏实现了开发人类大脑思维的目的. 关键词VB,扫雷游戏

相关文档
最新文档