C语言+二维数组实现扫雷游戏(贴过来后无缩进尽请谅解,工程完成度:70%)

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define N 10

#define L 10

//打印随机雷的位置,测试代码方便看雷

void sl_print(constint a[L])

{

int i=0;

printf("地雷的随机位置为:");

for(i=0;i<L;i++)

{

printf("%02d ",a[i]);

}

printf("\n");

}

//绘制扫雷棋盘函数

void sl_show(constchar a[][N])

{

int i=0,j=0;

for(i=0;i<N;i++)

{

for(j=0;j<N;j++)

{

printf("%c ",a[i][j]);

}

printf("\n");

}

}

int main()

{

int LEI[L]={0};

int m=0,n=0,tmp=0,x=0,y=0;;

int i=0,j=0,num=0;

char k=‘\0‘;

char GAME[N][N]={0};

//time_t t;

//srand((unsigned)time(&t));

printf("玩法说明:///选择格子用#,标记雷用!,数字表示格子周围地雷的数量///\n");

srand((unsigned)time(NULL));

//对二维数组进行初始化

for(i=0;i<N;i++)

{

for(j=0;j<N;j++)

{

GAME[i][j]=‘-‘;

}

}

//产生L个雷,并用数组记录它们在二维数组中的位置

for(i=0;i<L;i++)

{

//LEI[i]=rand()%N*10+rand()%N;

LEI[i]=rand()%100;

//查看产生的雷的位置是否有重复

if(i>0)

{

for(j=0;j<i;j++)

{

while(LEI[i]==LEI[j])

{

//LEI[i]=rand()%N*10+rand()%N;

LEI[i]=rand()%100;

}

}

}

}

sl_print(LEI);

printf("打印游戏初始状态:\n");

sl_show(GAME);

//游戏主循环

while(1)

{

printf("请输入格子的坐标及标注方式(例如1 3或者1 3回车):");

scanf("%d%d",&m,&n);

setbuf(stdin,NULL);

printf("请输入操作方式#或者!:");

scanf("%c",&k);

//对选的格子周围的地雷的计数器进行清0

tmp=0;

//您输入的字符,测试代码

printf("您输入的操作行为是:%d%d%c\n",m,n,k);

if(k==‘#‘)

{

for(i=0;i<L;i++)

{

if(LEI[i]==m*10+n)

{

//游戏失败

printf("\nGAME OVER!YOU LOST!\n\n");

//把最后的结果中地雷用*标识出来

for(j=0;j<L;j++)

{

m=LEI[j]/10%10;

n=LEI[j]%10;

GAME[m][n]=‘*‘;

}

printf("扫雷棋盘的实际情况是:\n");

sl_show(GAME);

sl_print(LEI);

return0;

}

}

}

//计算选择的格子周围有多少雷,棋盘中间的部分

if(m<=N-2 && m>=1 && n<=N-2
&& n>=1)

{

for(i=0;i<L;i++)

{

for(x=m-1;x<=m+1;x++)

{

for(y=n-1;y<=n+1;y++)

{

if(x==m && y==n)

{

continue;

}

if(LEI[i]==x*10+y)

{

tmp++;

}

}

}

}

//这里把单个数字转换为字符

GAME[m][n]=tmp+‘0‘;

//棋盘的四条边

}elseif(m==0 && n!=0
&& n!=N-1)

{

for(i=0;i<L;i++)

{

for(x=m;x<=m+1;x++)

{

for(y=n-1;y<=n+1;y++)

{

if(x==m && y==n)

{

continue;

}

if(LEI[i]==x*10+y)

{

tmp++;

}

}

}

}

GAME[m][n]=tmp+‘0‘;

}elseif(m==N-1 && n!=0
&& n!=N-1)

{

for(i=0;i<L;i++)

{

for(x=m-1;x<=m;x++)

{

for(y=n-1;y<=n+1;y++)

{

if(x==m && y==n)

{

continue;

}

if(LEI[i]==x*10+y)

{

tmp++;

}

}

}

}

GAME[m][n]=tmp+‘0‘;

}elseif(n==0 && m!=0
&& m!=N-1)

{

for(i=0;i<L;i++)

{

for(x=m-1;x<=m+1;x++)

{

for(y=n;y<=n+1;y++)

{

if(x==m && y==n)

{

continue;

}

if(LEI[i]==x*10+y)

{

tmp++;

}

}

}

}

GAME[m][n]=tmp+‘0‘;

}elseif(n==N-1 && m!=0
&& m!=N-1)

{

for(i=0;i<L;i++)

{

for(x=m-1;x<=m+1;x++)

{

for(y=n-1;y<=n;y++)

{

if(x==m && y==n)

{

continue;

}

if(LEI[i]==x*10+y)

{

tmp++;

}

}

}

}

GAME[m][n]=tmp+‘0‘;

//棋盘的四个角

}elseif(m==0 && n==0)

{

for(i=0;i<L;i++)

{

for(x=m;x<=m+1;x++)

{

for(y=n;y<=n+1;y++)

{

if(x==m && y==n)

{

continue;

}

if(LEI[i]==x*10+y)

{

tmp++;

}

}

}

}

GAME[m][n]=tmp+‘0‘;

}elseif(m==N-1 && n==0)

{

for(i=0;i<L;i++)

{

for(x=m-1;x<=m;x++)

{

for(y=n;y<=n+1;y++)

{

if(x==m && y==n)

{

continue;

}

if(LEI[i]==x*10+y)

{

tmp++;

}

}

}

}

GAME[m][n]=tmp+‘0‘;

}elseif(m==N-1 && n==N-1)

{

for(i=0;i<L;i++)

{

for(x=m-1;x<=m;x++)

{

for(y=n-1;y<=n;y++)

{

if(x==m && y==n)

{

continue;

}

if(LEI[i]==x*10+y)

{

tmp++;

}

}

}

}

GAME[m][n]=tmp+‘0‘;

}elseif(m==0 && n==N-1)

{

for(i=0;i<L;i++)

{

for(x=m;x<=m+1;x++)

{

for(y=n-1;y<=n;y++)

{

if(x==m && y==n)

{

continue;

}

if(LEI[i]==x*10+y)

{

tmp++;

}

}

}

}

GAME[m][n]=tmp+‘0‘;

}

//当无雷时则显示用户标识的#或者!

if(tmp==0)

{

GAME[m][n]=k;

//这下边写扩展代码

}

//如果用户标识雷的位置确实是雷则进行一次计算,当计算达到L时则胜利

if(k==‘!‘)

{

for(i=0;i<L;i++)

{

if(LEI[i]==m*10+y)

{

num++;

}

}

}

if(num==L)

{

printf("\nYOU WIN!\n\n");

return1;

}

sl_show(GAME);

}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-28 17:41:36

C语言+二维数组实现扫雷游戏(贴过来后无缩进尽请谅解,工程完成度:70%)的相关文章

C语言二维数组实现扫雷游戏

#include<stdio.h> //使用二维数组实现 扫雷 int main() { char ui[8][8]={ '+','+','+','+','+','+','+','+', '+','+','+','+','+','+','+','+', '+','+','+','+','+','+','+','+', '+','+','+','+','+','+','+','+', '+','+','+','+','+','+','+','+', '+','+','+','+','+','+'

C语言二维数组作为函数的参数

前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: #include <cstdio> void print(int *a[3]) { printf("%d\n",a[0][0]); } int main() { int a[2][3] = {1,2,3,4,5,6}; print(a); return 0; } 编译程序时候,在第10行提示错误信息:|

C语言 二维数组与指针笔记

今天分析了C语言二维数组和指针的基本理解,感觉有点懵...代码记录一下,如果有大神临幸发现哪里有误,欢迎指正~~~ #include <stdio.h> #include <stdlib.h> #include <string.h> //void func(int p[][]) //这样写等同于void func(int **p) p++移动了四个字节,(*p)++移动了四个字节,不符合二维数组规律 //{ //} //列优先输出的函数(即竖着输出) void func

C语言--二维数组,字符串数组,多维数组

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { // int a[2][3]={ // {1,2,3}, // {4,5,6} // }; // int a[2][3]={1,2,3,4,5,6}; // //打印单个元素 // printf("%d",a[1][1]); // //元素没赋全,默认为0 // int b[2][3]={{1,2,3},{4}}; // /

c语言二维数组传递

c语言二维数组传递,目前我总结三种方法,以及纠正一个不能使用的方法 /********************************* * 方法1: 第一维的长度可以不指定 * * 但必须指定第二维的长度 * *********************************/ void fun(int a[][3], int n, int m) { int i, j; for (i = 0; i < n; i++) { for (j = 0; j < m; j++) printf(&quo

C语言二维数组

一 :二维数组 一维数组的每一个元素又是一个数组(数组的数组) int a[3][4],定义一个数组,有3个元素,a[0].a[1].a[2] a[0]  又是一个一维数组,有4个元素 二:二维数组的定义及注意 格式:数据类型   二维数组名[第一维的长度][第二维的长度] int arr[3][4]; 注意: 1)数组名不能和变量名重复 2)遵循标识符命名原则 3)数组的长度可以使用宏定义 4)数组的长度可以使用变量 int m,n; scanf("%d,%d",&m,&am

C语言 二维数组复制、清零及打印显示

#include <stdlib.h> #include <stdio.h> #include <string.h> //二维整型数组打印显示 void printarr2d(int (*a)[3],int row,int col) { int i,j; for(i=0; i<row; i++) { for(j=0; j<col; j++) { printf("%d ", a[i][j]); } printf("\n"

C语言二维数组作业

一.PTA实验作业 题目1:7-3 出生年 1. 本题PTA提交列表 2. 设计思路 1.声明一个函数different()用来计算一个年份的不同数字个数 2.定义y(y是来计算符合要求的年份的量),n(n为题目要求的不同数字个数),x(x用来存放起始年份),flag(flag是用来表示每个y值中的不同数字个数的量) 3.输入起始年份y和题目要求的n 4.x=y(存放起始年份) 5.do {flag计算y中不同数字个数:如果flag=n,符合题意,输出相应结果,并结束循环:如果不符合,y自增一}

C语言 二维数组(指针)动态分配和释放(转)

C 二维数组(指针)动态分配和释放 先明确下概念: 所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据.如果我们将总长128位的指令分别按照16位.32位.64位为单位进行编辑的话:旧的16位处理器,比如Intel 80286 CPU需要8个指令,32位的处理器需要4个指令,而64位处理器则只要两个指令,显然,在工作频率相同的情况下,64位处理器的处理速度会比16位.32位的更快.而且除了运算能力之外,与32位处理器相比,64位处理器