用到函数的调用和实现,用到easyx,结构体,数组等

也可以用链表来写,在linux上用vim写贪吃蛇原理差不多。

进行初始化

原本想用srand(time(null))的发下有时食物出不来就用了GETtick...

移动蛇:

用键位控制:

_kbhit是确认是否有按键按下,有就为1否则为0,_getch()是输入的字符.

画图:

调用easyx头文件,用来画图

食物随机出现:

蛇头碰到食物蛇尾加1

上面移动的是没有死亡的,下面这个移动到边界就是死亡:

打印菜单:

主函数:

#include<stdio.h>
#include<graphics.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<string.h>

void Game_draw();
void Game_Init();
void Move_snake();
void keyborad();
void snake_food();
int menu();
void snake_food_hard();
int Move_snake_siwang();

#define MAX_num 500
#define my_high 800
#define my_wide 800
enum dir
{
    RIGHT,
    DOWN,
    UP,
    LEFT,
};
struct Sanke
{
    int szie;//蛇的节数
    int dir;//蛇的方向
    int speed;//蛇的速度
    POINT coor[MAX_num];//坐标
}sanke;
struct Food
{
    int x;
    int y;
    int r;
    bool flag;

}food;

int main(void)
{    
k:
    int choose,i;
    int l = 1;
    choose=menu();
    switch (choose)
    {    
        case 3:
            Game_Init();
            while (1)
            {

Game_draw();
                Move_snake();
                keyborad();
                snake_food();
                Sleep(100);
            }
            break;
        case 2:
            Game_Init();
            while (1)
            {

Game_draw();
                if (l == 1)
                {
                    l = Move_snake_siwang();
                }
                else
                {
                    goto p;
                }
                keyborad();
                snake_food();
                Sleep(20);
            }
            break;
        case 1:
            Game_Init();
            while (1)
            {

Game_draw();
                if (l == 1)
                {
                    l = Move_snake_siwang();
                }
                else
                {    
                    goto p;
                }
                keyborad();
                snake_food();
                Sleep(100);
            }
            break;

}
p:    
    printf("you die ,please choose repeat or quit 1 or 0 :");
    scanf_s("%d", &i);
    if (i == 1)
    {
        goto k;
    }
        return 0;
}

void Game_Init()
{    
    initgraph(my_high,my_wide,SHOWCONSOLE);//设置命令框格,图形大小,SHOWCONSOLE显示控制台;
    sanke.szie = 3;//初始话蛇定义其节数
    sanke.speed = 10;
    sanke.dir=RIGHT;
    for (int i = 0; i<= sanke.szie-1; i++)
    {
        sanke.coor[i].y = 10;
        sanke.coor[i].x = 100-10*i;
    }
    srand(GetTickCount());
    food.x = rand() % my_wide+20;
    food.y = rand() % my_high+20;
    food.flag = true;
    food.r = rand() % 10 + 5;
    
}

void Move_snake()
{
    for (int i = sanke.szie- 1; i >0; i--)
    {
        sanke.coor[i] = sanke.coor[i - 1];
    }
    switch (sanke.dir)
    {
        case UP:
            if (sanke.coor[0].y <= 0)
            {
                sanke.coor[0].y = my_high;
            }
            sanke.coor[0].y -= sanke.speed;
            break;
        case DOWN:
            if (sanke.coor[0].y >= my_high)
            {
                sanke.coor[0].y = 0;
            }
            sanke.coor[0].y += sanke.speed;
            break;
        case LEFT:
            if (sanke.coor[0].x <= 0)
            {
                sanke.coor[0].x = my_wide;
            }
            sanke.coor[0].x -= sanke.speed;
            break; 
        case RIGHT:
            if (sanke.coor[0].x>=my_wide)
            {
                sanke.coor[0].x = 0;
            }
            sanke.coor[0].x += sanke.speed;
            break;

}
}

void keyborad()
{
    if (_kbhit())
    {
        switch (_getch())
        {
            case 'W':
            case 'w':
                if (sanke.dir != DOWN)
                {
                    sanke.dir =UP;
                }
                break;
            case 'S':
            case 's':
                if (sanke.dir != UP)
                {
                    sanke.dir = DOWN;
                }
                break;
            case 'A':
            case 'a':
                if (sanke.dir != RIGHT)
                {
                    sanke.dir = LEFT;
                }
                break;
            case 'D':
            case 'd':
                if (sanke.dir != LEFT)
                {
                    sanke.dir = RIGHT;
                }
                break;
            case ' ':
                while (1)
                {
                    if (_kbhit())
                    {
                        if (_getch() == ' ')
                        {
                            break;
                        }
                    }
                }
                break;

}
    }
}

