C语言·扫雷游戏

整体思路:

建立两个二维数组,一个存放炸弹(数组trap),一个展示扫雷结果(数组result);

trap中炸弹为‘1’,其余为‘0’;

result中排查过的展示其环绕的8个元素的炸弹数,未排查的为‘*’,例如:

找到雷,炸死,游戏失败;排除所有雷,游戏胜利。


游戏函数头文件

#define _CRT_SECURE_NO_WARNINGS
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ROW 9
#define COL 9

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

#define EASY_COUNT 10

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

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

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

void FindTrap(char trap[ROWS][COLS], char result[ROWS][COLS], int row, int col);

游戏主体

#include "game.h"

void menu()
{
	printf("----------------------------\n");
	printf("-------- 1.开始游戏 --------\n");
	printf("-------- 0.退出游戏 --------\n");
	printf("----------------------------\n");
}

void game()
{
	char trap[ROWS][COLS] = { 0 };
	char result[ROWS][COLS] = { 0 };

	//初始化扫雷数组 陷阱_展示
	InitBoard(trap, ROWS, COLS, '0');
	InitBoard(result, ROWS, COLS, '*');

	//打印展示棋盘
	DisplayBoard(result, ROW, COL);

	//埋雷
	SetTrap(trap, ROW, COL);
	//DisplayBoard(trap, ROW, COL);

	//排雷
	FindTrap(trap, result, ROW, COL);

}

int main()
{
	int input = 0;
	srand((unsigned)time(NULL));
	do
	{
		menu();
		printf("PS:游戏坐标输入格式为【数字+空格+数字+回车】,例如【1 1】表示第一行第一列\n\n");
		printf("请输入->");
		scanf("%d", &input);
		switch (input)
		{
		case 0:
			printf("您已选择退出游戏\n");
			break;
		case 1:
			printf("您已选择进入游戏\n");
			game();
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (input);
}

游戏中各个函数的定义

1.初始化数组
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{
	int i = 0, j = 0;
	for (i = 0; i < rows; i++)
	{
		for (j = 0; j < cols; j++)
		{
			board[i][j] = set;
		}
	}
}

2.展示棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
	int i = 0, j = 0;
	for (j = 0; j <= col; j++)
	{
		printf("%d ", j);
	}
	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");
	printf("--------扫雷--------\n");
	printf("\n");
}

3.埋雷

void SetTrap(char board[ROWS][COLS], int row, int col)
{
	int i = 0,j = 0,count= EASY_COUNT;
	while (count)
	{
		i = rand() % 9 + 1;
		j = rand() % 9 + 1;
		if (board[i][j] == '0')
		{
			board[i][j] = '1';
			count--;
		}
	}
}

4.判断炸弹个数

int get_trap_count(char trap[ROWS][COLS], int x, int y)//判断胜利
{
	int i = 0, j = 0;
	int count = 0;
	for (i = -1; i <= 1; i++)
	{
		for(j = -1; j <= 1; j++)
		{
			count += trap[x + i][y + j] - '0';
		}
	}
	return count;
}

5.玩家标记炸弹功能
void IsPoint(char result[ROWS][COLS])//标记功能
{
	int q = 0, p = 0;
	int k = 0;
	printf("若要进行标记请输入:1\n");
	scanf("%d", &k);
	if (k==1)
	{
		printf("请输入要标记的坐标->\n");
		scanf("%d %d", &q, &p);
		if (result[q][p] == '*')
		{
			result[q][p] = '#';
			printf("已标记坐标(%d,%d)\n\n",q,p);
			DisplayBoard(result, ROW, COL);
		}
	}
}

6.玩家找炸弹过程(输入合法,输入不重复,不是雷,展示数字;是雷,游戏结束)

void FindTrap(char trap[ROWS][COLS],char result[ROWS][COLS], int row, int col)
{
	int x = 0, y = 0;
	int win = 0;
	int count = 0;

	while (win<ROW*COL- EASY_COUNT)
	{
		printf("请输入要排查的坐标->\n");
		scanf("%d %d", &x, &y);
		if (x<=row && x>=1 && y<=col && y>=1)//输入合法
		{
			if (result[x][y] != '*' && result[x][y] != '#')//判断输入重复
				printf("坐标被重复输入\n");
			else
			{
				if (trap[x][y] == '1')//是雷
				{
					printf("不好意思你输了,看一眼就会爆炸\n");
					DisplayBoard(trap, ROW, COL);
					break;
				}
				else//不是雷
				{
					win++;
					count = get_trap_count(trap, x, y);
					result[x][y] = count + '0';
					DisplayBoard(result, ROW, COL);
					IsPoint(result);
				}
			}
			
		}
		else //输入非法
		{
			printf("输入坐标非法,请重新输入\n");
		}
	}
	if (win == ROW * COL - EASY_COUNT)
	{
		printf("恭喜你,你赢了\n");
		DisplayBoard(trap, ROW, COL);
	}
}

结语

一起加油,一起进步,拿好offer

C语言扫雷游戏排行榜是一个用于记录玩家在扫雷游戏中的得分和排名的榜单。在C语言中,我们可以使用数组和结构体来实现这个排行榜。 首先,我们可以创建一个结构体来表示每个玩家的信息,如玩家的姓名和得分。结构体的定义可以像这样: ``` struct Player { char name[20]; int score; }; ``` 然后,我们创建一个数组来存储多个玩家的信息,数组的大小可以根据需要进行调整。例如: ``` struct Player leaderboard[10]; ``` 接下来,我们可以编写函数来实现对排行榜的操作,如添加玩家、更新得分和显示排行榜等。 添加玩家的函数可以接受玩家的姓名和得分,并将其添加到排行榜中。例如: ``` void addPlayer(char name[20], int score) { // 找到排行榜中得分低于当前得分的位置,并将其后的玩家信息依次后移一位 // 将当前玩家信息插入到空出的位置 } ``` 更新得分的函数可以接受玩家的姓名和新得分,并根据姓名找到对应的玩家并更新其得分。例如: ``` void updateScore(char name[20], int newScore) { // 根据姓名找到对应的玩家,并更新其得分 } ``` 最后,我们可以编写显示排行榜的函数,按照得分从高到低的顺序显示玩家信息。例如: ``` void showLeaderboard() { // 对排行榜中的玩家根据得分进行排序,并输出玩家信息 } ``` 以上是用C语言实现扫雷游戏排行榜的基本思路,具体的实现细节可以根据实际需求进行调整和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值