- 博客(64)
- 收藏
- 关注

原创 C语言游戏实战(12):植物大战僵尸(坤版)
本游戏使用C语言和easyx图形库编写,通过这个项目我们可以深度的掌握C语言的各种语言特性和高级开发技巧,以及锻炼我们独立的项目开发能力,在开始编写代码之前,我们需要先了解一下游戏的基本规则和功能:游戏界面:游戏界面是一个矩形区域,玩家可以在区域内进行植物的放置和铲除等操作。不同的植物有不同的功能,在这里我们可以僵尸植物分为三大类:1. 生产型植物(如太阳花):这种植物的特点是在一定的时间生产出太阳,以增加太阳的产量。
2024-06-10 19:07:24
129322
189

原创 c语言游戏实战(10):坤坤的篮球回避秀
这款简易版的球球大作战是博主耗时两天半完成的,玩家需要控制坤坤在游戏界面上移动,来躲避游戏界面上方不断掉下来的篮球。本游戏使用C语言和easyx图形库编写,旨在帮助初学者了解游戏开发的基本概念和技巧。在开始编写代码之前,我们需要先了解一下游戏的基本规则和功能:游戏界面:游戏界面是一个矩形区域,玩家可以在这个区域内控制球的移动。坤坤:玩家控制的坤坤可以在游戏界面内自由移动,按下特定的按键后可以跳跃。篮球:篮球在游戏界面的正上方源源不断地生成,并下降。
2024-06-04 20:09:21
29978
63

原创 C语言游戏实战(4):人生重开模拟器
人生重开模拟器是前段时间非常火的一个小游戏,接下来我们将一起学习使用c语言写一个简易版的人生重开模拟器。
2024-06-04 20:09:06
29637
31

