初阶c语言:趣味扫雷游戏

这篇具有很好参考价值的文章主要介绍了初阶c语言:趣味扫雷游戏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

 制作菜单

构建游戏选择框架

实现游戏功能

模块化编程:查看前节三子棋的内容

初始化雷区

​编辑

优化棋盘

随机埋入地雷

点击后的决策

 实现此功能代码

game();的安排


 

前言

《扫雷》是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非地雷的格子,同时避免踩到地雷,踩到一个地雷全盘皆输。

玩家需要在雷区中,将所有地雷一一排查出来:9x9规格

      test.c  - - - -  测试游戏的逻辑

      game.c  - - - -  游戏代码的实现

      game.h  - - - -  游戏代码的声明 ( 函数声明,符号定义 )

初阶c语言:趣味扫雷游戏,游戏

 制作菜单

  在玩游戏时,我们在进入游戏都会有菜单选项,选择开始游戏,推出游戏等这些指令,说到选择,那么我们可以依据我们所学的循环和分支语句来先完成基本框架的设计。

首先我们进入游戏都是先显示选项,做出选择,并且在玩游戏时玩一局,还想玩怎么办(想一想我们前边的知识哪种结构符合先进入游戏出现菜单再循环这一需求)那肯定是do…while的循环结构更符合,那么我们就先使用函数来打印输出一个菜单选项

void menu()
{
	printf("*****************************\n");
	printf("*****************************\n");
	printf("**********1.play^************\n");
	printf("**********0.exit^************\n");//菜单
	printf("*****************************\n");
	printf("*****************************\n");
}
 
int main()
{int a = 0;
    do
 {
  menu();
  printf("请选择:");
  scanf("%d",&a);
 
 
 }while();  
return 0;
}

构建游戏选择框架

游戏菜单已在屏幕上显示完成,现在需要完成选择,并且在玩游戏时玩一局,还想玩怎么办。

这时候需要应用博主之前阐述的switch语句来实现:


int main()
{
	int input = 0;
	do
	{
		menu();
		printf("PLEASE SELECT:");
		scanf("%d", &input);
		switch(input)
		{
		case 1:
			game();    //以上为界面的选择
			break;
		case 0:
			printf("Exit\n");
			break;
		default:
			printf("ERRO,PLEASE CHOOSE AGAIN\n");
			break;
		}
	} while (input);//while循环可以利用0为假,其余为来实现用户可反复选择
//直到选到合适为止
	return 0;
}              

实现游戏功能

模块化编程:查看前节三子棋的内容


 test.c:是用来实现游戏逻辑    game.c:用来实现游戏功能的函数   game.h:用来申明游戏功能函数(可引用)

使用模块化编程可极大的提高代码的可阅读性、可维护性、可移植性等!

此为game.h的文件

#pragma once
#define _CRT_SECURE_NO_WARNINGS//使用scanf函数的报错处理方式 
#include <stdio.h>//打印函数的使用工具箱
#include<Windows.h>//颜色函数和清屏指令的工具箱
#include<stdlib.h>//在使用rand的时候需要用到srand,	srand((unsigned int)time(NULL))随机函数,调用一次就可以
#include<time.h>
#define row 9//常量
#define col 9
#define cols col+2//定义常量
#define rows row+2
void initboard(char board[rows][cols],int hang, int lie,char set);//形参数
void displayboard(char board[rows][cols], int hang, int lie);//只设置9*9格子
void setmine(char board[rows][cols], int hang, int lie);//埋入地雷
void panduan(char show[rows][cols], char mine[rows][cols],int hang, int lie);

后边会逐个剖析 :

用来引用在test.c文件中

初始化雷区

首先映入眼帘的一定是 9×9 的雷区,这 81 个被遮盖的格子,

当我们随机的点击其中的格子时,会出现以下二种情况:

① 当翻开的格子是地雷时,玩家被炸“死”,游戏结束;

② 当翻开的格子不是地雷时,该格子会显示周围的 8 个格子存在的地雷的个数;

初阶c语言:趣味扫雷游戏,游戏

由图例可以得出结论,实现 9×9 的扫雷游戏,创建一个 9 行 9 列的二维数组并不合适。

既然对 9 行 9 列的二维数组的边界元素进行操作时,会导致数组越界访问,那我们干脆就直接将二维数组扩大一圈,将那些会导致越界访问的范围包括在数组内,从源头上解决问题,这是一个非常巧妙的办法!
初阶c语言:趣味扫雷游戏,游戏

