Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++ 纯 C 实现贪吃蛇小游戏

C++ 纯 C 实现贪吃蛇小游戏

作者头像
一枚大果壳
发布于 2024-05-18 01:12:11
发布于 2024-05-18 01:12:11
39300
代码可运行
举报
文章被收录于专栏:编程驿站编程驿站
运行总次数:0
代码可运行

纯C实现贪吃蛇经典小游戏!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <windows.h>
#include  <stdlib.h>
#include <time.h>


//描述蛇的节点信息
typedef struct SnakeNode
{
    int x;
    int y;
} Snode;

//箱子:放置蛇的所有节点
Snode snakes[100];
//保存用户选择的方向
char dir='l'; // u d l r
//保存食物
Snode food;
//蛇身有效长度
int size=5;
//速度
int speed=300;
//保存计分
int count=0;

/**
自定义一个功能函数:给我一个坐标,我就能够把你定位
*/
void setPosition(int x,int y)
{
    COORD point;
    point.X=x;
    point.Y=y;
    //重置坐标
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),point);
}

/**
显示友好的游戏界面
*/
void wellcome()
{
    setPosition(30,10);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),9);
    printf("欢迎来到贪吃蛇的世界!");
    setPosition(30,15);
    //暂停
    system("pause");
    //清屏createFood
    system("cls");
    //输出操作提示
    setPosition(30,10);
    printf("使用向上、向下、向左、向右的方向键控制蛇的方向");
    setPosition(30,11);
    system("pause");
    system("cls");
}

/*
功能模块:绘制围墙 1B=8bit A:1B 中文:2B
*/
void paintWall()
{
    int index=0;
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),11);
    //上边。下边
    for(index=0; index<58; index=index+2)
    {
        setPosition(index,0);
        printf("■");
        setPosition(index,26);
        printf("■");
    }
    //左边、右边akes[0].x=oldX+2;
    for(index=1; index<=26; index++)
    {
        setPosition(0,index);
        printf("■");
        setPosition(56,index);
        printf("■");
    }

    srand(time(0));
    int x=rand()%54+2;
    int y=rand()%24+1;
    int l=4;
    for(index=0;index<l;index++){
        setPosition(x,y);
         printf("■");
         x=x+2;
    }
}

/*检查新生成的食物的坐标是否和蛇身重合
*/
int isTogether(int x,int y)
{
    int index=0;
    for(index=0; index<size; index++)
    {
        if(snakes[index].x==x && snakes[index].y==y)
        {
            //重合
            return 1;
        }
    }
    //没有重合
    return 0;
}

/*
创建食物
*/
void createFood()
{
    //随机数字
    //随机种子
    int randX=0;
    int randY=0;
    srand(time(0));
    //食物坐标随机
    randY=rand()%24+1;
    do
    {
        //只是能偶数
        randX=rand()%54+2;
        //检查是否和蛇身重合
    }
    while(!(randX%2==0  && isTogether(randX,randY)==0)) ;

    food.x=randX;
    food.y=randY;
    setPosition(food.x,food.y);
    printf("■");
}

/*
显示蛇:节点 蛇头 5节点
*/
void initSnake()
{
    //蛇的节点起点位置
    int x=24;
    int y=5;
    int index=0;
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),8);
    //输出5个节点
    for(index=0; index<size; index++, x=x+2)
    {
        //设置节点的坐标
        snakes[index].x=x;
        snakes[index].y=y;
        setPosition(snakes[index].x,snakes[index].y);
        printf("■");
    }
}

/*
清除蛇身图形
*/
void clearSnake()
{
    int index=0;
    for(index=0; index<size; index++)
    {
        setPosition(snakes[index].x,snakes[index].y);
        printf("  ");
    }
}

/*
解析用户的按键,改变方向值
*/
void selDir()
{

    if(GetAsyncKeyState(VK_UP) && dir!='d' )
    {
        dir='u';
    }
    else if(GetAsyncKeyState(VK_DOWN) && dir!='u' )
    {
        dir='d';
    }
    else if(GetAsyncKeyState(VK_LEFT) && dir!='r')
    {
        dir='l';
    }
    else if(GetAsyncKeyState(VK_RIGHT) && dir!='l')
    {
        dir='r';
    }
}

