C语言贪吃蛇详解

一.贪吃蛇游戏背景
贪吃蛇是久负盛名的游戏,它也和俄罗斯⽅块,扫雷等游戏位列经典游戏的⾏列。
在编程语⾔的教学中,我们以贪吃蛇为例,从设计到代码实现来提升学⽣的编程能⼒和逻辑能⼒。


 二.游戏实现过程
大致分为三个大模块:

GameStart完成游戏的初始化打印
GameRun游戏运行时各个功能的实现
GameEnd游戏结束以后的一些善后工作
 2.1游戏功能
实现基本的功能:
• 贪吃蛇地图绘制
• 蛇吃⻝物的功能 (上、下、左、右⽅向键控制蛇的动作)
• 蛇撞墙死亡
• 蛇撞⾃⾝死亡
• 计算得分
• 蛇⾝加速、减速
• 暂停游戏
2.2需要掌握的知识
C语⾔函数、枚举、结构体、动态
内存管理、预处理指令、链表、Win32 API等。
三.Win32API
3.1Win32API介绍
      Windows 这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外, 它同时也是⼀个很⼤ 的服务中⼼,调⽤这个服务中⼼的各种服务(每⼀种服务就是⼀个函数),可以帮应⽤程序达到开启 视窗、描绘图形、使⽤周边设备等⽬的,由于这些函数服务的对象是应⽤程序(Application), 所以便 称之为 Application Programming Interface,简称 API 函数。WIN32 API也就是Microsoft Windows 32位平台的应⽤程序编程接⼝。
3.2控制台程序
     平常我们运⾏起来的⿊框程序其实就是控制台程序 我们可以使⽤cmd命令来设置控制台窗⼝的⻓宽:设置控制台窗⼝的⼤⼩,30⾏,100列
 mode con cols=100 lines=30
也可以通过命令设置控制台窗口的名字

title 贪吃蛇
这些命令我们使用C语言的system便可以实现:

#include <stdio.h>
int main()
{
 //设置控制台窗⼝的⻓宽:设置控制台窗⼝的⼤⼩,30⾏,100列
 system("mode con cols=100 lines=30");
 //设置cmd窗⼝名称
 system("title 贪吃蛇"); 
 return 0;
}
这里我们可以在后面实现的时候加一个getchar(),防止程序运行结束无法确定窗口是否设置成功。

这样就设置好了。

 3.3控制台屏幕上的坐标COORD
COORD 是Windows API中定义的⼀个结构体,表⽰⼀个字符在控制台屏幕上的坐标
typedef struct _COORD {
 SHORT X;
 SHORT Y;
} COORD, *PCOORD;
通过这样一个结构体我们就可以给得到控制台上的坐标了。

这里我们可以设置一个坐标

 COORD pos = { 10, 15 };
 3.4GetStdHandle
GetStdHandle是⼀个Windows API函数。它⽤于从⼀个特定的标准设备(标准输⼊、标准输出或标
准错误)中取得⼀个句柄(⽤来标识不同设备的数值),使⽤这个句柄可以操作设备。
 它就像炒菜的手柄,你想获得API函数的操作权就得有一个可以获得他们的手柄。

举个例子:

HANDLE hOutput = NULL;
//获取标准输出的句柄(⽤来标识不同设备的数值)
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
3.5GetConsoleCursorInfo
检索有关指定控制台屏幕缓冲区的光标⼤⼩和可⻅性的信息 ,其实就是获得光标的操作权。
举个例子:

HANDLE hOutput = NULL;
//获取标准输出的句柄(⽤来标识不同设备的数值)
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(hOutput, &CursorInfo);//获取控制台光标信息
3.6CONSOLE_CURSOR_INFO
这个结构体,包含有关控制台光标的信息,可以通过它来得到光标的两个参数:可见性,光标所占的百分比,
typedef struct _CONSOLE_CURSOR_INFO {
 DWORD dwSize;
 BOOL bVisible;
} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;
 3.7SetConsoleCursorInfo