所以需要设置两个数组(二维数组)

(1)一个为储存埋雷数据的(用于判断是否踩雷)

(2)一个为展示给玩家的棋盘(类似于上面的蓝色未知方块,点开后显示周围8格雷数)

需要将两个数组同时初始化initboard子函数

void initboard(char board[rows][cols], int hang, int lie,char set)
{
	int i = 0;

	int j = 0;

	for (i = 0; i < hang; i++)
	{
		for (j = 0; j < lie; j++)
		{
			board[i][j] = set;
		}
	}
}//initboard(mine, rows, cols, '0');//在test.c中引用的函数
//initboard(show, row, col, '*');

优化棋盘

由于雷区行号较长,所以需要给每行列标注序号displayboard子函数

void displayboard(char board[rows][cols], int hang, int lie)
{
	int i = 0;
	int j = 0; 
		printf("---------------------------------------\n");
	for(j = 0; j <=lie; j++)
	{
		printf("%d ",j);
	}
	printf("\n");
	for (i = 1; i <=hang; i++)
	{
		printf("%d ", i);
		for (j = 1; j <=lie; j++)
		{
			printf("%c ", board[i-1][j-1]);
		}
		printf("\n");
	}
	    printf("---------------------------------------\n");
}	

初阶c语言:趣味扫雷游戏,游戏 效果图

 

随机埋入地雷

应为此为9x9雷区,故10个雷足够。但怎么样实现随机在合适的区域内埋雷呢

C语言生成随机数的方法:

void setmine(char board[rows][cols], int hang, int lie)//随机埋入地雷
{
	int count = 10;
	while (count)
	{
		int x = rand() % hang ;
		int y = rand() % lie ;
		if (board[x][y] == '0')
		{
			board[x][y] = '1';
		}
		count--;
	}

}//srand((unsigned int)time(NULL));//布置雷的随机时间函数,在test.c主函数
中引用一次就够

点击后的决策

展开后周围多少雷 

在扫雷游戏中,当我们点击的方格不是地雷,且周围一片区域都没有地雷时,会直接展开一片雷区,具体效果如下图

初阶c语言:趣味扫雷游戏,游戏

 

扫雷游戏中,当玩家翻转一个方格时,若该方格不是地雷则会显示该方格周围 8 个方格存在的地雷个数。如果该方格周围 8 个坐标都不存在地雷时会将这 9 个方格都展开,以此类推直到遇到一个方格的周围 8 个方格存在地雷时停止展开,两种情况如下图所

初阶c语言:趣味扫雷游戏,游戏

 为实现这一功能,则需要我们遍历玩家输入的坐标的周围 8 个坐标,统计该坐标周围所存在的地雷个数。

int get_mine(char board[rows][cols],int x, int y)
{
	return (board[x - 1][y - 1]
		+ board[x - 1][y]
		+ board[x - 1][y + 1]
		+ board[x][y + 1]
		+ board[x][y - 1]
		+ board[x + 1][y + 1]
		+ board[x + 1][y]
		+ board[x + 1][y - 1] - 8* '0');//周围8个坐标相加
}

 初阶c语言:趣味扫雷游戏,游戏

 

初阶c语言:趣味扫雷游戏,游戏

 实现此功能代码

void Mark(char board[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("\n请输入要标记的坐标>>");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= col)       //判断玩家输入坐标是否合法
		{
			if (board[x][y] == '!')       //若坐标元素为 '!' 则表示该坐标已被标记过
			{
				printf("\n<该坐标已标记,无需重复标记,请重新输入>\n");
			}
			else       //该坐标未被标记
			{
				board[x][y] = '!';       //将 '!' 赋值给该坐标元素
				DisplayBoard(board, row, col);       //将标记地雷后的雷区展示于玩家
				break;
			}
		}
		else
		{
			printf("\n<坐标非法,请重新输入>\n\n");
		}
	}
}

game();的安排

void game()
{
	char mine[rows][cols] = { 0 };//存放雷的信息
	char show[rows][cols] = { 0 };//显示给玩家的游戏界面信息
	initboard(mine, rows, cols, '0');
	initboard(show, row, col, '*');
	//displayboard(mine, row, col);
	setmine(mine, row,col);
	displayboard(show, row, col);
	panduan(show,mine, row, col);
}

好了以上内容到今天就结束了希望大家多多支持!

其中一些内容借鉴了一些博主的,希望大家谅解。文章来源地址https://www.toymoban.com/news/detail-672934.html

