C语言实战项目:贪吃蛇(1)

恶意代码防范技术原理-恶意代码概述 恶意代码是一种违背目标系统安全策略的程序代码,会造成目标系统信息泄露、资源滥用,破坏系统的完整性及可用性。它能够经过存储介质或网络进行传播,从一台计算机系统传到另外一台计算机系统,未经授权认证访问或破坏计算机系统包括计算机病毒( Computer Virus)、 蠕虫(Worms)、特洛伊木马(Trojan Horse)、逻辑炸弹( Logic Bombs)、 细菌(Bacteria)、恶意脚本(Malicious Scripts)和恶意ActiveX控件、间谍软件(Spyware)等。 阅读详情
AI摘要

本文介绍了使用C语言在Windows控制台中实现经典贪吃蛇游戏的设计与开发过程。涵盖了核心数据结构、游戏流程循环、碰撞检测、Windows API的应用及宽字符打印等内容,详细讲解了蛇的移动逻辑、食物生成、得分计算和游戏状态管理。

前言:

        通过持续数月的C语言系统学习,我们已经掌握了包括指针操作、结构体使用、文件IO等核心编程能力。为了检验学习成果并提升实战经验,在本篇技术博客中,我将带领大家开发一个具有里程碑意义的经典游戏项目 -- 贪吃蛇。

        

温馨提示:本篇博客为贪吃蛇游戏的前言准备。

        

一、贪吃蛇游戏效果演示

  游戏效果演示:

二、贪吃蛇游戏设计

        

2.1 贪吃蛇游戏的最终目标 

        

 使⽤C语⾔在Windows环境的控制台中模拟实现经典⼩游戏贪吃蛇。   

贪吃蛇游戏实现基本的功能:

        
• 贪吃蛇地图绘制

        
• 蛇吃⻝物的功能 (上、下、左、右⽅向键控制蛇的动作)

        
• 蛇撞墙死亡

        
• 蛇撞⾃⾝死亡

        
• 计算得分

        
• 蛇⾝加速、减速

        
• 暂停游戏

        

• 退出游戏

        

2.2贪吃蛇游戏的思维导图

        

贪吃蛇游戏的思维导图如下图所示:

                

        

2.3贪吃蛇游戏的核心逻辑

        

核心逻辑:循环内依次执行输入处理→蛇移动→碰撞检测→状态显示→休眠:

        

2.3.1核心数据结构

        

        采用链表存储蛇身:每个SnakeNode节点包含坐标(x,y)和指向下一节点的指针,通过 “头增尾删” 实现蛇的移动(吃食物时只增不删,长度增长)。

        

2.3.2游戏流程循环 

        

1. 初始化阶段

        

①控制台设置:调整窗口大小、标题,隐藏光标(提升视觉流畅度)。

        

②地图与蛇初始化:绘制边界(如上下左右的墙),生成初始蛇身(默认设置为 5 个节点,初始方向向右)。

        

③食物生成:随机生成坐标,确保不与蛇身重叠。

        

2. 运行循环(持续重复)

          

1.输入处理:

        

①监听键盘事件(方向键改方向、空格暂停 / 继续、F3 加速、F4 减速、ESC 退出)

        

②限制 “反向无效”(如当前向上时,按向下键不改变方向,避免瞬间自撞)。

        

2.蛇移动:

        

①按当前方向,在头部生成新节点(模拟 “前进”)。

        

②若吃到食物(新头节点坐标与食物坐标重合):不删除尾部节点,蛇长度 + 1,重新生成食物并加分。

        

③若没吃到食物:删除尾部节点(保持长度不变),并清除尾部节点的屏幕显示。

        

3.碰撞:

        

①撞墙:新头节点坐标超出地图边界。

        

②自撞:新头节点坐标与自身其他节点(非头、非尾)坐标重合。

        

③若碰撞,设置 “游戏结束” 状态,退出循环。

        

④状态显示:在屏幕右侧显示分数、速度等级、游戏状态(正常 / 暂停)。

        

⑤休眠控制:通过Sleep(速度)控制移动频率(速度越快,休眠时间越短,蛇移动越敏捷)。

        

3. 结束与重玩

①游戏结束:释放蛇身链表的内存,显示 “Game Over”。

        

②重玩询问:提示 “是否重玩(Y/N)”,根据输入决定是否重启 “初始化→运行循环”。

        