/*
移动蛇
*/
void moveSnake()
{

    //蛇头的原来坐标
    int oldX=snakes[0].x;
    int oldY=snakes[0].y;
    //两个临时变量
    int tempX=0;
    int tempY=0;
    int index=0;
    //重置一个新坐标
    switch(dir)
    {
    case 'u':
        snakes[0].x=oldX;
        snakes[0].y=oldY-1;
        break;
    case 'd':
        snakes[0].x=oldX;
        snakes[0].y=oldY+1;
        break;
    case 'l':
        snakes[0].x=oldX-2;
        snakes[0].y=oldY;
        break;
    case 'r':
        snakes[0].x=oldX+2;
        snakes[0].y=oldY;
        break;
    }

    //检查蛇头是否和食物重合
    if(snakes[0].x==food.x && snakes[0].y==food.y)
    {
        size++;
        createFood();
        //计分
        count=count+20;
        setPosition(60,10);
        printf("当前计分%d",count);
        speed-=50;
        if(speed<100)
        {
            speed=100;
        }
    }
    //检查蛇头是否碰到墙
    if( snakes[0].x<=2 || snakes[0].x>54 || snakes[0].y<1 || snakes[0].y>25  )
    {
        //碰到墙
        system("cls");
        printf("gameover");
        system("pause");
        exit(0);
    }
    //自己吃自己
    for(index=1; index<size; index++)
    {
        if(snakes[0].x==snakes[index].x && snakes[0].y==snakes[index].y)
        {
//碰到墙
            system("cls");
            printf("gameover");
            system("pause");
            exit(0);
        }
    }

    setPosition(snakes[0].x,snakes[0].y);
    printf("■");
    //移动除了蛇头之外的节点
    for(index=1; index<size; index++)
    {
        //在移动节点之前保存节点的坐标
        tempX=snakes[index].x;
        tempY=snakes[index].y;
        //重新指定新坐标,前一个节点留下的空白
        snakes[index].x=oldX;
        snakes[index].y=oldY;
        //指定光标点
        setPosition(snakes[index].x,snakes[index].y);
        printf("■");
        //重置原坐标
        oldX=tempX;
        oldY=tempY;
    }
}

//主函数:语法结构(固定)运行时候,起点
int main()
{
    wellcome();
    //绘制围墙
    paintWall();
    initSnake();
    createFood();
    //清除蛇原来的图形
    while(1)
    {
        selDir();
        clearSnake();
        moveSnake();
        Sleep(speed);
    }
    return 0;
}