设置指定控制台屏幕缓冲区的光标的⼤⼩和可⻅性。
举个例子:
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
//影藏光标操作
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(hOutput, &CursorInfo);//获取控制台光标信息
CursorInfo.bVisible = false; //隐藏控制台光标
SetConsoleCursorInfo(hOutput, &CursorInfo);//设置控制台光标状态
3.8 SetConsoleCursorPosition
设置指定控制台屏幕缓冲区中的光标位置,我们将想要设置的坐标信息放在COORD类型的pos中,调 ⽤SetConsoleCursorPosition函数将光标位置设置到指定的位置。
COORD pos = { 10, 5};
 HANDLE hOutput = NULL;
 //获取标准输出的句柄(⽤来标识不同设备的数值)
 hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
 //设置标准输出上光标的位置为pos
 SetConsoleCursorPosition(hOutput, pos);
 这里我们可以利用上面讲到的知识,实现一个设置光标位置的函数:

//设置光标的坐标
void SetPos(short x, short y)
{
 COORD pos = { x, y };
 HANDLE hOutput = NULL;
 //获取标准输出的句柄(⽤来标识不同设备的数值)
 hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
//设置标准输出上光标的位置为pos
 SetConsoleCursorPosition(hOutput, pos);
}
3.9GetAsyncKeyState
 获取按键情况,GetAsyncKeyState的函数原型如下:

SHORT GetAsyncKeyState(
 int vKey
);
将键盘上每个键的虚拟键值传递给函数,函数通过返回值来分辨按键的状态。
GetAsyncKeyState 的返回值是short类型,在上⼀次调⽤ GetAsyncKeyState 函数后,如果
返回的16位的short数据中,最⾼位是1,说明按键的状态是按下,如果最⾼是0,说明按键的状态是抬
起;如果最低位被置为1则说明,该按键被按过,否则为0。
如果我们要判断⼀个键是否被按过,可以检测GetAsyncKeyState返回值的最低值是否为1.
我们可以将 GetAsyncKeyState的结果与0x1进行&运算这样1代表按键,0代表没按键。

#define KEY_PRESS(VK) ( (GetAsyncKeyState(VK) & 0x1) ? 1 : 0 )
四.GameStart 
在这个函数里我们主要完成这样几个功能的实现:

设置控制台的信息,窗口的大小,窗口名

隐藏光标

打印欢迎信息

绘制地图

初始化蛇

创建食物

void GameStart(pSnake ps)
{
    //设置控制台的信息,窗口的大小,窗口名
    system("mode con  cols=100 lines=30");
    system("title 贪吃蛇");
    //隐藏光标
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_CURSOR_INFO CursorInfo;
    GetConsoleCursorInfo(handle, &CursorInfo);
    CursorInfo.bVisible = false;
    SetConsoleCursorInfo(handle, &CursorInfo);
    //打印欢迎信息
    WelcomeToGame();
    //绘制地图
    GetMap();
    //初始化蛇
    InitSnake(ps);
    //创建食物
    CreateFood(ps);
}

这里需要特殊说明一下这里我们打印蛇身的时候使用的是中文符号,可以下载搜狗输入法特殊字符获得,并且,这些中文字符,是普通字符 的二倍大。

五.GameRun
用来实现这样几个功能:

打印欢迎信息PrintfHelpInfo();

按键的实现switch语句

蛇的移动SnakeMove();sleep()一下移动一下

void GameRun(pSnake ps)
{
    PrintfHelpInfo();
    do
    {
        SetPos(62,10);
        printf("总分:%5d\n",ps->Score);
        SetPos(62,11);
        printf("食物的分值:%02d\n",ps->FoodWeight);
        if (KEY_PRESS(VK_UP) && ps->dir != DOWN)
        {
            ps->dir = UP;
        }
        else if (KEY_PRESS(VK_DOWN) && ps->dir != UP)
        {
            ps->dir = DOWN;
        }
        else if (KEY_PRESS(VK_LEFT) && ps->dir != RIGHT)
        {
            ps->dir = LEFT;
        }
        else if (KEY_PRESS(VK_RIGHT) && ps->dir != LEFT)
        {
            ps->dir = RIGHT;
        }
        else if (KEY_PRESS(VK_ESCAPE))
        {
            ps->status = ESC;
            break;
        }
        else if (KEY_PRESS(VK_SPACE))
        {
            pause();
        }
        else if (KEY_PRESS(VK_F3))
        {
            if (ps->SleepTime >= 80)
            {
                ps->SleepTime -= 30;
                ps->FoodWeight+= 2;
            }
        }
        else if (KEY_PRESS(VK_F4))
        {
            if (ps->FoodWeight > 2)
            {
                ps->SleepTime += 30;
                ps->FoodWeight -= 2;
            }
            
        }
        SnakeMove(ps);
        Sleep(ps->SleepTime);
 
 
    } while (ps->status==OK);
    //getchar();
 
}