2.3.3关键机制细节

       

①移动的本质:链表的 “头插(前进)+ 尾删(保持长度)”,视觉上呈现蛇的 “移动” 效果。

        

②食物系统:随机生成 + 避蛇身检测,保证食物可被吃到;吃食物后长度增长、分数增加,形成 “成长激励”。

        

③碰撞判定:通过坐标比对,快速判断 “撞墙” 或 “自撞”,一旦触发则终止游戏循环。

        

④速度与策略:F3/F4 调整Sleep时长实现 “加速 / 减速”,同时关联分数变化(加速加分、减速减分),让玩家在 “风险(速度快易撞)” 和 “收益(加分多)” 间做选择。

         

三、贪吃蛇游戏设计的技术栈

         

1. 编程语言

        

        C 语言:游戏核心逻辑(如蛇的移动、碰撞检测、食物生成等)、数据结构定义、函数实现均使用 C 语言完成,包括结构体、枚举、指针、链表操作等 C 语言核心特性。

        

2. Windows API

        

游戏通过 Windows 系统提供的 API 实现控制台交互,主要涉及:

        

①控制台窗口控制:设置窗口大小,设置窗口标题。

        

②光标操作:隐藏和显示光标,定位光标位置(用于绘制蛇、食物、墙壁等元素)。

        

③键盘输入检测:实时获取键盘按键状态(如方向键、F3/F4、空格、ESC 等),实现对蛇的控制和游戏状态切换。

        

3. 数据结构

        

链表:

        

①蛇的身体通过链表连接,使用头插法添加新节点(蛇头移动)。

        

②通过遍历链表实现蛇身绘制、碰撞检测(撞自己)和内存释放。

        

结构体与枚举:

        

①存储蛇节点坐标,存储食物坐标和分数,整合蛇的核心信息(头节点、食物指针、方向、状态等)。

        

②用枚举定义蛇的移动方向(上下左右),用枚举定义游戏状态(正常运行、撞墙、撞自己、暂停等),使状态管理更清晰。

        

4. 控制台图形绘制

        

通过宽字符和光标定位在控制台绘制游戏元素:

        

①墙壁、蛇身、食物。

        

②游戏信息(分数、速度等级、操作提示)的文本绘制。

                

5. 游戏逻辑与状态管理

        

核心逻辑:

        

①蛇的移动:通过计算下一个节点坐标,结合方向枚举实现移动,并根据是否吃到食物决定是否增长蛇身或保持长度。

        

②碰撞检测:检测蛇头是否撞墙,检测蛇头是否撞到自身。

        

③分数与速度控制:吃食物增加分数,F3/F4 键调整速度(通过_speed控制休眠时间Sleep),并关联分数变化。

        

④状态检测:通过枚举管理游戏状态(正常运行、暂停、结束等),在循环中根据状态决定流程(继续运行、退出、重启等)。

        

6. 内存管理

        

①动态内存分配:使用malloc为蛇节点分配内存,避免栈内存溢出。

        

②内存释放:通过遍历链表释放所有蛇节点内存,防止内存泄漏。

        

7. 标准库与工具

        

①C 标准库:stdio.h(输入输出)、stdlib.h(内存分配、随机数)、time.h(srand初始化随机数种子,确保食物位置随机)、assert.h(断言指针有效性,调试用)。

        

②随机数生成:rand()结合time(0)生成随机食物坐标,确保食物位置不与蛇身或墙壁重叠。

         

四、Windows API的详解

        

4.1 win32API

        

        简单来说:Windows 是多作业系统,除了协调程序、分配内存、管资源,还像个 “服务站”—— 提供各种函数(服务)。应用程序调用这些函数,就能实现开窗口、画图形、用外设等操作,这类服务应用的函数叫 API;而 WIN32 API,就是 32 位 Windows 平台的这类编程接口。

        

4.2控制台主程序

        

        平常我们运⾏起来的⿊框程序其实就是控制台程序,如下图所示:

        

4.2.1设置窗口大小

        

我们可以使用一些cmd指令来设置控制台的长宽,将控制台的长,宽设置为100 和 30

        

例如:通过这段指令:mode con cols=100 lines=30

        

        

 4.2.2设置控制台名称

        

同时我们也可以设置,控制台的名称。

        

