手把手教你写贪吃蛇(C语言)

本文手把手教你使用C语言编写贪吃蛇游戏,涉及知识点包括数组、结构体、全局变量等,详细介绍了相关库函数如等的使用,并讲解了游戏的子函数实现,包括光标移动、画图、按键操作等,提供了完整的项目代码。
摘要由CSDN通过智能技术生成

目录

 

前言:程序包下载

一、涉及C语言知识点

二、贪吃蛇相关库函数及其头文件简介:

1、#include

(1)void fflush(stdin)

(2)CONSOLE_CURSOR_INFO

(3)GetConsoleCursorInfo

(4)SetConsoleCursorInfo

2、#include

(1)rand()

(2)void srand(unsigned int seed);

3、#include

(1)int kbhit(void);

(2)int getch(void)

4、#include

(1)HANDLE GetStdHandle( DWORD nStdHandle );

(2)COORD coord={x,y};

(3)SetConsoleCursorPosition(HANDLE ,coord); 

5、#include

(1)time_t time(time_t * timer)

三、贪吃蛇相关子函数

1、光标移动到 (X,Y)

2、画墙体、蛇、食物 

3、按键操作

4、食物刷新

5、蛇的状态

6、开始游戏

7、难度选择

8、主菜单

9、主函数

四、项目代码


前言:程序包下载

下载方式一:CSDN下载:https://download.csdn.net/download/qq_38351824/12142282

下载方式二:微信公众号 ① 关注Tech云   ② 暂不提供下载链接

下载方式三:文章下评论

一、涉及C语言知识点

数组、结构体、全局变量、局部变量、宏定义、条件语句、循环语句

二、贪吃蛇相关库函数及其头文件简介:

1、#include<stdio.h>

(1)void fflush(stdin)

① 简介

      清空输入缓冲区,通常是为了确保不影响后面的数据读取(例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行 fflush(stdin);

② 语法

int fflush(FILE *stream)

(2)CONSOLE_CURSOR_INFO

① 简介

        包含有关控制台光标的信息。

② 语法

typedef struct _CONSOLE_CURSOR_INFO {
  DWORD dwSize;
  BOOL  bVisible;
} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;

③ 参数

       dwSize:光标填充的字符单元格的百分比。该值介于1和100之间。光标外观会发生变化,从完全填充单元格到显示为单元格底部的水平线。

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

(3)GetConsoleCursorInfo

① 简介

        获取有关指定控制台屏幕缓冲区的光标大小和可见性的信息。

② 语法

BOOL WINAPI GetConsoleCursorInfo(
  _In_  HANDLE               hConsoleOutput,
  _Out_ PCONSOLE_CURSOR_INFO lpConsoleCursorInfo
);

③ 参数

参数:

  • hConsoleOutput 控制台屏幕缓冲区的句柄。句柄必须具有GENERIC_READ访问权限。
  • lpConsoleCursorInfo 指向CONSOLE_CURSOR_INFO结构的指针,该结构接收有关控制台游标的信息。

返回值:

  • 如果函数成功,则返回值为非零值。
  • 如果函数失败,则返回值为零。

(4)SetConsoleCursorInfo

① 简介

设置指定控制台屏幕缓冲区的光标大小和可见性。

② 语法

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

③ 参数

参数:

  • hConsoleOutput 控制台屏幕缓冲区的句柄。句柄必须具有GENERIC_READ访问权限。
  • lpConsoleCursorInfo 指向CONSOLE_CURSOR_INFO结构的指针,该结构为控制台屏幕缓冲区的游标提供新规范。

返回值:

  • 如果函数成功,则返回值为非零值。
  • 如果函数失败,则返回值为零。

2、#include<stdlib.h>

(1)rand()

① 简介

        rand()函数产生随机数的一个随机函数。

② 语法

rand()

③ 参数

若要生成 a 与 b 之间的随机实数,应使用: RAND()*(b-a)+a

(2)void srand(unsigned int seed);

① 简介

        srand函数是随机数发生器的初始化函数。

② 语法

void srand(unsigned int seed);

③ 参数

unsigned seed:随机数产生器的初始值(种子值)。

3、#include<conio.h>

(1)int kbhit(void);

① 简介

用于非阻塞地响应键盘输入事件。

② 语法

int kbhit(void);

③ 参数

功能及返回值: 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0。

(2)int getch(void)

① 简介

一个不回显函数,当用户按下某个字符时,函数自动读取,无需按回车,有的C语言命令行程序会用到此函数做游戏

② 语法

int getch(void)

③ 参数

返回值:读取的字符

4、#include<windows.h>

(1)HANDLE GetStdHandle( DWORD nStdHandle );

① 简介

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

② 语法

HANDLE GetStdHandle( DWORD nStdHandle );

GetStdHandle()返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误的屏幕缓冲区的句柄。

③ 参数

含义

STD_INPUT_HANDLE

标准输入的句柄

STD_OUTPUT_HANDLE

标准输出的句柄

STD_ERROR_HANDLE

标准错误的句柄

(2)COORD coord={x,y};

① 简介

        COORD是Windows API中定义的一种结构,表示一个字符在控制台屏幕上的坐标。

② 语法

typedef struct _COORD {

SHORT X;  水平坐标
SHORT Y;  垂直坐标

} COORD;

③ 参数

SHORT 为一种数据类型,范围-32768~+32767。

SHORT X;         水平坐标
SHORT Y;         垂直坐标

(3)SetConsoleCursorPosition(HANDLE ,coord); 

① 简介

        SetConsoleCursorPosition是API中定位光标位置的函数。

② 语法

 SetConsoleCursorPosition(HANDLE ,coord);         设置控制台光标坐标(设备句柄, 光标坐标) 

③ 参数

使用这个函数需要两个参数:第一个参数类型为HANDLE,第二个参数类型为COORD

5、#include<time.h>

(1)time_t time(time_t * timer)

① 简介

        获取当前的系统时间,返回的结果是一个time_t类型

② 语法

time_t time(time_t * timer)

③ 参数

获取当前时间:NULL。

返回的结果是一个time_t类型,其实就是一个大整数。

三、贪吃蛇相关子函数

1、光标移动到 (X,Y)

光标移动 到 (X,Y)
void gotoxy(int x, int y) 
{	
    COORD coord={x,y};                                  初始化结构体coord (坐标系X,Y)
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);    获取输出屏幕缓冲区句柄
    SetConsoleCursorPosition(handle, coord);            移动光标
}

2、画墙体、蛇、食物 

//画墙体、蛇、食物 
//卍  ※ 代表墙体
//♂     代表蛇体
//♀     代表食物
void drawMap(void)
{
	//画 --- 游戏说明	
	gotoxy(100, 7);
	printf("按键说明:");
	gotoxy(100, 10);
	printf("W:向上");
	gotoxy(100, 13);
	printf("A:向左");
	gotoxy(100, 16);
	printf("
  • 27
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值