c语言练习 落雷游戏

LVGL v8.3 图片显示与解码缓存实战:PNG 上屏、C 数组与文件双方案 LVGL v8.3 图片两种存储方式、PNG/JPG 上屏解码器挂载、LV_IMG_CACHE_DEF_SIZE 缓存调优、手动预解码头像有效性判断,及"缓存被动画清空"真实踩坑。 阅读详情

本部分包含数组练习题 落雷游戏。

代码部分:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>


#define ROW 9
#define COL 9
#define ROWS 11
#define COLS 11

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

//初始化棋盘
void InitBoard(char arr[ROWS][COLS], int row, int col, char set)
{
	for (int i = 0;i < row;i++)
	{
		for (int j = 0;j < col;j++)
		{
			arr[i][j] = set;
		}
	}
}

//打印棋盘
void displayBoard(char arr[ROWS][COLS], int row, int col)
{
	printf("--扫雷游戏--\n");
	for (int i = 0;i <= col;i++)
	{
		printf("%d", i);
	}
	printf("\n");
	for (int i = 1;i <= row;i++)
	{
		printf("%d", i);
		for (int j = 1;j < col;j++)
		{
			printf("%c", arr[i][j]);
		}
		printf("\n");
	}
	printf("--扫雷游戏--\n");
}

void setMined(char arr[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int count = 10;
	while (count != 0)
	{
		x = rand() % row + 1;
		y = rand() % col + 1;
		if (arr[x][y] == '0')
		{
			arr[x][y] = 'x';
			count--;
		}
	}
}
//检查周围有多少地雷
int findMinedCount(char mine[ROWS][COLS], int x, int y)
{
	int count = 0;
	for (int i = -1;i <= 1;i++)
	{
		for (int j = -1;j <= 1;j++)
		{
			if (mine[x + i][y + j] == 'x')
				count++;
		}
	}
	return count;
}
int findMined(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;

	printf("请输入排查坐标:");
	scanf("%d %d", &x, &y);
	//检查输入是否合法
	if (x > 0 && x <= row && y > 0 && y <= col)
	{
		//1.炸死
		if (mine[x][y] == 'x')
		{
			printf("被炸死啦\n");
			show[x][y] = 'x';
			displayBoard(show, ROW, COL);
			return 0;
		}
		//2.没被炸死
		else if (mine[x][y] == '0')
		{
			int count = 0;
			//检查周围有多少地雷
			count = findMinedCount(mine, x, y);
			show[x][y] = '0' + count;
			displayBoard(show, ROW, COL);
		}
	}
	else
	{
		printf("输入不合法");
	}
}

void game()
{
	//创建棋盘
	char landmine[ROWS][COLS] = { 0 };//存放地雷信息
	char show[ROWS][COLS] = { 0 };//存放棋盘信息
	   //初始化棋盘
	InitBoard(landmine, ROWS, COLS, '0');
	InitBoard(show, ROWS, COLS, '*');
	displayBoard(show, ROW, COL);
	//设置雷
	setMined(landmine, ROW, COL);
	displayBoard(landmine, ROW, COL);
	//排查雷
	int set = 1;
	int win = 0;
	while (set)
	{
		set = findMined(landmine, show, ROW, COL);
		win++;
		if (win == 71)
			break;
	}
	printf("游戏胜利!!!");
}




int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请输入:》");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("game扫雷开始\n");
			game();
			break;
		case 0:
			printf("退出\n");
			break;
		default:
			printf("输入错误\n");
			break;
		}
	} while (input);

	return 0;
}

代码实现:

笔记部分:

 

  • 数组
    • 5.1 概述
      • 所谓数组,就是一个集合,里面存放了相同类型的数据元素
      • 特点1:数组中的每个数据元素都是相同的数据类型
      • 特点2:数组是由连续的内存位置组成的
      • 例图:

    • 5.2 一维数组
      • 5.2.1 一维数组定义方式
        • 一维数组定义的三种方式:
          • 数据类型 数组名[ 数组长度 ];
          • 数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};
          • 数据类型 数组名[ ] = { 值1,值2 ...};
        • 图示:

        • 注意:如果在初始化数据的时候,没有全部填写完,会用0来填补剩余数据+数组长度必须是常量
        • 总结1:数组名的命名规范与变量名命名规范一致,不要和变量重名
        • 总结2:数组中下标是从0开始索引
      • 5.2.2 一维数组数组名
        • 一维数组名称的用途:
          • 1.可以统计整个数组在内存中的长度
          • 2.可以获取数组在内存中的首地址
        • 注意:数组名是常量,因此不可以赋值
        • 总结1:直接打印数组名,可以查看数组所占内存的首地址
        • 总结2:对数组名进行sizeof,可以获取整个数组占内存空间的大小
      • 5.2.3 冒泡排序
        • 作用: 最常用的排序算法,对数组内元素进行排序
          • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
          • 对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。
          • 重复以上的步骤,每次比较次数-1,直到不需要比较
    • 5.3 二维数组
      • 二维数组就是在一维数组上,多加一个维度。
      • 5.3.1 二维数组定义方式
        • 二维数组定义的四种方式:
          • 数据类型 数组名[ 行数 ][ 列数 ];
          • 数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };
          • 数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
          • 数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};
        • 建议:以上4种定义方式,利用第二种更加直观,提高代码的可读性
        • 总结:在定义二维数组时,如果初始化了数据,可以省略行数
      • 5.3.2 二维数组数组名
        • 二维数组名称的用途:
          • 1.查看二维数组所占内存空间
          • 2.获取二维数组首地址
    • 5.4 数组&函数
      • 传递数组给函数
        • 可以通过指定不带下标(索引)的数组名来传递一个指向数组的指针
        • 传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址
        • 数组作为参数的三种方式
          • 1.形式参数是一个指针:void myFunction(int *param)
          • 2.形式参数是一个已定义大小的数组:void myFunction(int param[10])
          • 3.形式参数是一个未定义大小的数组:void myFunction(int param[])
      • 从函数返回数组
        • C++ 不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。
        • 如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数。
          • 例子:int * myFunction()

【Claude Code · VibeCoding】13|实战演示:水果消消乐 VibeCoding 用「水果消消乐」走一遍 VibeCoding:提示、生成、试玩、改需求、再生成。 阅读详情

相关推荐

o型圈沟槽设计_O型密封圈——详细选型过程及步骤

一、密封圈常用材料二、密封圈常用密封形式密封圈分为活塞密封,活塞杆密封,端面密封,旋转密封。三、O型密封圈的选型规则O型密封圈的尺寸图径向安装O型圈选型(静态和动态运动)活塞杆密封选择适当规格的O形圈时,应该保证其外径(d1+2*d2)至少等于或者大于沟槽外径d6;当选择的O形圈直径d1大于250 mm时, O形圈外径将不能超过沟槽外径的3%;当选择的O形圈直径d1小于250mm时, O形圈外径将...

weixin_39856630的博客 2万+

Mysql

MysqlMYSQL(Centos 6、5……系)/Mariadb(Centos 7系)要点:1.mysql-server服务器的安装部署。[采用SQL语言管理的关系型数据库]2.常见的mysql数据库、表的管理(增、删、改、查)语句。3.mysql数据库、表的备份方法。4.mysql的几种日志文件。5.mysql的集群部署:主从复制、读写分离、高可用6.部署一个LAMP环境的Web服务器。以论坛...

weixin_34250709的博客 2万+

手把手教你用三菱PLC控制JET伺服原点:从硬件接线到GXWORKS3程序调试

本文详细介绍了如何使用三菱PLC控制JET伺服系统实现原点回归功能,涵盖硬件接线、参数配置到GX Works3程序调试的全流程。通过实战指南,帮助工程师快速掌握伺服控制技术,提升工业自动化项目的实施效率。

weixin_30642561的博客 535

低洼地c++