通过如下指令:title 贪吃蛇

        

4.2.3利用代码实现

        

当然我们也可以通过C语言代码,来实现控制台的大小和标题设置,通过system("指令")这个函数来实现

        

温馨提示:system("指令") 这个函数需要包含<windows.h>这个头文件         

void test01()
{
	system("mode con cols=130 lines=40");

	system("title 贪吃蛇");

	system("pause");
}

     

4.3控制台屏幕上的坐标

        

        COORD 是Windows API中定义的一个结构体,表示一个字符在控制台屏幕幕缓冲区上的坐标,坐标系(0,0) 的原点位于缓冲区的顶部左侧单元格。 

在控制台上的坐标系如下图所示:

        

COORD类型的声明:

typedef struct _COORD
{
    SHORT X;  // X坐标
    SHORT Y;  // Y坐标
} COORD, *PCOORD;
    
        
int main()
{
   //例如给坐标赋值:
   COORD  pos = { 10, 15 };
   return 0;
}

        

4.4通过句柄操作设备

        GetStdHandle是一个Windows API函数。它用于从一个特定的标准设备(标准输入、标准输出或标准错误)中取得一个句柄(用来标识不同设备的数值),使用这个句柄可以操作设备。

简单来说就相当于一个手柄,通过该手柄就可以控制设备了,这里我们不需要过多与纠结其函数是如何实现,我们仅需要明白它的功能和如何调用就已经够用了。

        

GetStdHandle函数原型:

        

        HANDLE GetStdHandle(DWORD nStdHandle);

        

它有三个参数:

        

1.STD_INPUT_HANDLE   获取标准输入设备

        

2.STD_OUTPUT_HANDLE  获取标准输出设备

        

3.STD_ERROR_HANDLE  获取标准错误设备

         

其中返回值HANDLE为一个void * 的指针,通过  typedef void *HANDLE  命名HANDLE。

                

这里我们只需要对控制台(标准输出)进行操作,所以我们仅需要用到获取标准输出设备,通过调用我们就可以进行操作控制台程序。

        

HANDLE GetStdHandle(STD_OUTPUT_HANDLE);

        

代码示例:

        

HANDLE hOutput = NULL;

//获取标准输出的句柄(用来标识不同设备的数值)
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);

        

4.5获取控制台光标信息

        

GetConsoleCursorInfo函数原型:

        

BOOL WINAPI GetConsoleCursorInfo(
        HANDLE hConsoleOutput,
        PCONSOLE_CURSOR_INFO lpConsoleCursorInfo
);   

        

参数一:获取标准输出的句柄:HANDLE hConsoleOutput

        

参数二:指向存放光标信息的结构体:PCONSOLE_CURSOR_INFO lpConsoleCursorInfo     

        

结构体_CONSOLE_CURSOR_INFO:主要用来存放控制台光标信息

        

typedef struct _CONSOLE_CURSOR_INFO

{

         DWORD dwSize;   //成员一 设置光标的大小

         BOOL  bVisible;    //成员二  设置光标是否可见

} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;

        

成员一:dwSize,由光标填充的字符单元格的百分⽐。 此值介于1到100之间。 光标外观会变化,范围从完全填充单元格到单元底部的⽔平线条。

        

成员二:bVisible,游标的可⻅性。 如果光标可⻅,则此成员为 TRUE

        

4.6设置控制台光标信息

        

SetConsoleCursorInfo函数:设置指定控制台屏幕缓冲区的光标的⼤⼩和可⻅性。

        

函数原型为:

        

BOOL WINAPI SetConsoleCursorInfo(
        HANDLE  hConsoleOutput,
        const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo
);

        

参数一:获取标准输出的句柄:HANDLE hConsoleOutput

        

参数二:指向存放光标信息的结构体:PCONSOLE_CURSOR_INFO lpConsoleCursorInfo 

        

4.7代码演示光标的设置

        

通过上面三个函数,我们就可以实现对光标大小和显示的操作

4.7.1设置光标大小         

        

初始时光标的大小默认为25,如图所示:

        