纯C语言实现贪吃蛇小游戏!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程驿站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C语言贪吃蛇完整代码
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
紫禁玄科
2022/03/24
4.1K0
C语言贪吃蛇完整代码
C语言入门项目篇:贪吃蛇(完整代码+详细注释)「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/124951.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/21
13.9K0
C语言入门项目篇:贪吃蛇(完整代码+详细注释)「建议收藏」
C++实现贪吃蛇(控制台)
有一条蛇,在屏幕上爬,用上下左右键控制吃东西,吃得多了,到了一定积分,就能过关。越吃越长,不能碰墙,不能咬自己的尾巴,没了,哈哈。 这个蛇是条很有个性的蛇它会吃多少吐多少(如果要取消这个特性可以在代码中修改一行代码即可,我已经标注出来了) 话不多说直接上代码(代码中有详细注释)!
全栈程序员站长
2022/08/24
1.5K0
C++实现贪吃蛇(控制台)
贪吃蛇小游戏程序(C语言)
最近暑假无事开始用C语言写一些小游戏小游戏程序,这个贪吃蛇当然是经典中的经典,所以先开始写。
跋扈洋
2021/06/15
2.8K0
贪吃蛇小游戏程序(C语言)
【C语言】【数据结构】项目实践——贪吃蛇游戏(超详细)
贪吃蛇是一款休闲益智类游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃食物,从而使得蛇变得越来越长,贪吃蛇是久负盛名的游戏,它也和俄罗斯方块,扫雷等游戏位列经典游戏的行列。
用户11290673
2024/09/25
6500
【C语言】【数据结构】项目实践——贪吃蛇游戏(超详细)
花狗C语言彩色贪吃蛇(完整代码)
这是我在博客写的第一篇文章,如果哪里有问题还请多多指教!!以前我写的贪吃蛇是全图刷新的,导致在窗口运行时,眼睛都快闪瞎了!今天为大家带来了不闪的贪吃蛇!!!废话不多说,上图,上代码!!
花狗Fdog
2020/10/28
2.4K0
花狗C语言彩色贪吃蛇(完整代码)
简单贪吃蛇C++语言编程(如何用c语言写贪吃蛇)
(有一些函数kbhit,getch,在这表示为_kbhit与_getch)//不同编译器原因 注意在Dev等集成开发软件下可能会CE
全栈程序员站长
2022/07/25
2K0
简单贪吃蛇C++语言编程(如何用c语言写贪吃蛇)
C++ 一款纯C实现的打砖块小游戏
一枚大果壳
2024/05/18
2630
C++ 一款纯C实现的打砖块小游戏
c语言实现贪吃蛇小游戏
如果运行之后出现的是上面的界面,就需要更改一下,鼠标右键点击控制台顶端,再点击设置
2的n次方
2024/10/15
1080
c语言实现贪吃蛇小游戏
C语言——贪吃蛇
Windows可以给我们提供各种服务(每一个服务就是一个函数),可以帮应用程序达到开启视窗、描绘图形、使用周边设备等目的。这些函数的服务对象是应用程序(Application),所以便称之为ApplicationProgrammingInterface,简称API函数。。
HZzzzzLu
2024/11/26
1750
C语言——贪吃蛇
【C语言】实践:贪吃蛇小游戏(附源码)
贪吃蛇小游戏想必大家都玩过吧,现在就要C语言代码来实现一下贪吃蛇小游戏
星辰与你
2024/10/17
6530
【C语言】实践:贪吃蛇小游戏(附源码)
贪吃蛇小游戏
游戏截图: 源码如下: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<Windows.h> #include<ctime> #i
大忽悠爱学习
2021/03/04
4950
C语言贪吃蛇完整代码
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141078.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/24
4.1K1
【C语言项目】贪吃蛇(下)
在上一篇博文中我们介绍了GetAsyncKeyState函数,我们封装一个宏可以判断某个键是否被按下
s-little-monster
2024/06/06
1380
【C语言项目】贪吃蛇(下)
贪吃蛇小游戏
秦jh
2024/01/19
1920
C语言项目实战——贪吃蛇
贪吃蛇是一款经典的休闲益智类电子游戏,通常用C语言实现时,会涉及到以下几个主要部分:
鲜于言悠
2024/03/20
6370
C语言项目实战——贪吃蛇
c语言贪吃蛇源代码简单_java贪吃蛇源码
3.playsound函数 引用一下这个函数的详细说明 所需头文件,顺序要这样子
全栈程序员站长
2022/10/03
2.6K0
c语言贪吃蛇源代码简单_java贪吃蛇源码
c语言及数据结构实现简单贪吃蛇小游戏
十进制颜色代码:void color(int c) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c); }
羑悻的小杀马特.
2025/01/23
1660
c语言及数据结构实现简单贪吃蛇小游戏
用C语言实现经典游戏——贪吃蛇
该项目适合刚学完C语言结构体,有一定C语言基础的练习,该小项目可以帮助自己锻练的面向对象编程思想。
莫浅子
2023/10/17
5480
用C语言实现经典游戏——贪吃蛇
贪吃蛇项目实践!(上)
实现基本的功能: • 贪吃蛇地图绘制 • 蛇吃⻝物的功能(上、下、左、右⽅向键控制蛇的动作) • 蛇撞墙死亡 • 蛇撞⾃⾝死亡 • 计算得分 • 蛇⾝加速、减速 • 暂停游戏
用户11039545
2024/05/04
1740
贪吃蛇项目实践!(上)
相关推荐
C语言贪吃蛇完整代码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验