这里是GameRun的基本框架,一些具体的函数嵌套,下文会有详细源码。 

 六.GameEnd
这个函数主要用来进行游戏结束时的一些善后工作,

打印退出游戏的信息

逐个销毁创建的贪吃蛇蛇身节点

释放食物节点指针

void GameEnd(pSnake ps)
{
    SetPos(15,12);
    switch (ps->status)
    {
    case ESC:
        printf("主动退出游戏,正常退出\n");
        break;
    case KILL_BY_WALL:
        printf("很遗憾,撞墙了,游戏结束\n");
        break;
    case KILL_BY_SELF:
        printf("很遗憾,咬到自己了,游戏结束了\n");
        break;
    }
    PSnakeNode cur = ps->pSnake;
    PSnakeNode del = NULL;
    while (cur)
    {
        del = cur;
        cur - cur->next;
        free(del);
    }
    free(ps->pFood);
    ps->pFood = NULL;
}
 

 七.贪吃蛇小项目源码
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"snake.h"
 
void test()
{
    //创建蛇
    Snake snake = {0};
    GameStart(&snake);
    //GameRun(&snake);
    //GameEnd(&snake);
}
int main()
{
    //修改适配为中文环境
    setlocale(LC_ALL,"");
    test();
    return 0;
}

Snake.h
#define _CRT_SECURE_NO_WARNINGS 1
#include <locale.h>
#include<stdio.h>
#include"stdlib.h"
#include<windows.h>
#include<stdbool.h>
#define KEY_PRESS(VK) ((GetAsyncKeyState(VK) & 0x1) ? 1 : 0)
#define WALL L'□'
#define BODY L'●'
#define Food L'★'
#define POS_X 24
#define POS_Y 5
enum GAME_STATUS
{
    OK = 1,
    ESC,
    KILL_BY_WALL,
    KILL_BY_SELF
};
enum DIRECTION
{
    UP=1,
    DOWN,
    LEFT,
    RIGHT
};
//蛇身节点的定义
typedef struct SnakeNode
{
    int x;
    int y;
    struct SnakeNode* next;
}SnakeNode, *PSnakeNode;
//贪吃蛇
typedef struct Snake
{
    PSnakeNode pSnake;
    PSnakeNode pFood;
    int Score;
    int FoodWeight;
    int SleepTime;
    enum GAME_STATUS status;
    enum DIRECTION dir;
}Snake,*pSnake;
 
 
void GameStart(pSnake ps);
void WelcomeToGame();
void GetMap();
void InitSnake(pSnake ps);
void CreateFood(pSnake ps);
void GameRun(pSnake ps);
void PrintfHelpInfo();
void SnakeMove(pSnake ps);
int NextIsFood(pSnake ps,PSnakeNode pNext);
void EatFood(pSnake ps, PSnakeNode pNext);
void NotFood(pSnake ps, PSnakeNode pNext);
void killByWall(pSnake ps);
void KillBySelf(pSnake ps);
void GameEnd(pSnake ps);
 
 
 
 
 
 