代码示例:将默认的光标大小设置为100

	//获得控制台窗口,进行使用
	HANDLE houtput = NULL;
	houtput=GetStdHandle(STD_OUTPUT_HANDLE);

	//定义储存控制台光标信息的结构体
	CONSOLE_CURSOR_INFO cursor_info = { 0 };

	//获得与houtput句柄相关的控制台光标的信息
	GetConsoleCursorInfo(houtput, &cursor_info);

	//修改光标的占比值
	cursor_info.dwSize = 100;


	//设置光标大小和光标可见度的函数
	SetConsoleCursorInfo(houtput, &cursor_info);

        

如图所示:

        

4.7.2设置光标是否可见

        

如图所示,在默认状态下光标为可见状态:

        

代码示例:将光标设置为不可见状态

	//获得控制台窗口,进行使用
	HANDLE houtput = NULL;
	houtput=GetStdHandle(STD_OUTPUT_HANDLE);

	//定义储存控制台光标信息的结构体
	CONSOLE_CURSOR_INFO cursor_info = { 0 };

	//获得与houtput句柄相关的控制台光标的信息
	GetConsoleCursorInfo(houtput, &cursor_info);

	//修改光标是否可见
	cursor_info.bVisible = false;

	//设置光标大小和光标可见度的函数
	SetConsoleCursorInfo(houtput, &cursor_info);

        

4.8设置光标的位置

        

 SetConsoleCursorPosition:设置指定控制台屏幕缓冲区中的光标位置

        

函数原型如下:

        

BOOL WINAPI SetConsoleCursorPosition(
        HANDLE hConsoleOutput,
        COORD  pos
);  

        

参数一:获取标准输出的句柄:HANDLE hConsoleOutput

        

参数二:存放位置信息的坐标: COORD  pos     

        

通过该函数,我们就可以设置指定控制台屏幕缓冲区中的光标位置,我们将想要设置的坐标信息放在COORD类型的pos中。

        

调⽤SetConsoleCursorPosition函数将光标位置设置到指定的位置。

        

4.8.1设置光标到指定的位置

//获得控制台窗口,进行使用
HANDLE houtput = NULL;
houtput=GetStdHandle(STD_OUTPUT_HANDLE);

//定义储存控制台光标信息的结构体
CONSOLE_CURSOR_INFO cursor_info = { 0 };

//获得与houtput句柄相关的控制台光标的信息
GetConsoleCursorInfo(houtput, &cursor_info);
    
//设置控制台坐标
COORD pos = { 10, 20 };
    
//设置指定位置光标
SetConsoleCursorPosition(houtput, pos);
    
//进行暂停观察
getchar();

        

4.8.2封装设置光标位置的函数

//封装一个函数,用来设置光标位置
void set_pos(short x, short y)
{
	HANDLE houtput= GetStdHandle(STD_OUTPUT_HANDLE);

	COORD pos = { x, y };

	SetConsoleCursorPosition(houtput, pos);
}

        

4.9获取按键情况

GetAsyncKeyState:将键盘上每个键的虚拟键值传递给函数,函数通过返回值来分辨按键的状态。

        

函数原型如下:

        

SHORT GetAsyncKeyState(int vKey);

        

参数分析:键盘上按键的虚拟键值 int vKey    

        

返回值分析:

        

1.GetAsyncKeyState 的返回值是short类型,在上⼀次调⽤ GetAsyncKeyState 函数后。

        

2.如果返回的16位的short数据中,最⾼位是1,说明按键的状态是按下,如果最⾼是0,说明按键的状态是抬起;

        

3.可以将返回值&0x1来进行检测:GetAsyncKeyState返回值的最低值是否为1

        

参考:虚拟键码表

        

代码示例1:定义宏判断按键是否被按下

#define KEY_PRESS(VK)  ( (GetAsyncKeyState(VK) & 0x1) ? 1 : 0 )

        

代码示例2:检测数字键0~9是否被按下

//通过定义宏来判断
#define KEY_PRESS(vk) ((GetAsyncKeyState(vk) & 1 ) ? 1 : 0 )
void test04()
{
	while (1)
	{
		if (KEY_PRESS(0x30))
		{
			printf("0\n");
		}
		else if (KEY_PRESS(0x31))
		{
			printf("1\n");
		}
		else if (KEY_PRESS(0x32))
		{
			printf("2\n");
		}
		else if (KEY_PRESS(0x33))
		{
			printf("3\n");
		}
		else if (KEY_PRESS(0x34))
		{
			printf("4\n");
		}
		else if (KEY_PRESS(0x35))
		{
			printf("5\n");
		}
		else if (KEY_PRESS(0x36))
		{
			printf("6\n");
		}
		else if (KEY_PRESS(0x37))
		{
			printf("7\n");
		}
		else if (KEY_PRESS(0x38))
		{
			printf("8\n");
		}
		else if (KEY_PRESS(0x39))
		{
			printf("9\n");
		}

	}

}

        