到了这里,关于初阶c语言:趣味扫雷游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言实战——扫雷游戏

    1.1扫雷游戏的功能说明 使用控制台实现经典的扫雷游戏 游戏可以通过菜单实现继续玩或者退出游戏 扫雷的棋盘是9*9的格子 默认随机布置10个雷 可以排查雷 如果位置不是雷,就显示周围有几个雷 如果位置是雷,就炸死游戏结束 把除10个雷之外的所有⾮雷都找出来,排雷成功

    2024年03月15日
    浏览(47)
  • 【C语言】实现扫雷游戏

    详细介绍扫雷游戏的思路和实现过程,并用随机数实现埋雷。 • 使用控制台实现经典的扫雷游戏 • 游戏可以通过菜单实现继续玩或者退出游戏 • 扫雷的棋盘是9*9的格⼦ • 默认随机布置10个雷 • 可以排查雷 ◦ 如果位置不是雷,就显示周围有几个雷 ◦ 如果位置是雷,就炸

    2024年02月04日
    浏览(45)
  • C语言(扫雷游戏)

                          Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注+收藏,欢迎欢迎~~                              💥 个人主页 :小羊在奋斗                         💥 所属专栏 :C语言             本

    2024年04月23日
    浏览(34)
  • [C语言][游戏][扫雷]

    为了巩固C语言,我运用所学的知识,写了一篇关于扫雷游戏的博客。如果有大佬看到这篇文章,如有不足之处,请你一定要指出来。 游戏的规则: 我们在棋盘格中任意点开一个格子(输入行和列确认这个格子),若这个格子不是雷就排除了这个位置,排除后这个格子会显示

    2024年02月13日
    浏览(39)
  • C语言扫雷小游戏

    扫雷的玩法:在一个9×9(初级)、16×16(中级)、16×30(高级)或自定义大小的方块矩阵中随机布置一定量的地雷(初级为10个,中级为40个,高级为99个),再由玩家逐个翻开方块,翻开的地方将显示周围八个雷的个数。以找出所有地雷为最终游戏目标。如果玩家翻开的方块

    2024年02月05日
    浏览(61)
  • 扫雷小游戏【C语言】

    目录 前言 一、基本实现逻辑 二、实现步骤 1. 我们希望在进入游戏时有一个菜单让我们选择 2. 我们希望可以重复的玩(一把玩完了还可以接着玩) 3. 采用多文件形式编程  4.要扫雷先得有棋盘(创建棋盘R*N) 5.初始化棋盘  6.打印棋盘 7.设置雷 8.排查雷 三、全部源码: 上期

    2024年02月11日
    浏览(62)
  • C语言:扫雷小游戏

    文接上一篇博文C语言:三子棋小游戏。本篇博文是使用C语言来实现扫雷小游戏的。这里不对扫雷的规则进行赘述。玩家通过键盘输入坐标来探雷。博主在实现扫雷之前从未看过扫雷实现的相关视频,所以这里实现的扫雷完全是博主的原生思路,具有逻辑性。下面详细介绍一

    2024年02月09日
    浏览(62)
  • C语言小游戏——扫雷

            结合前边我们所学的C语言知识,本期我们将使用C语言实现一个简单的小游戏——扫雷 目录 前言 总体框架设计 多文件分装程序 各功能模块化实现 初始化棋盘  棋盘打印 埋雷  判赢与排雷 游戏逻辑安排 总结         和三子棋相同,游戏开始时不需要任何判

    2024年02月06日
    浏览(54)
  • 扫雷游戏的实现(C语言)

    对于扫雷游戏,大家应该都很熟悉吧,下面让我们来看看它是如何实现的。 目录 一、游戏规则及设计思想 二、各功能的代码实现 1.创建菜单 2、主函数的实现  3、创建棋盘并初始化 4、打印棋盘  5、布置雷的位置 (埋雷) 6、排查雷   三、代码汇总 1、game.h文件 2、game.c文

    2024年02月03日
    浏览(38)
  • 探秘C语言扫雷游戏实现技巧

    本篇博客会讲解,如何使用C语言实现扫雷小游戏。 使用2个二维数组mine和show,分别来存储雷的位置信息和排查出来的雷的信息,前者隐藏,后者展示给玩家。假设盘面大小是9×9,这2个二维数组都要开大一圈,也就是大小是11×11,这是为了更加方便的数边角上雷的个数,防止

    2024年02月10日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包