Snake.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"snake.h"
void SetPos(int x,int y)
{
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos = { x,y };
    SetConsoleCursorPosition(handle,pos);
    
}
void WelcomeToGame()
{
    SetPos(35,10);
    printf("欢迎来到贪吃蛇小游戏\n");
    SetPos(38,20);
    system("pause");
    system("cls");
    //功能介绍界面
    SetPos(15,10);
    printf("用↑.↓.←.→来控制蛇的移动,F3是加速,F4是减速\n");
    SetPos(15,11);
    printf("加速得到更高的分数\n");
    SetPos(38, 20);
    system("pause");
    system("cls");
}
void GetMap()
{
    //上
    SetPos(0,0);
    int i = 0;
    for ( i = 0;i <= 56; i += 2)
    {
        wprintf(L"%lc", WALL);
        
        
    }
 
    //下
    SetPos(0,26);
    for (i = 0; i <= 56; i += 2)
    {
        wprintf(L"%lc", WALL);
 
 
    }
    //左
    for (i = 1; i <= 25; i ++)
    {
        SetPos(0,i);
 
        wprintf(L"%lc", WALL);
 
 
    }
    //右
    for (i = 1; i <= 25; i++)
    {
        SetPos(56,i);
 
        wprintf(L"%lc", WALL);
 
 
    }
}
void InitSnake(pSnake ps)
{
    PSnakeNode cur = NULL;
    int i = 0;
    for (i = 0; i < 5; i++)
    {
        cur = (PSnakeNode)malloc(sizeof(SnakeNode));
        if (cur == NULL)
        {
            perror("InitSnake malloc!");
            return;
        }
        cur->x = POS_X + 2 * i;
        cur->y = POS_Y;
        cur->next = NULL;
        //头插法
        if (ps->pSnake == NULL)
        {
            ps->pSnake = cur;
        }
        else
        {
            cur->next = ps->pSnake;
            ps->pSnake = cur;
        }
 
    }
 
    cur = ps->pSnake;
    while (cur)
    {
        SetPos(cur->x, cur->y);
        wprintf(L"%lc", BODY);
        cur = cur->next;
    }
    ps->dir = RIGHT;
    ps->FoodWeight = 10;
    ps->pFood = NULL;
    ps->Score = 0;
    ps->SleepTime = 200;
    ps->status = OK;
}
 
    void CreateFood(pSnake ps)
    {
        int x = 0;
        int y = 0;
    again:
        do
        {
            x = rand() % 53 + 2;
            y = rand() % 24 + 1;
        } while (x%2!=0);
        PSnakeNode cur = ps->pSnake;
        while (cur)
        {
            if (x == cur->x && y == cur->y)
            {
                goto again;
 
            }
            cur = cur->next;
        }
        PSnakeNode pFood = (PSnakeNode)malloc(sizeof(SnakeNode));
        if (pFood == NULL)
        {
            perror("CreateFood():malloc");
            return;
        }
        pFood->x=x;
        pFood->y=y;
        ps->pFood = pFood;
        SetPos(x,y);
        wprintf(L"%lc",Food);
 
    }
 