五、宽字符的打印

        

在贪吃蛇游戏中,我们采用宽字符进行界面渲染。游戏地图中的墙体使用宽字符□表示,蛇身使用●字符,食物则用★字符标识。与普通单字节字符不同,这些宽字符每个占据2个字节的存储空间。

        

对于宽字符的打印,需要进行本地化处理,通过如下函数进行本地化处理:

setlocale函数:进行本地化处理

  

函数原型如下所示:

              

        char* setlocale (int category, const char* locale);        

        

参数一:

        

• LC_COLLATE:影响字符串⽐较函数 strcoll() 和 strxfrm() 。

        
• LC_CTYPE:影响字符处理函数的⾏为。

        
• LC_MONETARY:影响货币格式。

        
• LC_NUMERIC:影响 printf() 的数字格式。

        
• LC_TIME:影响时间格式 strftime() 和 wcsftime() 。

        
• LC_ALL - 针对所有类项修改,将以上所有类别设置为给定的语⾔环境。

        

一般而言我们进行传入LC_ALL对所有类型进行修改。

        

参数二:

      

C标准仅定义了2种可能取值:"C"(正常模式)和" "(本地模式)

        

温馨提示:使用该函数,需要包含<locale.h>头文件

        

宽字符打印的注意事项:

        

1.宽字符的字⾯量必须加上前缀“L”,否则 C 语⾔会把字⾯量当作窄字符类型处理。

        

2.前缀“L”在单引号前⾯,表⽰宽字符,对应 wprintf() 的占位符为 %lc ;

        

3.在双引号前⾯,表⽰宽字符串,对应wprintf() 的占位符为 %ls 

        

代码示例1:打印单个宽字符

#include <stdio.h> 
#include<locale.h>

    
int main()
{
    setlocale(LC_ALL, "");

	char a = 'a';
	char b = 'b';
	printf("%c%c\n", a, b);

	wchar_t wc1 = L'★';
	wchar_t wc2 = L'我';
	wprintf(L"%lc \n%lc", wc1, wc2);

    return 0;
}

        

代码示例2:打印宽字符串

#include <stdio.h>
     
#include<locale.h>

int main()
{
    setlocale(LC_ALL, "");

	wprintf(L"Hello World\n");

    wchar_t wstr[] = L"宽字符字符串";
    
    wprintf(L"%ls",wstr);
		
    return 0;
}


        

既然看到这里了,不妨点赞+收藏,感谢大家,若有问题请指正。

c语言实战项目之一 贪吃蛇(源码免费开放) 朋友们,经过我的c语言前十章的知识,大家应该已经入门了,我个人认为学习c语言最好的方法就是造轮子,写项目就是最好的提高方法,可以把我们学过的知识串联起来。 今天我们写一个实战项目贪吃蛇:核心会用到数组和gotoxy();函数 我们先看看成品: 这是个看起来有点简陋的贪吃蛇程序,虽然简单但是写的时候发现问题解决问题是最宝贵的财富。 我们首先来看这个程序有什么: 1.地图 2.蛇 3.食物 根据这三个我们来对贪吃蛇程序分模块: 1.地图模块 2.随机生成食物模块 3.初始化蛇身模块 阅读详情

相关推荐

C语言——贪吃蛇小游戏

基于Ncurse图形库的C语言小游戏

weixin_54859557的博客 7569

渗透测试工具集(非常详细),从零基础入门到精通,看完这一篇就够了(附安装)

文件格式和网络协议剖析语言和Web IDE,使用C ++,C#,Java,JavaScript,Perl,PHP,Python,Ruby生成解析器。- 在线密码破解工具,内置支持许多网络协议,包括HTTP,SMB,FTP,telnet,ICQ,MySQL,LDAP,IMAP,VNC等。我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。- Perl脚本,用于枚举域中的DNS信息,尝试区域传输,执行强力字典样式攻击,然后对结果执行反向查找。