OnlineJudge (无视掉下面的提示(〜 ̄△ ̄)〜) 首先判断我们低洼地有两种情况 第一种:只有一个点的低洼地,比如: 第二种,有多个点的洼地: 第一种情况的判断十分简单,只需要判断现在的点的两边是否高于现有的点 if(a[i-1]>a[i]&&a[i+1]>a[i]) { ans++; continue; 第二种情况稍微有点复杂,应为他可以有很多情况:比如 或者 其实我们只要以当前i为开头,不断遍...

Randy080303的博客 1429

CentOS7下Node.js v20+安装与常见依赖库问题解决指南

本文详细介绍了在CentOS7系统下安装Node.js v20+的完整流程及常见依赖库问题的解决方案。通过升级glibc到2.28+、配置环境变量以及处理libstdc++版本问题,帮助开发者顺利在老旧系统上部署最新版Node.js,提升开发效率。

weixin_30689307的博客 157

实践指南——【SPSS操作解析】线性混合效应模型在重复测量数据中的应用

本文详细解析了线性混合效应模型在重复测量数据分析中的应用,并提供了SPSS操作指南。文章阐述了该模型如何通过区分固定效应与随机效应,有效处理数据非独立性和缺失值问题,从而获得更可靠的统计推断。

oo7890的博客 551

c语言贪吃蛇小游戏练习

c语言贪吃蛇小游戏练习 pre.src {background-color: #292b2e; color: #b2b2b2;} c语言贪吃蛇小游戏练习 Table of Contents 1. 需求分析 1.1. 任意位置打印字符 1.2. 不阻塞的判断键盘输入 1.3. 游戏逻辑 完整代码已放到github,传送们:[[https:...

weixin_30319097的博客 374

GSview5.0安装步骤及问题

GSview5.0安装步骤及问题安装步骤遇到的问题 尝试过很多对图片去白边的方法,感觉最好用最有效的还是用GSview比较好操作。本文针对gsview安装及安装过程中踩过的坑记录下来。 安装步骤 在官网下载gsv50w64.exe(或32位的),直接双击安装即可。 安装Ghostscript;注意:GSview5.0不支持最新版的Ghostscript9.54,这里用到是9.27的版本可以在Github中找到,下载gs927w64.exe,一定要安装在GSview的安装目录Ghostgum下 Gho

LilianLYN的博客 1万+

c语言编程练习(简易扫雷小游戏)

#include<stdio.h> #include<stdlib.h> #include<time.h> #define MAX_ROW 9 #define MAX_COL 9 #define MINE_C0UNT 10 void menu() { printf("************************\n"); printf("***** ...

qq_43514458的博客 2081

无人机:DJI Matrice 600 Pro_(8).DJI_Matrice_600_Pro_负载能力

在一些高级应用场景中,可能需要自定义开发负载设备。

zhubeibei168的博客 1341

四足狗机器人硬件开发技术栈详解

本文系统介绍了四足狗机器人的硬件开发技术,重点分析了五大核心模块:机械结构(骨架设计)、动力系统(关节驱动)、感知系统(环境监测)、控制系统(决策中枢)和电源系统(能源管理)。文章详细阐述了各模块的选型标准、技术要点和协同设计原则,提供了从需求定位到组装调试的完整开发流程,并针对常见问题给出解决方案。随着材料轻量化、模块标准化和AI集成化的发展趋势,四足机器人硬件将向更灵活、更智能的方向演进,为工业巡检、应急救援等场景提供更强大的移动平台支持。

start_up_go的博客 284

C语言射击游戏练习程序

#include #include #include #define CPRTBLK pos(control_block.x,control_block.y);printf(" ") #define BPRTBLK pos(ball.x,ball.y);printf(" ") #define NUM_TARGET 12 void pos(int pos_x,int pos_y){ H

MrByte 1万+

知识存储之Apache Jena

知识图谱的存储可以分为基于表结构的存储和基于图结构的存储。1️⃣基于表结构的存储基于表结构的存储利用二维的数据表对知识图谱中的数据进行存储。根据不同的设计原则,知识图谱可以具有不同的表结构:💨知识图谱实质上是一个个的三元组,一种简单直接的存储方式是设计一张三元组表用于存储所有三元组,有不少比较成熟的产品利用该形式存储知识图谱,包括Jena、Oracle、Virtuoso等。💨为每种类型构建一张表,同一类型的实例存放在相同的表中。

Puzzle的博客 6065

C语言实现:幼儿版扫雷

好不容易抽出时间码完了这个幼儿版扫雷,马上就来这里和小伙伴们分享啦!

weixin_62623251的博客 3073

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

static 的三种用法:C 语言里一个关键字的三张面孔

本文系统讲解 C 语言中 static 关键字的三种用法:修饰局部变量延长生命周期、修饰全局变量与函数限制作用域到本文件。通过一个包含三个文件的完整工程示例对照演示,并从存储期、作用域与链接性三个属性解释其统一原理,最后补充单元测试框架偏爱 static 函数的工程实践。

大模型全栈工程师 · Thanks_ks 318

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【Unity知识速递】第7期 Unity 6.6 深度解析:WebGPU 正式版与 WebAssembly64,Web 游戏的内存革命

如何启用 Wasm64?需要注意的是,Wasm64 需要浏览器支持 Memory64 提案,目前主流浏览器的最新版本都已支持。一句话总结: Unity 6.6 用 WebGPU 转正、Wasm64 16GB 内存和渐进式加载三连击,将 Web 游戏的体验天花板又往上推了一大截——Web 平台不再是"妥协版",正在成为真正的一等公民。Unity 6.6 新增了 WebAssembly64(Wasm64) 构建选项,这可能是本次更新中对 Web 游戏开发者影响最大的一项升级。

crystal_WJT的博客 425

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

设计模式(unity游戏研发版)

当你使用图形用户界面类时通常会遇到一个问题。比如,你创建了自定义按钮类并允许客户端在按钮中注入自定义代码,这样当用户按下按钮时就会触发这些代码。观察者模式允许任何实现了订阅者接口的对象订阅发布者对象的事件通知。你可在按钮中添加订阅机制,允许客户端通过自定义订阅类注入自定义代码。在Unity中,这就像UnityEvent在Inspector中绑定多个回调。

m0_63330263的博客 102

我给 DeepSeek 大肥鱼做了一款马里奥式闯关游戏

当全网都在把大肥鱼做成直播虚拟主播的时候,我决定给她做一款横版闯关游戏。

2301_79028807的博客 901

Claude Fable 5.2 登顶:65 分、单发做游戏,和一份 $26.54 一单的账单

Anthropic 发布 Claude Fable 5.2:AA 智能指数 65 分登顶历史第一,但性能 #71、成本 #73、冗余度 #72——最强能力、最贵成本、最慢速度的矛盾体。同底层 Mythos 5.2 无护栏反而更强。文章拆解:65 分构成、官方实战验收、基准提升真伪、一条提示词一晚做出街机游戏的完整流水线(自写机器人跑完 12 关自检)、$26.54 账单与 98% 缓存折扣下的真实成本重估。

johnsong2009的博客 236

Unity 数据存储指南:本地存储、个性化设置、缓存与 Resources/StreamingAssets 的区别

在 Unity 开发中,“数据存到哪里”、“缓存能不能清”、“打包后资源有什么区别” 是新手最容易混淆、老手也经常踩坑的问题。Unity 本地存储机制(包括 Unity 放在 C 盘的内容);Unity 个性化设置(编辑器首选项 Editor Preferences);Unity 缓存的打开、关闭与清理;打包后 Resources 与 StreamingAssets 的区别;其他可自定义存储的内容汇总。为方便理解,本文配有一个可直接运行的演示工程,所有代码见文末"配套工程说明"。

zhchyun 216

Claude Code做Unity项目移植(三): 使用SKILL进行自动化Git提交

本文介绍基于ClaudeCodeSkill的Unity自动化Git提交助手——unity-git-commit,通过四大模块实现提交前的智能检查与安全修复:1)校验Git仓库状态;2)验证Unity项目文件(如排除Library/Temp,确保.meta文件完整);3)依据可配置的C#命名规范自动识别并安全修复命名问题(避免序列化、反射等高危场景误改);4)生成精准提交注释,但强制人工确认。全程仅本地commit,不自动推送或破坏性操作,保障安全。核心思想为“机械化工作交AI,关键决策留人工”,显著提升提交

