简易版 扫雷

先创建项目,再在项目中新建源代码

代码一:test.cpp

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include"game.h" 

void menu()
{
	printf("*******************\n");
	printf("******1.play*******\n");
	printf("******0.exit*******\n");
	printf("*******************\n");	
}


void game()
{
	char mine[ROWS][COLS] = {0};//存放布置的雷 
	char show[ROWS][COLS] = {0};//存放排查出的雷的信息 
	
	InitBoard(mine,ROWS,COLS,'0');//初始化棋盘 为0 
	InitBoard(show,ROWS,COLS,'*');//为 * 

    DisplayBoard(show,ROW,COL);//打印棋盘
    
    SetMine(mine,ROW,COL);//放雷

    FindMine(mine,show,ROW,COL);
}


int main()
{
	int input=0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d",&input);
		switch(input)
		{
			case 1:
				game();
				break;
			case 0:
				printf("退出游戏\n");
				break;
			default:
				printf("选择错误,重新选择\n");
				break;
		}
	} while(input);
	
	return 0;
}

代码二:game.h

#define ROW 9
#define COL 9

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

#define EASY_COUNT 10
#define ROWS ROW+2
#define COLS COL+2

void InitBoard(char board[ROWS][COLS],int rows,int cols,char set);

void DisplayBoard(char board[ROWS][COLS],int row,int col);

void SetMine(char mine[ROWS][COLS],int row,int col);

void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);

代码三:game.cpp

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include "game.h"


void InitBoard(char board[ROWS][COLS],int rows,int cols,char set)
{
	int i=0;
	int j=0;
	for(i=0;i<rows;i++)
	{
		for(j=0;j<cols;j++)
		{
			board[i][j]=set;
		}
	}
}


void DisplayBoard(char board[ROWS][COLS],int row,int col)
{
	int i=0;
	int j=0;
	printf("-------扫雷游戏-------\n");
    for(i=1;i<=col;i++)
    {
    	printf(" %d",i);
	}
	printf("\n");
	for(i=1;i<=row;i++)
	{
		printf("%d",i);
		for(j=1;j<=col;j++)
		{
			printf("%c ",board[i][j]);
		}
		printf("\n");
	}
	printf("-------扫雷游戏-------\n");
}


void SetMine(char mine[ROWS][COLS], int row, int col)
{
	int count = EASY_COUNT;
	while (count)
	{
		int x= rand()%row+1;
		int y= rand()%col+1;
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';
			count--;
		}
	}
}

static int get_mine_count(char mine[ROWS][COLS],int x,int y)
{
	return 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]+
	       mine[x-1][y+1]-8*'0';
}

void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col)
{
	int x=0;
	int y=0;
	int win=0;
	
	while(win<row*col-EASY_COUNT)
	{
	printf("快输入坐标:>");
	scanf("%d%d", &x, &y);
	
	if(x>=1 && x<=row && y>=1 && y<=col)
	{
		if(mine[x][y] =='1')
		{
			printf("太好了,被炸死了\n");
			DisplayBoard(mine,row,col);
			break;
		}
		else
		{
			int count = get_mine_count(mine,x,y);
			show[x][y] = count+'0';
			DisplayBoard(show,row,col);
			win++;
		}
	}
	else
	{
		printf("错误,重新输入\n");
	}
  }
  if(win==row*col-EASY_COUNT)
  {
  	printf("诶呦不错哦\n"); 
  	DisplayBoard(mine,row,col);
  }
}

运行示例

  • 7
    点赞
  • 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、付费专栏及课程。

余额充值