leah126的博客 3211

【华为OD】C卷真题 200分: 跳马 python代码实现[思路+代码]

马是象棋(包括中国象棋和国际象棋)中的棋子,走法是每步直一格再斜一格,即先横着或直着走一格,然后再斜着走一个对角线,可进可退,可越过河界,俗称“马走‘日’字。给顶m行n列的棋盘(网格图),棋盘上只有有棋子象棋中的棋子“马”,并且每个棋子有等级之分,等级为k的马可以跳1~k步(走的方式与象棋中“马”的规则一样,不可以超出棋盘位置),问是否能将所有马跳到同一位置,如果存在,输出最少需要的总步数(每匹马的步数相加),不存在则输出-1。

十年以上编程经验的干货分享 505

C语言实战项目:贪吃蛇(1)。

贪吃蛇是一款经典的游戏,适合作为C语言实战项目。通过实现贪吃蛇,可以掌握控制台编程、键盘输入处理、链表操作等核心技能。以下将分模块介绍贪吃蛇的实现方法,并提供完整代码示例。贪吃蛇的核心逻辑包括地图绘制、蛇身移动、食物生成和碰撞检测。使用控制台作为显示界面,通过键盘方向键控制蛇的移动方向。初始化游戏时需要设置地图边界、蛇的初始位置和长度。蛇身可以用链表结构存储,每个节点代表蛇的一个身体部分。地图由边界墙和空白区域组成,使用二维字符数组表示。地图由边界墙和空白区域组成,使用二维字符数组表示。

YtP_j7gh的博客 274

Linux环境下的C语言贪吃蛇游戏开发实战

C语言的编译过程通常涉及预处理、编译、汇编和链接这四个步骤。首先,预处理器处理源代码文件中的宏定义和文件包含等指令。接下来,编译器将预处理后的代码转换成汇编代码,然后汇编器将汇编代码转换成机器码。最后,链接器将这些机器码文件和库文件链接成可执行文件。结构体(struct)是C语言中一种复合数据类型,它允许将不同类型的数据项组合成一个单一的类型。结构体成员可以是不同的数据类型,包括基本数据类型、数组、甚至是指向其他结构体的指针。在定义结构体时,通常使用关键字struct。

weixin_42527589的博客 710

C语言实战项目:贪吃蛇(2)

想亲手用 C 语言写个贪吃蛇游戏?这篇指南超适合你!从数据结构到游戏循环,从技术细节到完整流程,全是实用干货,C 语言新手也能轻松入门,手把手带你搞定属于自己的控制台小游戏!

一枚菜鸟程序员的飞行之路 2708

[C语言]实战项目1 贪吃蛇的代码实现

不是完全体 没有包含自动寻路 部分函数未展示

HYpromax的博客 142

maya权重拷贝一对一,一对多

是不是有时候盔甲很多很碎头很大,用代理一个个拷贝很麻烦吧 用下面代码直接运行进行一对多或者一对一拷贝 第一个先选择参考物体,加选其他一堆有的没的有权重或没权重的物体执行一键拷贝,就可以啦 以下是源码送上,带走吧 ------------------------ #! -*- coding:utf -8 -*- #author:liubingdong #date:20...

weixin_30852367的博客 1531

用C语言写贪吃蛇:从0到1的SDL2实战教程(附完整项目代码)

本教程通过C语言和SDL2库从零开始实现贪吃蛇游戏,涵盖环境搭建、数据结构设计、游戏逻辑与图形渲染。你将实践结构体、指针、链表、文件I/O等核心概念,并附完整项目代码,是提升C语言实战能力的绝佳项目。

u9v0w的博客 502

AI Agent辅助企业财务分析与预测

企业财务分析与预测是企业管理中至关重要的环节,准确的财务分析与预测能够帮助企业管理者做出明智的决策,合理规划资源,降低风险。然而,传统的财务分析与预测方法往往依赖于人工经验和简单的统计模型,存在效率低、准确性差等问题。随着人工智能技术的飞速发展,AI Agent作为一种智能的软件实体,能够自主地感知环境、做出决策并采取行动,为企业财务分析与预测带来了新的解决方案。

AI天才研究院 919

Android息屏后台任务保活实战:从定时器失效到厂商白名单破解

