萌新对C语言实现10*10扫雷的一些心得

本文是一位新手程序员分享的C语言实现10*10扫雷游戏的过程和心得,包括为何选择12*12的数组尺寸,如何避免数组越界,以及在编程过程中遇到的问题和解决方案。文章还提供了部分关键代码片段,并强调了使用两个不同字符数组的重要性。
摘要由CSDN通过智能技术生成

#该代码由本人亲测可以正常使用#

#由于小萌新是第一次编写扫雷程序,以及小萌新知识水平有限,会有很多不足之处,希望谅解#

#仅作于小萌新学习成长的记录,可能具有参考价值#

 

 

扫雷作为一款经典的Windows小游戏,从它诞生开始至今经久不衰,仍具有一定的娱乐价值,包括小萌新自己平常都有拿它娱乐

其原理在此就不多加赘述了。


先是各个模块的分块介绍,文章末会有完整的代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>

#define row 12	//为什么要将数组大小定义为12?--是为了防止数组越界 
#define col 12

char show[row][col]={0};//初始玩家地图 
char design[row][col]={0};//初始开发者地图 

将数组定义成12*12是为了防止数组越界,因为在计算(1,1)点周围的雷数时,如果它仅是10*10的数组,因为计算(1,1)点周围的8个格内是否有雷时,仅有3个格可用(即右,下和右下),就会产生数组越界的问题,并且在10*10数组操作时,数组下标是从0开始,会带来很大不方便(即输入的直观性),注意:定义的是两个字符数组!!!(小萌新曾经用一个整型二位数组来来标记扫雷格内的值,在统计一个格周围的雷数时,会导致(假设埋雷点赋值为1,在相加时会影响到其他格的计算))!!!


void creat()//将开发者地图和玩家地图 
{
	int i;
	int j;
	
	for(i=0;i<row;i++)
	{
		for(j=0;j<col;j++)
		{
			show[i][j]='*';
			design[i][j]='0';
		}
	}
}

show数组用于输出到屏幕上,即我们看见的*号界面,design数组用于我们开发者进行功能的验证


void printplayer()//打印玩家地图 
{
	int i,j;
	
	printf("0  ");
	
	for(i=1;i<row-1;i++)
		printf("%d ",i);
		
	printf("\n");
	
	for(i=1;i<row-2;i++)
		{
			printf("%d  ",i);
			for(j=1;j<col-1;j++)
				{
					printf("%c ",show[i][j]);
				}
			printf("\n");
		}
	printf("10 ");
	for(i=1;i<row-1;i++)
		{
			printf("%c ",show[10][i]);
		}
	printf("\n");
	
}

void printdesign()//打印开发者地图 
{
	int i = 0;
    int j = 0;
    printf("0  ");
    for (i=1; i<row-1;i++)
    {
        printf("%d ",i);
    }
    printf("\n");
    for (i=1; i<row-2;i++)
    {
        printf("%d  ", i);
        for (j=1;j<col-1;j++)
        {
            printf("%c ",design[i][j]);
        }
        printf("\n");
    }
    printf("10 ");
    for (i=1;i<row-1;i++)
    {
        printf("%c ", design[10][i]);
    }
    printf("\n");
}

打印两张地图,使他们对其(包括行标,列标)(为什么第十行要单独打印,因为10是一个二位数,一起打印可能会出现排版不整齐的情况)


void plant(int n)//随机埋雷 
{
	int x,y;
	int COUNT=n;
	
	while (COUNT)
	{
		x=rand()%10+1;
		y=rand()%10+1;
		
		if(design[x][y]=='0') 
			{
				design[x][y]='1';
				COUNT--;
			}
	}
	
}

rand()函数请与sand()一同使用,rand()%10+1 能产生1-10的随机数,传入的n是雷数,用COUNT来确定循环何时结束,即埋雷工作全部完成


int coun
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值