void Game_draw()
{
    BeginBatchDraw();
    setbkcolor(RGB(28, 115, 119));//设置背景颜色
    cleardevice();
    setfillcolor(WHITE);
    //绘制蛇
    for (int i =0; i <= sanke.szie-1; i++)
    {
        solidcircle(sanke.coor[i].x, sanke.coor[i].y, 5);//绘制⚪函数
    }
    if (food.flag)
    {
        solidcircle(food.x, food.y, food.r);
    }
    //solidcircle(sanke.coor[0].x, sanke.coor[0].y, 5);
    EndBatchDraw();
}

void snake_food()
{
    if (sanke.coor[0].x <= food.x +food.r && sanke.coor[0].x >= food.x -food.r&&sanke.coor[0].y >= food.y - food.r && sanke.coor[0].y <= food.y + food.r)
    {
        food.flag = false;
        sanke.szie++;
    }
    if (!food.flag)
    {    
        srand(GetTickCount());
        food.x = rand() % my_wide+1;
        food.y = rand() % my_high+1;
        food.flag = true;
        food.r = rand() % 10 + 5;
    }
}

int menu()
{    
    int a;
    printf("#############################\n");
    printf("####  welcome to    game ####\n");
    printf("####  1.start easy  game ####\n");
    printf("####  2.start hard  game ####\n");
    printf("####  3.start wudi  game ####\n");
    printf("####  4.close       game ####\n");
    printf("#############################\n");
    printf("  please choose the number:");
    scanf_s("%d", &a);
    return a;
}

void snake_food_hard()
{
    if (sanke.coor[0].x <= food.x + food.r && sanke.coor[0].x >= food.x - food.r && sanke.coor[0].y >= food.y - food.r && sanke.coor[0].y <= food.y + food.r)
    {
        food.flag = false;
        sanke.szie++;
        sanke.speed ++;
    }
    if (!food.flag)
    {    
        srand(GetTickCount());
        food.x = rand() % my_wide+1;
        food.y = rand() % my_high+1;
        food.flag = true;
        food.r = rand() % 10 + 5;
    }
}

int Move_snake_siwang()
{    
    int l = 1;
    for (int i = sanke.szie - 1; i > 0; i--)
    {
        sanke.coor[i] = sanke.coor[i - 1];
    }
    switch (sanke.dir)
    {
    case UP:
        if (sanke.coor[0].y <= 0)
        {
            l = 0;
            return l;
        }
        sanke.coor[0].y -= sanke.speed;
        break;
    case DOWN:
        if (sanke.coor[0].y >= my_high)
        {
            l = 0;
            return l;
        }
        sanke.coor[0].y += sanke.speed;
        break;
    case LEFT:
        if (sanke.coor[0].x <= 0)
        {
            l = 0;
            return l;
        }
        sanke.coor[0].x -= sanke.speed;
        break;
    case RIGHT:
        if (sanke.coor[0].x >= my_wide)
        {
            l = 0;
            return l;
        }
        sanke.coor[0].x += sanke.speed;
        break;

}
    return 1;
}