本文深入探讨了Android应用在息屏后定时任务失效的根源,即系统为省电而触发的休眠机制。文章提供了从传统方案失效分析到实战破解的完整路径,核心在于引导用户将应用加入电池优化白名单并开启自启动权限,从而合法绕过限制。同时,结合WorkManager、AlarmManager等可靠定时方案,实现稳定的后台任务执行。

weixin_28475533的博客 421

c语言实战之贪吃蛇

c语言实战之贪吃蛇

2302_79539362的博客 1万+

P1196吃糖果游戏解题报告

 Name: P1196吃糖果游戏 Matrix67 第一次模拟赛 系列   Copyright: 始发于goal00001111的专栏;允许自由转载,但必须注明作者和出处  Author:  goal00001111  Date: 18-12-08 19:47  Description: 描述 Description     Matrix67和Shadow正在做一个小游戏。桌子上放着两堆糖果,M

goal00001111的专栏 2877

C语言项目实践——贪吃蛇

C语言与数据结构的第一个项目——贪吃蛇详解!!!

hu_ju_hong的博客 4986

抖音创作者必备工具!免费一键批量下载无水印视频 + 一键提取抖音视频文案

抖音创作者必备工具!免费一键批量下载无水印视频 + 一键提取抖音视频文案

XiaoqiangClub的博客 3359

基于深度学习的图像识别技术在农业领域中的应用

是识别"病害种类"还是"病害严重度分级"?前者是分类,后者常需分割或分级回归。是叶片级(离体叶片图像)、植株级(田间单株)、地块级(无人机俯拍)?视角不同,模型差异巨大。实时无人机巡检可能要求 < 50 ms/帧(Jetson Orin),而离线测报可接受秒级推理。类别标签、结构化 JSON、GIS 图斑、报警事件?

AI天才研究院 2160

C语言:项目实践(贪吃蛇)

相信大家都玩过贪吃蛇这款游戏吧,贪吃蛇是久负盛名的游戏,它也和俄罗斯方块,扫雷等游戏位列经典游戏的行列,那贪吃蛇到底是怎么实现的呢?今天,我就用C语言带着大家一起来实现一下这款游戏,从设计到代码的实现可以帮助我们提升编程能力和逻辑能力

weixin_66058866的博客 1万+

精读204页华为的流程管理(文末附下载链接)

链接:https://pan.baidu.com/s/1eEwdBR5c0PIxkOrNhDZcGg?pwd=wha2 提取码:wha2 复制这段内容后打开百度网盘手机App,操作更方便哦。,以提升企业运营效率和竞争力,同时解决了诸多业务痛点,为华为的全球化发展提供了有力支撑。华为的流程管理对其发展起着关键作用,通过构建完善的流程体系,提升了企业运营效率与竞争力。华为的流程管理在企业发展中至关重要,其围绕。,并通过流程变革不断优化。在流程管理过程中,强调。构建了全面的流程体系。

cdfunlove的博客 282

C语言项目实战——贪吃蛇游戏,附源码

写一个较为基本的贪吃蛇游戏,附源码,亲测可用。

qq_57263380的博客 7650

【WRF后处理】基于wrf-python处理wrf运行结果wrfout_d01

基于wrf-python处理wrf运行结果wrfout_d01

WW、forever的博客 5207

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C语言:【项目实现】贪吃蛇

(3).GetStdHandle函数:用于从一个特定的标准设备(标准输入(例如键盘),标准输出(屏幕),标准错误)中获得一个句柄(换句话说,就是你想要去操作一个设备,你就得去获得这个设备的一些数据,(比如说:你现在想要去使用锅,那么你就得抓住这口锅的手柄,这样你才能去操作这口锅)这里的句柄和锅的手柄是一个道理,当我们得到这个句柄之后,我们就可以去操作这个设备了)。//(HANDLE是句柄的类型,DWORD是GetStdHandle参数的类型,nStdHandle是参数的取值)

2301_81390458的博客 1928

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C语言项目实战:贪吃蛇

C语言的内容就到此结束了,后续将从数据结构的顺序表开始愿与你一同在学习的道路上走得更远,与诸君共勉!

x3262551980的博客 2488

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: 【数据结构指南】双向链表
下一篇: C语言实战项目:贪吃蛇(2)
高山有多高
博客等级 码龄2年 844粉丝 89原创
评论 30
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值