void GameStart(pSnake ps)
{
    //设置控制台的信息,窗口的大小,窗口名
    system("mode con  cols=100 lines=30");
    system("title 贪吃蛇");
    //隐藏光标
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_CURSOR_INFO CursorInfo;
    GetConsoleCursorInfo(handle, &CursorInfo);
    CursorInfo.bVisible = false;
    SetConsoleCursorInfo(handle, &CursorInfo);
    //打印欢迎信息
    WelcomeToGame();
    //绘制地图
    GetMap();
    //初始化蛇
    InitSnake(ps);
    //创建食物
    CreateFood(ps);
}
void PrintfHelpInfo()
{
    SetPos(62,15);
    printf("1.不能穿墙,不能咬到自己\n");
    SetPos(62,16);
    printf("用↑.↓.←.→来控制蛇的移动\n");
    SetPos(62,17);
    printf("F3是加速,F4是减速\n");
    SetPos(62,19);
    printf("版权@Monodye\n");
 
}
void pause()
{
    while (1)
    {
        Sleep(100);
        if (KEY_PRESS(VK_SPACE))
        {
            break;
        }
    }
}
int NextIsFood(pSnake ps,PSnakeNode pNext)
{
    if (ps->pFood->x == pNext->x && ps->pFood->y == pNext->y)
    {
        return 1;
    }
    else
        return 0;
}
void EatFood(pSnake ps, PSnakeNode pNext)
{
    pNext->next = ps->pSnake;
    ps->pSnake = pNext;
    PSnakeNode cur = ps->pSnake;
    while (cur)
    {
        SetPos(cur->x,cur->y);
        wprintf(L"%lc",BODY);
        cur = cur->next;
    }
    ps->Score += ps->FoodWeight;
    free(ps->pFood);
    CreateFood(ps);
}
void NotFood(pSnake ps, PSnakeNode pNext)
{
    pNext->next = ps->pSnake;
    ps->pSnake = pNext;
    PSnakeNode cur = ps->pSnake;
    while (cur->next->next )
    {
        SetPos(cur->x,cur->y);
        wprintf(L"%lc",BODY);
        cur = cur->next;
    }
    SetPos(cur->next->x, cur->next->y);
    printf("  ");
    free(cur->next);
    cur->next = NULL;
}
void killByWall(pSnake ps)
{
    if (ps->pSnake->x == 0 ||
        ps->pSnake->x == 56 ||
        ps->pSnake->y == 0 ||
        ps->pSnake->y == 26)
    {
        ps->status = KILL_BY_SELF;
    }
}
void KillBySelf(pSnake ps)
{
    PSnakeNode cur = ps->pSnake->next;
    while (cur)
    {
        if (cur->x == ps->pSnake->x && cur->y == ps->pSnake->y)
        {
            ps->status = KILL_BY_SELF;
            return 0;
        }
        cur = cur->next;
    }
}
void SnakeMove(pSnake ps)
{
    PSnakeNode pNext=(PSnakeNode)malloc(sizeof(SnakeNode));
    if (pNext == NULL)
    {
        perror("SnakeMove():malloc()");
        return;
    }
    pNext->next = NULL;
    switch (ps->dir)
    {
    case UP:
        pNext->x = ps->pSnake->x;
        pNext->y = ps->pSnake->y-1;
        break;
    case DOWN:
        pNext->x = ps->pSnake->x;
        pNext->y = ps->pSnake->y +1;
        break;
    case LEFT:
        pNext->x = ps->pSnake->x-2;
        pNext->y = ps->pSnake->y ;
        break;
    case RIGHT:
        pNext->x = ps->pSnake->x+2;
        pNext->y = ps->pSnake->y;
        break;
    }
    if (NextIsFood(ps,pNext))
    {
        EatFood(ps,pNext);
    }
    else {
        NotFood(ps,pNext);
    }
    killByWall(ps);
    KillBySelf(ps);
}
void GameRun(pSnake ps)
{
    PrintfHelpInfo();
    do
    {
        SetPos(62,10);
        printf("总分:%5d\n",ps->Score);
        SetPos(62,11);
        printf("食物的分值:%02d\n",ps->FoodWeight);
        if (KEY_PRESS(VK_UP) && ps->dir != DOWN)
        {
            ps->dir = UP;
        }
        else if (KEY_PRESS(VK_DOWN) && ps->dir != UP)
        {
            ps->dir = DOWN;
        }
        else if (KEY_PRESS(VK_LEFT) && ps->dir != RIGHT)
        {
            ps->dir = LEFT;
        }
        else if (KEY_PRESS(VK_RIGHT) && ps->dir != LEFT)
        {
            ps->dir = RIGHT;
        }
        else if (KEY_PRESS(VK_ESCAPE))
        {
            ps->status = ESC;
            break;
        }
        else if (KEY_PRESS(VK_SPACE))
        {
            pause();
        }
        else if (KEY_PRESS(VK_F3))
        {
            if (ps->SleepTime >= 80)
            {
                ps->SleepTime -= 30;
                ps->FoodWeight+= 2;
            }
        }
        else if (KEY_PRESS(VK_F4))
        {
            if (ps->FoodWeight > 2)
            {
                ps->SleepTime += 30;
                ps->FoodWeight -= 2;
            }
            
        }
        SnakeMove(ps);
        Sleep(ps->SleepTime);
 
 
    } while (ps->status==OK);
    //getchar();
 
}
void GameEnd(pSnake ps)
{
    SetPos(15,12);
    switch (ps->status)
    {
    case ESC:
        printf("主动退出游戏,正常退出\n");
        break;
    case KILL_BY_WALL:
        printf("很遗憾,撞墙了,游戏结束\n");
        break;
    case KILL_BY_SELF:
        printf("很遗憾,咬到自己了,游戏结束了\n");
        break;
    }
    PSnakeNode cur = ps->pSnake;
    PSnakeNode del = NULL;
    while (cur)
    {
        del = cur;
        cur - cur->next;
        free(del);
    }
    free(ps->pFood);
    ps->pFood = NULL;
}
 

文章知识点与官方知识档案匹配,可进一步学习相关知识
C技能树首页概览195987 人正在系统学习中

Monodye
关注

52


55

25