C语言贪吃蛇用VC2022相关推荐

  1. c语言五子棋代码_基于控制台的C语言贪吃蛇

    相信对很多人来说,学完C语言以后,都会找一些小程序来练练手.例如贪吃蛇.五子棋.俄罗斯方块等等. 今天给大家分享一个基于控制台的C语言贪吃蛇小程序. 基础知识要求:C语言基础. 知识点补充 这里写一些 ...

  2. c语言安卓贪吃蛇代码下载,C语言贪吃蛇代码

    c语言编写贪吃蛇源代码,简单易懂,文件为VC源代码.如果你正在学习c语言,就来下载吧.很经典的 C语言贪吃蛇代码部分 #include #include #include#include #defin ...

  3. c语言贪吃蛇游戏编程视频教程,C语言贪吃蛇游戏精典源码 - 视频教程 - VC中文网-VC-MFC编程论坛 - Powered by Discuz!...

    19f700059b660539d5dc (38.08 KB, 下载次数: 0) 2017-11-14 16:28 上传 C语言贪吃蛇游戏精典源码 19f500058fe8fcaf675a (2.98 ...

  4. c语言对抗程序代码,C语言贪吃蛇源程序代码双人对抗

    C语言贪吃蛇源程序代码双人对抗 #include #include #include #include #include #include #include #define LEFT 100 #def ...

  5. C语言贪吃蛇游戏代码,贪吃蛇C语言代码实现大全

    一.C语言贪吃蛇代码实现前言 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础,训练编程思维,培养解决问题的思路,领略多姿多彩的C语言. 贪吃蛇是非常经典的一款游戏,本次我们模拟在控制台实现贪吃蛇游戏, ...

  6. mac下的c语言贪吃蛇

    小白小白特别白-- c语言贪吃蛇其实在网上可以找到很多的资源.但是因为用的是mac,windows.h和conio.h找不到,所以里面很多函数用不了.在网上找了很久,才慢慢写完.在这里记录一下,欢迎感 ...

  7. c语言贪吃蛇大作业报告,C语言贪吃蛇实验报告

    C语言贪吃蛇实验报告 C 语言程序设计实训报告姓 名 专 业 班 级 指导教师 二 011 年 7 月 14 日I I目录1 实训目的和要求 11.1 实训目的和任务 11.2 实训要求 12 实训任 ...

  8. c语言贪吃蛇游戏源码下载,c语言贪吃蛇游戏源码.doc

    c语言贪吃蛇游戏源码.doc /*运行是按任意键开始,不过呢,反向也算输哟*/include include include include include include include defin ...

  9. C语言贪吃蛇,流畅版,可继续升级改造

    好久没发博文了,这段时间正在入门kali,不过今天我会给大家讲解一下有关c语言贪吃蛇的小代码, 废话不多说,直接上代码 等等,不急,小编还有一个收藏了半年的文件给大家分享一下: 适合刚入门同学学习的编 ...

  10. 贪吃蛇c语言经典程序下载,c语言贪吃蛇源码

    c语言贪吃蛇源码是一款非常经典的休闲益智游戏.c语言贪吃蛇源码游戏画面采用了像素风格,并添加了5中游戏模式,为玩家带来更有趣的游戏体验,有兴趣的玩家可以下载c语言贪吃蛇源码玩玩,回忆下童年的乐趣. 游 ...

最新文章

  1. 浅谈java中的四个核心概念【转】
  2. KVM基础功能——Cpu配置
  3. python多线程爬取_python 多线程方法爬取微信公众号文章
  4. 【Spark】Spark基础教程知识点
  5. php hasmany,浅谈laravel orm 中的一对多关系 hasMany
  6. 计算机网络教程三次握手,计算机网络(二) TCP协议的三次握手
  7. 用户如何设置浏览器主页的历史记录和管理加载项
  8. apache日志管理
  9. 如何在Linux中克隆一个分区或者硬盘驱动器
  10. 根据ip查询真实地址
  11. 红尘梦落,卧醉千年,当所有的繁华散尽
  12. 服务器winsxs文件夹怎么清理工具,win10系统winsxs文件夹该如何删除?win10删除winsxs文件夹的两种方法...
  13. 我把电脑系统升级成Windows11,体验了一下还是换回Windows10
  14. 雷电网络更新:迈向 Ithaca
  15. 什么是静态测试、动态测试、黑盒测试、白盒测试、α测试、β测试?
  16. [随手记系列]SQLite数据库.db | .db-wal | .db-shw到底是个啥,为什么我导出.db里面没数据呢?
  17. 银行业务管理软件(5)
  18. html识别文字转语音,Speech Synthesis API入门 - web前端识别文字转语音
  19. go语言web开发入门之使用http2
  20. el-avatar入门学习

热门文章

  1. 【zk开发】让eclipse识别×.zul文件为xml格式
  2. doc和docx、xls和xlsx、ppt和pptx有什么区别?
  3. ASP.NET实现文件上传和下载
  4. FlightGear编译
  5. 浏览器userAgent大全
  6. 【读书心得】 高质量C++/C编程指南-林锐
  7. Linux之mmap
  8. 贪心算法几个经典的例子
  9. 局域网互传文件工具_win10一键共享工具免费版(快速解决局域网文件共享问题)官方版...
  10. Java实现十大排序算法