扫雷 简易版

用c语言写一个简易的扫雷游戏

//game.h
#define _CRT_SECURE_NO_WARNINGS 1

#ifndef __GAME_H__
#define __GAME_H__


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

#define rows 11
#define cols 11
#define Count 10
#define col (cols-2)
#define row (rows-2)

int menu();//菜单函数
void display(char show[rows][cols]);
int Game(char mine[rows][cols],char show[rows][cols]);//游戏
void set_mine(char mine[rows][cols]);//设置雷的位置
int Sweep(char mine[rows][cols],char show[rows][cols]);//开始扫雷
void move(char mine[rows][cols], int x, int y);
int get_num(char mine[rows][cols],int x,int y);//计算雷的个数

#endif//__GAME_H__

//game.c
#include"game.h"

//菜单函数
int menu()
{
	printf("*******************************\n");
	printf("*******1. play  0. exit********\n");
	printf("*******************************\n");
	return 0;
}

//设置雷的位置
void set_mine(char mine[rows][cols])
{
	int count=Count;
	int x=0;
	int y=0;
	srand((unsigned)time(NULL));
	while (count)
	{
		x=rand()%9+1;
		y=rand()%9+1;
		if(mine[x][y]=='0')
		{
			mine[x][y]='1';
			count--;
		}
	}
}

//打印下棋完了显示的界面
void display(char show[rows][cols])
{
	int i=0;
	int j=0;
	printf("  ");
	for(i=1;i<cols-1;i++)
	{
		printf("%d ",i);
	}
	printf("\n");
	for(i=1;i<rows-1;i++)
	{
		printf("%d ",i);
		for(j=1;j<cols-1;j++)
		{
			printf("%c ",show[i][j]);
		}
		printf("\n");
	}								
}

//计算雷的个数
int get_num(char mine[rows][cols],int x,int y)
{
	return mine[x-1][y+1]+mine[x-1][y]+mine[x-1][y-1]+  
		mine[x][y-1]+mine[x+1][y-1]+mine[x+1][y]+  
		mine[x+1][y+1]+mine[x][y+1]-8*'0'; 
}

//扫雷  保证第一步不会踩到雷
int Sweep(char mine[rows][cols],char show[rows][cols])
{
	int count=0;
	int x=0;
	int y=0;
	int i=1;
	int x1=0;
	int y1=0;
	while(count!=(row*col-Count))
	{
		printf("请输入坐标:");
		scanf("%d%d",&x,&y);
		 while (i==1)
		 {
			 i++;
			 if(mine[x][y]=='1')
			 {
				 mine[x][y]='0';
				 while(1)
				 {
					 x1=rand()%9+1;
					 y1=rand()%9+1;
					 if(mine[x1][y1]='0')
					 {
						 mine[x1][y1]='1';
						 break;
					 }
				 }
			 }

		 }
		 //display(show);
		 //display(mine);
		if(mine[x][y]=='1')
		{
			printf("你踩到雷了!\n");
			return 0;
		}
		else
		{
			int ret=get_num(mine,x,y);
			show[x][y]=ret+'0';
			//set_mine(mine);
			display(show);
			count++;
		}
	}
	 printf("恭喜你赢了!\n");
	 display(mine);
	 return 0;
}
 

//游戏
int Game(char mine[rows][cols],char show[rows][cols])
{
	 int x=0,y=0;
	set_mine(mine);
	display(show);
	//display(mine);//可以将雷的位置显示出来
	Sweep(mine,show);
	//move(mine,x,y);
	return 0;
}

//text.c
#include "game.h"
int main()
{
	int input=0;
	char mine[rows][cols];
	char show[rows][cols];
	int i;
	int j;
	for(i=0;i<rows-1;i++)
	{
		for(j=0;j<cols-1;j++)
		{
			mine[i][j]='0';
			show[i][j]='*';
		}
	}
	do 
	{
		menu();
		printf("请选择:");
		scanf("%d",&input);
		switch(input)
		{
		case 1:
			Game(mine,show);
			break;
		case 0:
			break;
		default:
			printf("选择错误!");
				break;
		}

	} while (input);
	return 0;
}







这个简易扫雷游戏,能确保第一步不被炸死,如果第一步踩到雷,程序就会自动自动把雷移走。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的Python实现扫雷的示例代码: ```python import random # 游戏参数 ROWS = 10 COLUMNS = 10 MINES = 10 # 方格状态 UNREVEALED = -1 MINE = -2 # 创建游戏面板 board = [[UNREVEALED for _ in range(COLUMNS)] for _ in range(ROWS)] # 随机布雷 mines = random.sample(range(ROWS * COLUMNS), MINES) for mine in mines: row, col = divmod(mine, COLUMNS) board[row][col] = MINE # 计算周围地雷数量 for row in range(ROWS): for col in range(COLUMNS): if board[row][col] == MINE: continue count = 0 for r in range(max(0, row - 1), min(row + 2, ROWS)): for c in range(max(0, col - 1), min(col + 2, COLUMNS)): if board[r][c] == MINE: count += 1 board[row][col] = count # 显示游戏面板 def print_board(): print(" ", end="") for col in range(COLUMNS): print(f"{col:2d}", end="") print() for row in range(ROWS): print(f"{row:2d} ", end="") for col in range(COLUMNS): if board[row][col] == UNREVEALED: print(" .", end="") elif board[row][col] == MINE: print(" *", end="") else: print(f" {board[row][col]}", end="") print() # 点击方格 def click(row, col): if board[row][col] == MINE: print("你踩到了地雷,游戏结束!") return False elif board[row][col] == UNREVEALED: board[row][col] = 0 for r in range(max(0, row - 1), min(row + 2, ROWS)): for c in range(max(0, col - 1), min(col + 2, COLUMNS)): if board[r][c] == UNREVEALED: click(r, c) return True else: return True # 开始游戏 print_board() while True: row = int(input("请输入行号:")) col = int(input("请输入列号:")) if not click(row, col): break print_board() ``` 这个简易版扫雷游戏使用的是命令行界面,先随机生成地雷,然后根据地雷数量计算每个方格周围的地雷数量。玩家输入行号和列号来点击方格,如果踩到地雷,则游戏结束,否则会递归地展开周围未点击过的方格,直到点击到有地雷的方格或者所有非地雷方格都被点击为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值