原创 C语言游戏实战(9):球球大作战
这款简易版的球球大作战是一款单人游戏,玩家需要控制一个小球在地图上移动,吞噬其他小球来增大自己的体积。本游戏使用C语言和easyx图形库编写,旨在帮助初学者了解的基本概念和技巧。在开始编写代码之前,我们需要先了解一下游戏的基本规则和功能:游戏界面:游戏界面是一个矩形区域,玩家可以在这个区域内控制球的移动。玩家小球:玩家控制的小球可以在游戏界面内自由移动,按下空格键可以加速。其他小球:其他小球又分为食物小球,和ai控制的小球。
2024-06-03 21:27:17
129198
133
原创 【每日算法】专题_栈
本文总结了字符串处理中的常见算法思路和典型例题。算法思路包括水平/垂直扫描法、中心扩展法、双指针逆序处理等,适用于公共前缀、回文子串、字符串加减乘等问题。通过四个例题详细解析:14题用水平/垂直扫描法找最长公共前缀;5题采用中心扩展法求最长回文子串;67题通过双指针逆序处理实现二进制加法;43题模拟竖式乘法完成字符串相乘。各算法均注重边界处理、进位管理和结果修正,时间复杂度多为O(n²)或O(n*m),空间复杂度通常为O(n)或O(1)。文中提供了C++实现代码,并比较了不同方法的适用场景和效率特点。
2025-07-16 12:53:53
543
原创 【每日算法】专题十_字符串
本文总结了字符串处理中的常见算法思路和典型例题。算法思路包括水平/垂直扫描法、中心扩展法、双指针逆序处理等,适用于公共前缀、回文子串、字符串加减乘等问题。通过四个例题详细解析:14题用水平/垂直扫描法找最长公共前缀;5题采用中心扩展法求最长回文子串;67题通过双指针逆序处理实现二进制加法;43题模拟竖式乘法完成字符串相乘。各算法均注重边界处理、进位管理和结果修正,时间复杂度多为O(n²)或O(n*m),空间复杂度通常为O(n)或O(1)。文中提供了C++实现代码,并比较了不同方法的适用场景和效率特点。
2025-07-15 23:59:07
551
原创 c语言游戏实战(10):坤坤的篮球回避秀
这款小游戏是博主耗时两天半完成的,玩家需要控制坤坤在游戏界面上移动,来躲避游戏界面上方不断掉下来的篮球。本游戏使用C语言和easyx图形库编写,旨在帮助初学者了解游戏开发的基本概念和技巧。在开始编写代码之前,我们需要先了解一下游戏的基本规则和功能:游戏界面:游戏界面是一个矩形区域,玩家可以在这个区域内控制球的移动。坤坤:玩家控制的坤坤可以在游戏界面内自由移动,按下特定的按键后可以跳跃。篮球:篮球在游戏界面的正上方源源不断地生成,并下降。
2025-07-15 23:48:22
209
原创 【每日算法】专题八_分治_归并排序
归并排序是一种采用分治策略的稳定排序算法,时间复杂度为O(nlogn)。其核心步骤包括:分解数组、递归排序子数组、合并有序子数组。合并时通过临时数组比较元素并排序。该算法可用于解决多种问题:(1)普通数组排序;(2)统计逆序对:在合并过程中比较左右子数组元素并计数;(3)计算右侧较小元素:通过索引数组映射统计结果;(4)翻转对检测:先双指针扫描满足条件的元素对再合并。归并排序的分治特性使其在保持高效的同时,能灵活处理各类衍生问题。
2025-07-11 23:06:39
905
原创 【Linux】进程控制(2)
本文介绍了进程程序替换和Shell命令行解释器的实现原理。在进程替换部分,讲解了fork()后通过exec函数簇加载新程序的原理,重点分析了execve系统调用及其衍生函数的使用方法。在Shell实现部分,详细解析了Shell的工作流程:获取命令行、解析参数、创建子进程、执行程序替换和等待子进程退出。文章还提供了一个完整的Shell实现代码,展示了如何构建命令行提示符、处理用户输入、解析命令参数,并区分内建命令和外部命令的执行过程。通过环境变量管理和进程控制,该Shell能够实现基本的命令行交互功能。
2025-07-11 19:19:20
293
原创 【每日算法】专题六_模拟
文章摘要:本文介绍了模拟算法思想及其在LeetCode典型问题中的应用。模拟算法的核心是按照问题逻辑逐步执行,将实际场景转化为代码操作。文中通过五道例题(替换问号、提莫攻击、Z字形变换、外观数列、数青蛙)详细解析了模拟算法的实现步骤:1)问题场景分析;2)状态转移建模;3)关键条件判断;4)结果计算。这些案例展示了如何通过贪心策略、状态机等方法实现线性时间复杂度,涵盖字符串处理、时间计算、排列重组等场景。模拟算法的优势在于直观反映问题本质,通常具有O(n)时间复杂度和O(1)或O(n)空间复杂度。
2025-07-09 23:28:26
1273
3
原创 【Linux】基础开发工具(3)
Git是Linus Torvalds于2005年开发的分布式版本控制系统,旨在解决集中式系统的性能问题。文章介绍了Git的基本操作(安装、克隆、提交、推送等)和常见命令(add/commit/push/pull)。同时讲解了Linux下使用gdb/cgdb进行程序调试的方法,包括调试模式编译、断点设置、变量查看等技巧,并推荐使用cgdb提升调试效率。最后还介绍了条件断点等高级调试功能。
2025-07-08 21:06:40
1405
3
原创 【每日算法】专题七_分治 - 快速排序
摘要: 快速排序(QuickSort)是一种基于分治思想的高效排序算法,通过选择基准点将数组划分为子数组并递归排序。其平均时间复杂度为O(nlogn),但最坏情况下可能退化至O(n²)。优化方法包括随机选择基准点和使用三指针划分。该算法适用于多种场景,如颜色分类(75题)、排序数组(912题)、查找第K大元素(215题)和库存管理(LCR159题)等。三指针法(left、i、right)能够高效处理0、1、2分类或重复元素,而随机化基准选择避免最坏情况。分治策略在筛选问题中显著提升效率,如仅需前cnt个元素
2025-07-07 22:25:23
661
原创 【Linux】基础开发工具(1)
摘要:本文介绍了vim编辑器的基本使用方法,包括三种模式切换(正常模式、插入模式、末行模式),常用光标移动指令(h/j/k/l、G、$等),文本编辑操作(删除、复制、替换、撤销),以及vim配置方法(.vimrc文件设置语法高亮、行号等)。还讲解了插件安装步骤,如TagList和WinManager插件,帮助用户扩展vim功能。最后提到可通过vimtutor命令获取更详细的使用手册。
2025-07-06 23:53:57
900
原创 【每日算法】专题五_位运算
按位与(&):有 0 就是 0按位或(|):有 1 就是 1按位异或(^):相同为 0,相异为 1 / 无进位相加按位取反(~):逐位翻转,0→1,1→0左移(<<):整体左移,右侧补 0右移(>>):整体右移,左侧补符号位(正补 0,负补 1)位图的核心思想是,通过每一位的 0/1 标记 “不存在 / 存在”,将离散数据映射到连续位空间,利用位运算实现高效存储与操作。n & -n。
2025-07-05 16:59:29
439
原创 【Linux】基础开发工具(2)
1-1 背景知识1. 预处理(进⾏宏替换/去注释/条件编译/头⽂件展开等)2. 编译(⽣成汇编)3. 汇编(⽣成机器可识别代码)4. 连接(⽣成可执行文件或库文件)1-2 gcc编译选项格式gcc [选项要编译的⽂件选项] [⽬标⽂件1-2-1 预处理(进⾏宏替换)预处理功能主要包括宏定义,⽂件包含,条件编译,去注释等。预处理指令是以#号开头的代码⾏。实例:选项“-E”,该选项的作⽤是让 gcc 在预处理结束后停⽌编译过程。
2025-06-27 20:19:23
1102
原创 【每日算法】专题二_滑动窗口
双指针滑动窗口算法通过左右指针动态调整窗口范围,将时间复杂度优化至O(n)。右指针主动扩展窗口探索新元素,左指针被动收缩窗口以满足约束条件,如子数组和、字符唯一性等。典型应用包括:寻找最短子数组(209题)、最长无重复子串(3题)等。该算法避免了暴力枚举,通过单次遍历高效解决问题,适用于连续子数组/子串类问题。
2025-06-24 02:58:18
842
原创 【Linux】权限
(可理解为 “团队”),系统里的用户可加入多个组,访问文件时,若用户属于该文件的 “所属组”,则匹配 “组权限” 规则。,既避免了权限过度开放导致的安全问题,又简化了权限配置流程,让不同用户、场景能灵活管控文件访问权限,是 Linux 多用户环境下保障系统有序、安全运行的关键机制。在跟目录下建立一个共享目录,开放rwx权限,这样就能多个用户共同修改和查看一个配置文件了。(其他用户写权限被屏蔽 ),防止文件因默认权限太开放,被无关用户随意修改、删除。权限的本质是:控制用户对文件、目录的访问与操作权限。
2025-06-17 00:12:53
760
原创 【每日算法】专题一_双指针
本文摘要:文章整理了8道经典双指针算法题目及其解法,涵盖数组处理、数学运算和搜索问题。包括移动零、复写零、快乐数判断、盛水容器最大化、有效三角形计数、两数之和、三数之和及四数之和等问题。每种解法都利用双指针特性优化时间复杂度,通过有序数组的扫描和状态转移来减少遍历次数。重点展示了如何通过固定基准值、移动指针和跳过重复元素等技巧实现高效求解,并处理了数值溢出等特殊情况。这些示例体现了双指针算法在降低时间复杂度(常为O(n)或O(n²))方面的优势。
2025-06-16 15:01:24
390
原创 【Linux】Linux基础指令2
本文介绍了Linux系统中常用的文件操作指令及时间日历命令,包括:文件操作指令:cp(复制)、mv(移动/重命名)、cat(查看内容)、more/less(分页查看)、head/tail(查看开头/结尾内容),详细说明各命令的语法、功能及常用选项;管道操作符(|)的使用方法;时间相关命令:date(显示/设置时间,时间戳转换)、cal(日历显示);find命令的文件查找功能。文章通过对比more和less的差异,并提供了各命令的典型用法示例,帮助用户掌握Linux基础文件管理和时间操作技能。
2025-06-06 01:25:31
835
原创 【Linux】Linux基础指令1
摘要:本文介绍了Linux常用文件操作命令及其语法和功能。1.ls命令:列出目录内容,常用选项包括-a显示隐藏文件、-l显示详细信息、-R递归显示等。2.pwd命令:显示当前工作目录。3.cd命令:切换目录,支持绝对/相对路径和特殊符号如..和~。4.touch命令:创建文件或修改文件时间属性。5.mkdir/rmdir命令:创建/删除目录,其中rmdir只能删除空目录。6.rm命令:删除文件或目录,支持-r递归删除。7.alias命令:为命令创建别名。8.man命令:查看命令帮助手册,分为9个章节。这些命
2025-06-05 18:13:20
688
原创 【C++】vector的模拟实现
这篇文章详细介绍了如何模拟实现C++中的vector容器。主要内容包括:1. 基本结构设计,使用三个指针管理内存;2. 关键功能实现:容量管理(reserve)、元素操作(push_back/pop_back)、插入删除(insert/erase)、大小调整(resize)等;3. 特殊成员函数实现:拷贝构造、迭代器构造、赋值重载和析构;4. 注意事项:如扩容时的深拷贝问题、迭代器失效问题等。文章提供了完整的实现代码,展示了vector的核心功能和实现细节,特别强调了内存管理和数据拷贝的正确处理方式。
2025-06-01 22:37:16
528
原创 【C++】string类
本文介绍了C++标准库中string类的基本使用和相关特性。主要内容包括:string类的基本介绍及头文件包含要求;C++11中auto关键字的新用法及其在变量声明中的应用;范围for循环的语法及底层实现原理。详细说明了string类的常用接口,包括构造方法(空字符串构造、字符数组构造、拷贝构造等)、容量操作(size/length/capacity等)、访问及遍历操作(下标访问、迭代器遍历、范围for循环)。文章还强调了auto关键字的使用限制,以及范围for循环对数组和容器的支持。
2025-06-01 15:33:47
716
原创 【C++】二叉搜索树
二叉搜索树(BST)是一种特殊的二叉树,其左子树的所有节点值小于等于根节点,右子树的所有节点值大于等于根节点。BST支持插入、查找和删除操作,其性能在最优情况下(完全二叉树)为O(log2N),但在最差情况下(单支树)退化为O(N)。为了提高效率,引入了平衡二叉搜索树(如AVL树和红黑树)。BST的插入操作根据节点值大小决定插入位置,查找操作从根节点开始比较,删除操作则根据节点子节点情况分为四种处理方式。BST的实现代码展示了其基本结构和操作,包括节点定义、插入、查找和删除功能。
2025-05-16 12:24:22
717
原创 【c++】继承
继承是面向对象程序设计中的重要机制,允许在保持原有类特性的基础上进行扩展,生成派生类。通过继承,可以复用基类的代码,减少冗余。例如,Student和Teacher类可以继承Person类,共享姓名、地址等属性,同时增加各自特有的属性和方法。继承分为单继承和多继承,多继承可能导致菱形继承问题,即数据冗余和二义性。虚继承可以解决这一问题。派生类的构造函数、拷贝构造函数、赋值运算符和析构函数需要调用基类对应的函数来完成基类成员的初始化或清理。继承体现了“is-a”关系,而组合体现了“has-a”关系。组合的耦合度
2025-05-13 23:17:43
918
原创 【C++】类和对象(下)
尽量使⽤初始化列表初始化,因为那些你不在初始化列表初始化的成员也会⾛初始化列表,如果这个成员在声明位置给了缺省值,初始化列表会⽤这个缺省值初始化。对于没有显⽰在初始化列表初始化的⾃定义类型成员会调⽤这个成员类型的默认构造函数,如果没有默认构造会编译错误。C++11⽀持在成员变量声明的位置给缺省值,这个缺省值主要是给没有显⽰在初始化列表初始化的成员使⽤的。每个成员变量在初始化列表中只能出现⼀次,语法理解上初始化列表可以认为是每个成员变量定义初始化的地⽅。D. 输出 1 随机值。化,否则会编译报错。
2024-10-10 23:19:32
1318
原创 【C++】类和对象(中)
类的默认成员函数主要包括。需要注意的是这6个中最重要的是前4个,最后两个取地址重载不重要,我们稍微了解⼀下即可。2. 构造函数构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并 不是开空间创建对象(我们常使⽤的局部对象是栈帧创建时,空间就开好了),⽽是对象实例化时初始化对象。构造函数的本质是要替代我们以前Stack和Date类中写的Init函数的功能,构造函数⾃动调⽤的特点就完美的替代的了Init。构造函数的特点:1.函数名与类名相同。2.⽆返回值。
2024-10-09 23:22:08
866
原创 【C++】类和对象(上)
•class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。•为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_ 或者 m开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。•C++中struct也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是。
2024-10-08 23:24:25
949
原创 【C++】入门基础
• 定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。• namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以上面程序中的rand不再冲突了。要想使用命名空间域中的变量需要在变量名前加命名空间域名::(其中::是预作用限定符),如下图所示。预作用限定符(::)是C++中一个非常重要的运算符,主要用于解决命名冲突和指明成员的具体归属。
2024-07-30 22:25:39
1216
原创 动态内存管理
但是上述的开辟空间的⽅式有两个特点:• 空间开辟⼤⼩是固定的。• 数组在申明的时候,必须指定数组的⻓度,数组空间⼀旦确定了⼤⼩不能调整但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间⼤⼩在程序运⾏的时候才能知道,那数组的编译时开辟空间的⽅式就不能满⾜了。C语⾔引⼊了动态内存开辟,让程序员⾃⼰可以申请和释放空间,就⽐较灵活了。
2024-06-08 23:23:51
1339
原创 【C语言】自定义类型:联合体和枚举
像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间所以联合体也叫:共⽤体。因为共用着一块空间,所以当给联合体其中一个成员赋值,其他成员的值也跟着变化。
2024-06-08 23:23:40
1339
原创 c语言游戏实战(8):飞机大作战
飞机大作战游戏是一种非常受欢迎的射击类游戏,玩家需要控制一架战斗机在屏幕上移动,击落敌机以获得分数。本游戏使用C语言编写,旨在帮助初学者了解游戏开发的基本概念和技巧。在开始编写代码之前,我们需要先了解一下游戏的基本规则和功能:游戏界面:游戏界面是一个矩形区域,玩家可以在这个区域内控制战斗机移动和射击。战斗机:玩家控制的战斗机可以在游戏界面内自由移动,按下特定键可以发射子弹和开启技能击落敌机。敌机:敌机会从屏幕的一侧出现,并沿着直线路径向另一侧移动。玩家需要击落敌机以获得分数。
2024-06-07 23:11:34
17638
21
原创 c语言游戏实战(3):三子棋
三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏规则是双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成就视为胜利。但因棋盘太小,三子棋在很多时候会出现和棋的局面。
2024-06-07 23:10:47
5058
4
原创 vs实用调试技巧
我们在写程序的时候可能多多少少都会出现一些bug,使我们的程序不能正常运行,所以为了更快更好的找到并修复bug,使这些问题迎刃而解,学习好如何调试代码是每个学习编程的人所必备的技能。
2024-06-06 22:04:59
1642
4
原创 【数据结构初阶】栈和队列
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)(即最后面进的数据会最先出来)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。
2024-06-06 22:04:48
826
原创 【C语言】预处理详解
define reg register //为 register这个关键字,创建⼀个简短的名字;) //⽤更形象的符号来替换⼀种实现case //在写case语句的时候⾃动把 break写上。// 如果定义的 stuff过⻓,可以分成⼏⾏写,除了最后⼀⾏外,每⾏的后⾯都加⼀个反斜杠(续⾏符)。#define 机制包括了⼀个规定,允许把参数替换到⽂本中,这种实现通常称为宏(macro)或定义宏(define macro)。
2024-06-05 21:54:18
846
原创 【C语言】编译和链接
1. 翻译环境和运行环境1. 翻译环境和运行环境在ANSI C的任何⼀种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执⾏的机器指令(⼆进制指令)。第2种是执⾏环境,它⽤于实际执⾏代码。
2024-06-05 21:54:05
1271
原创 【C语言】文件操作
每个被使⽤的⽂件都在内存中开辟了⼀个相应的⽂件信息区,⽤来存放⽂件的相关信息(如⽂件的名字,⽂件状态及⽂件当前的位置等)。我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输⼊输出 操作各不相同,为了⽅便程序员对各种设备进⾏⽅便的操作,我们抽象出了流的概念,我们可以把流想象成流淌着字符的河。如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们可以使⽤⽂件。
2024-06-01 23:56:40
1682
2
原创 C语言游戏实战(11):贪吃蛇大作战(多人对战)
这款贪吃蛇大作战是一款多人游戏,玩家需要控制一条蛇在地图上移动,吞噬其他蛇或者食物来增大自己的蛇身长度和宽度。本游戏使用C语言和easyx图形库编写,旨在帮助初学者了解游戏开发的基本概念和技巧。在开始编写代码之前,我们需要先了解一下游戏的基本规则和功能:1. 游戏界面:游戏界面是一个矩形区域,玩家可以在这个区域内控制蛇的移动。2. 玩家贪吃蛇:玩家控制的小球可以在游戏界面内自由移动,按下空格键可以加速。3. ai贪吃蛇:ai贪吃蛇会在游戏界面中随机移动。
2024-05-19 23:56:05
3505
11
C语言游戏实战(11):植物大战僵尸(坤版)的图片素材
2024-05-18
C语言-坤坤的篮球回避秀
2024-03-07
c语言游戏实战(10):坤坤的篮球回避秀的图片资源
2024-03-05
c语言-飞机大作战软件
2024-03-04
c语言-球球大作战软件
2024-03-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人