纯C编写简单扫雷游戏

扫雷游戏从windows系统诞生,就出现在了我们的电脑中。  其实微软公司开发扫雷游戏的目的是帮助用户适应鼠标的使用。

同一类游戏还有蜘蛛纸牌。小学时上微机课,玩扫雷和蜘蛛纸牌都能玩一节课。  不禁感叹新事物带给人的新鲜感。

 突发奇想,既然是编程语言,那么C语言是不是也可以来开发一款扫雷游戏。  在了解扫雷规则后,着手开始编写程序。

虽然有些潦草,但是仿佛又回到了小学时的机房,开心依旧。

扫雷规则大致是,找出所有的地雷,并且不能踩到雷。  显示的数字是周围8个格子内的地雷数,玩家可以根据提示来避开地雷。

大致逻辑为:①布雷   ②找雷  ③判断雷是否被全部找到

定义两个二维数组,mine是雷区的数组。show是给玩家显示的数组。

若是只定义一个数组,雷区可以让玩家看到,这样子的扫雷可能会毁童年!!

为了是编写是方便一点,自己定义一个头文件,里面包含了所有所要调用的函数,以及宏。

#ifndef ___GAME_H___
#define ___GAME_H___
#include <stdio.h>
#include <windows.h>
#include <time.h>
#pragma warning(disable: 4996)
#define ROW 10
#define COL 10
void menu();
int findMine(char show[ROW+2][COL+2], char mine[ROW+2][COL + 2], int row, int col, int x, int y); //找雷
void setMine(char mine[ROW][COL ], int row, int col);     //布雷
void display(char show[ROW][COL ], int row, int col);     
void game();

#endif //!___GAME H___

main函数,用来让玩家选择进入游戏还是退出。

#include "game.h"
void menu()
{
	printf("##################################\n");
	printf("###########1.Play#################\n");
	printf("###########2.Exit#################\n");
}
int main()
{
	int c = 0;
	menu();
	do{
		printf("Please Choose Play Or Exit\n");
	    scanf("%d", &c);
		switch (c)
		{
		case 1:
			game();     //游戏函数
			break;
		case 2:
			exit(0);
		default:
			printf("Select Error!!\n ");
		}
	} while (1);    //使用循环,玩家输入1和2以外的数字,则提示输入错误。
	system("pause");
	return 0;
}

如图所示,提示玩家选择。



游戏函数,里面包含了布雷,找雷,以及判断是否胜利。

#include "game.h"
void display(char show[ROW+2][COL+2], int row, int col)
{
	int i, j;
	for (i = 1; i <= row-1; i++)
	{       
		printf("   %d", i);
		for (j = 1; j <= col-1; j++)
		{   
			printf("| %c ", show[i][j]);
		}
		printf("\n");
	}
}

游戏的主界面,有些马赛克画质。



布雷函数:

void setMine(char mine[ROW+2][COL+2], int row, int col)
{
	srand((unsigned long)time(NULL));   //随机数种子
	int n, k,i;
	i = 10;
	do{
		n = rand() % 10;   //使地雷必须在数组内
	    k = rand() % 10;
		if (mine[n][k] == '*')   //如果数组元素不是地雷,则布雷,防止重复
		{
			mine[n][k] = 'o';
			i--;
		}
	 } while (i>0);
}

  找雷函数:

int findMine( char mine[ROW+2][COL+2] , int x, int y)   //根据玩家输入的位置,显示周围地雷的数量。
{
	int count=0 ;
	if (mine[x - 1][y - 1] == 'o')   
	{
		count ++;
	}
	if (mine[x - 1][y] == 'o')
	{
		count ++;
	}
	if (mine[x][y - 1] == 'o')
	{
		count++;
	}
	if (mine[x + 1][y] == 'o')
	{
		count++;
	}
	if (mine[x][y + 1] == 'o')
	{
		count++;
	}
	if (mine[x + 1][y + 1] == 'o')
	{
		count++;
	}
	if (mine[x + 1][y - 1] == 'o')
	{
		count++;
	}
	if (mine[x - 1][y + 1] == 'o')
	{
		count++;
	}
	
	return count;
}
void game()
{
     	char mine[ROW+2][COL+2];
	    char show[ROW+2][COL+2];
	    memset(mine, '*', (ROW+2)*(COL+2));   //对数组整体进行初始化
		memset(show, '*', (ROW+2)*(COL+2));
		setMine(mine, ROW, COL);   //布雷操作
		do{
			display(show, ROW, COL);   
			int x, y;
			printf("Please Enter <x,y>\n");  //玩家开始找雷
			scanf("%d%d", &x, &y);
			system("cls");
			if ((x >= 0) && (x <10) && (y>=0) && (y <10))
			{   
				if (mine[x][y] == '*')
				{
					int win=0;
					int count = findMine( mine, x, y);
					show[x][y] = count+'0';
					win++;
					if (win == ROW*COL-10)   //玩家将不是雷的地方全部找到,则说明雷区也已经找到,胜利了!
					{
						printf("Good.You Win!\n");
						
					}
				}
				else if (mine[x][y] == 'o')   //踩到雷,则失败
				{
					
					printf("Game Over\n");
				    system("cls");
					display(mine, ROW, COL);
					
				}
			}
			else
			{
				printf("Error! Enter Again\n");   //这里表示玩家输入的位置不存在。
			}
		} while (1);
}

到这里,一个简单粗糙有趣的扫雷游戏已经完成。  可能这个游戏太无趣,让人嫌弃。但是,anyway,编程的生涯,一直在路上。

  若能指教,不胜感激!!


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值