C语言处理贪吃蛇游戏蛇的长度,c语言贪吃蛇详解4.食物的投放与蛇的变长
weixin_29205061的博客
 863
c语言贪吃蛇详解4.食物的投放与蛇的变长前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解。我将分几步来教大家写一个贪吃蛇小游戏。由于大家c语言未学完,这个教程只涉及数组和函数等知识点。通过前几次的教程,我们已经做出来了能上下左右跑的小蛇了。现在我们就先来做下食物投放吧。食物投放的基本思想是在地图上随机找一个没有蛇身也没有障碍物的地方,然后把这个地方的地图数组值标记为-1(前面我们...
Matlab读写文件示例
最新发布
02-07
在Matlab中,读写文件是非常常见的操作,可以通过内置的函数来实现。下面是一个简单的示例,演示了如何使用Matlab读取文本文件、进行数据处理,并将处理后的数据写入新的文本文件中。
25 条评论
专家-百锦再
热评
这篇文章内容丰富、观点独到,展现了作者深厚的学识和思考能力,令人瞩目!文字流畅、条理清晰,阐述精辟、引人深思,令人回味无穷。
写评论
c语言写的贪吃蛇(链表实现)
04-03
写的有点乱,没用什么复杂的算法,对初学者来说想要看懂还是比较简单的
C语言实现贪吃蛇小游戏(详解)
热门推荐
Hard。
 6万+
目录 一、程序实现的原理: 二、预备知识 1、控制台窗口 2、通过代码将光标移动到控制台指定位置 三、 程序框架 四、具体操作 1、定义相关头文件 2、定义函数结构以及相关属性 五、完成各代码块 1、 实现将光标移到指定位置的操作 2、 打印游戏边框以及游戏初始画面 ...
贪吃蛇.c贪吃蛇C语言代码
04-25
贪吃蛇C语言代码详解
c语言链表贪吃蛇
03-04
这是我用c语言写的程序,用的是改进的链表的算法做的贪吃蛇。不需要擦除蛇尾。我的其他资源都是免费的,是对于c语言初学者的帮助比较大的,其中有数据结构,window编程。我也在学c语言,每当我写完一个程序,我都会免费发上来。
C++之贪吃蛇.cpp--C语言小游戏详解—贪吃蛇
06-25
C++之贪吃蛇.cpp--C语言小游戏详解—贪吃蛇,方向键对应的的ASCII为 72,经典小游戏大集合(C 源码)
C语言实现贪吃蛇游戏(命令行)
08-18
主要为大家详细介绍了C语言命令行实现贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
c语言贪吃蛇详解-2.画出蛇
weixin_30722589的博客
 746
c语言贪吃蛇详解-2.画出蛇 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解。我将分几步来教大家写一个贪吃蛇小游戏。由于大家c语言未学完,这个教程只涉及数组和函数等知识点。 蛇的身体就是一些点,我们可以用二维数组把这些点的坐标存起来。 先声明一个足够大的二维数组。虽然我觉得你们玩不了这么长(手动滑稽)。 int s[H*W][2]; 这样s[0][0]表...
C语言贪吃蛇小游戏,贪吃蛇C语言代码实现大全
chengxuyuanlaow的博客
 2万+
设计贪吃蛇游戏的主要目的是让大家夯实C语言基础,训练编程思维,培养解决问题的思路,领略多姿多彩的C语言。贪吃蛇是非常经典的一款游戏,本次我们模拟在控制台实现贪吃蛇游戏,也就是实现贪吃蛇的基本功能,比如在地图中,用“↑↓←→”控制移动蛇的方向,吃掉食物之后,蛇身体会变长等等。。。。首先我们得分析,游戏中我们会碰见的一些情况。
【C语言】贪吃蛇 详解
2301_79499548的博客
 3521
【C语言】贪吃蛇 详解
C语言中大小写字母转换详解
繁依Fanyi的博客
 517
首先,让我们了解一下为什么需要在编程中进行大小写字母的转换。在很多情况下,我们需要比较字符串或进行其他操作时,字母的大小写可能会导致不匹配的问题。为了解决这个问题,C语言提供了一些函数来帮助我们进行大小写转换。通过本文的学习,我们深入了解了C语言中大小写字母转换的原理及使用方法。通过简单的ASCII码运算,我们可以轻松实现字符的大小写转换,为字符串的比较和处理提供了便利。在实际应用中,这些转换函数可以帮助我们更灵活地处理用户输入,提高程序的健壮性。
C Primer Plus(第六版)15.9 编程练习 第2题
apple_50569014的博客
 405
printf("原argv[2] =%s\n",itobs(num1, string));printf("argv[1] 且 argv[2]=%s\n",itobs(num&num1, string));printf("argv[1] 或 argv[2]=%s\n",itobs(num|num1, string));printf("argv[1]异或argv[2]=%s\n",itobs(num^num1, string));
零基础学编程系列,从入门到精通,中文编程开发语言工具下载,编程构件容器件之控制面板构件用法
编程实战
 916
编程入门视频教程链接编程工具及实例源码文件下载可以点击最下方官网卡片——软件下载——常用工具下载——编程工具免费版下载及实例源码下载。今天给大家分享的是中文编程构件箱容器件之控制面板构件用法控制面板控制面板是常用的容器构件,除了用于分割窗口的不同区域,起到分类的作用外,还可以作为背景使用。图 标:构件类型:可视重要属性l 对齐方式枚举型,设置构件在容器构件上的排列方式,包括:自定义、上边、下边、左边、右边、客户区域。自定义:构件放在原先放置的位置,不随容器大小的改变而改变。
竞赛资料源码-基于Unity简单地实现游戏程序开发中常用的算法.zip
02-07
【目标受众】: 本项目适合IT相关专业各种计算机技术的源代码和项目资料,如计科、人工智能、通信工程、自动化和电子信息等的在校学生、老师或者企业员工下载使用。 也适合小白学习进阶,可以用作比赛项目、可以进行项目复刻去参加同赛道比赛。 【资源内容】: 源码与竞赛资料:教育部认可的大学生竞赛备赛资料代码、源码、竞赛总结。 功能与质量保证:这个资源库是一个宝贵的学习平台,有助于他们深入了解计算机技术的原理和应用。这些源码经过测试和验证,可以直接运行,方便学生快速上手并开始实践。 【应用场景】: 竞赛准备:适用于各种教育部认可的竞赛,如全国电子设计大赛、全国大学生智能汽车竞赛等,他们可以借助这些资料了解竞赛的规则、要求和技巧。 学习与项目开发:可以用作毕设、课设、作业和竞赛项目的开发基础,可以使用这些源码作为项目开发的基础,快速构建出具有竞争力的作品。 【互动与交流】: 资料鼓励下载和使用这些资源,并欢迎学习者进行沟通交流、互相学习、共同进步。这种互动式的学习方式有助于形成良好的学习氛围,促进知识的共享和传播,为计算机相关专业的学习者提供了一个全面的学习和发展平台。
微信小程序食疗微信小程序的设计与实现(java)(包括源码,数据库,教程).zip
02-07
小程序毕业设计,小程序课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 1. 技术组成 前端: 小程序 后台框架:Java SSM/SpringBoot(如果有的话) 开发环境:idea,微信开发者工具 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库可视化工具:使用 Navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven
Java毕业设计-基于SSM+JSP+HTML的游戏坛平台(附源码,数据库).zip
02-07
Java 毕业设计,Java 课程设计,基于SSM开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:HTML/JSP 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7,8.0 有时候会有坑) 部署环境:Tomcat(建议用 7.x 或者 8.x b版本),maven
Java毕业设计-基于SSM+JSP+HTML的中国古诗词学习平台(附源码,数据库).zip
02-07
Java 毕业设计,Java 课程设计,基于SSM开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:HTML/JSP 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7,8.0 有时候会有坑) 部署环境:Tomcat(建议用 7.x 或者 8.x b版本),maven
基于SSM+JSP+HTML的贫困生管理系统(Java毕业设计,附源码,数据库,教程).zip
02-07
Java SSM 毕业设计,Java SSM 课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!如果不懂部署的话,也可以想我咨询 1. 技术组成 前端:HTML/JSP 后台框架:SSM 开发环境:idea,maven 数据库:MySql(建议用 5.7,8.0 有时候会有坑) 部署环境:Tomcat(建议用 7.x 或者 8.x b版本)
c语言贪吃蛇devc++

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值