Aman1984的博客 644

HarmonyOS 游戏与图形渲染入门:Canvas、渲染管线与掉帧排查

本文详解鸿蒙图形渲染选型与优化,指出多数“游戏感”需求仅需Canvas+requestAnimationFrame即可实现。通过deltaTime保证跨设备流畅性,优先使用animateTo声明式动画,避免逐帧绘制开销。强调性能优化应从主线程长任务、过度绘制、对象分配入手,结合Profiler排查掉帧。XComponent适用于高负载场景,但需权衡开发成本。最后提醒引擎迁移三要点:性能模型差异、打包流程匹配、版本兼容。核心结论:先用简单方案验证,再决定是否上引擎。

信息安全领域优质创作者|操作系统领域专家 423

Windows远程桌面实现之二十:实现 moonlight 游戏串流协议之(一)

本文介绍在xdisp_virt中集成Moonlight游戏串流协议的实现过程。基于开源项目Sunshine逆向的GameStream协议,作者从零研究并自研实现Moonlight服务端网络通信部分,涵盖mDNS设备发现、nvhttp/nvhttps加密通信、nvrtsp协议交互及三类UDP数据通道(视频、音频、控制)。重点解决多客户端并发问题,采用串行处理机制确保连接一致性。通过自定义证书验证与密钥管理,完成配对与安全通信,最终实现低延迟、高性能的游戏串流体验,显著优于WebRTC浏览器方案。

fanxiushu的专栏 168

二进制木马免杀-游戏嵌套与图标替换

二进制木马免杀-游戏嵌套与图标替换

2503_94637398的博客 238

Unity UGUI布局组件(LayoutGroup、ContentSizeFitter、LayoutElement)详解

UGUI 自动布局是一套的 C# 排版系统,和 Transform 原生锚点完全隔离;整套布局;最终输出只有对 RectTransform 的sizeDelta的赋值。

m0_63330263的博客 264

mark 黑塞《玻璃球游戏》

【最近在读黑塞的《玻璃球游戏》-“ai预言“ - 优快云 App】

2502_94306440的博客 192
上一篇: c语言练习 三子棋
下一篇: c语言基础笔记15
Ohrkaninchen
博客等级 码龄5年 18粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ohrkaninchen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值