返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言Easyx实现贪吃蛇详解
  • 946
分享到

C语言Easyx实现贪吃蛇详解

2024-04-02 19:04:59 946人浏览 泡泡鱼
摘要

目录一、头文件包含二、创建蛇与食物的结构体三、游戏的初始化四、游戏的绘画事件五、蛇的移动事件六、输入方向******这个方面没什么好解释的大家看代码应该可以看懂。七、生成食物八、吃食

一、头文件包含


     #include<stdio.h>
      #include<graphics.h> //图形处理需要包含的库文件
      #include<mmsystem.h> //windows多媒体接口
      #include<coNIO.h>   //读取键盘输入
      #include<time.h>    //随机数种子
      #include<stdlib.h>   //内存分配

包含完头文件后进行一些预处理操作:

#pragma comment(lib,"winmm.lib")//多媒体接口
#define NUM 200;
#define SIZE 10
enum Ch{ up=72,down=80,left=75,right=77} ;

二、创建蛇与食物的结构体

直接上代码:


struct pos   蛇身坐标
{
    int x;
    int y;
};
struct snake  
{
    int n;    初始化蛇身长度
    Ch ch;  蛇前进的方向
    pos szb[3265];  蛇的坐标数组
};
struct food
{
    int x;
    int y;
    bool iseat;  判断食物是否被吃
};
创建一个蛇与食物
snake s;
food  f;

三、游戏的初始化


void gameinit()
{
    srand((unsigned int)time(NULL));//随机数种子,用于随机生成食物
    s.n = 2;  //蛇的初始长度,可以自己设定
    s.ch = right;//蛇的初始方向;
    s.szb[0].x=100;
    s.szb[0].y=100;
    s.szb[1].x = 90;
    s.szb[1].y = 100;//蛇的初始位置坐标
    f.iseat = true;
}

四、游戏的绘画事件


   cleardevice();  //每次绘画都要进行一次清屏
    setfillcolor(RED); //蛇头颜色
    fillrectangle(s.szb[0].x, s.szb[0].y,
        s.szb[0].x + SIZE, s.szb[0].y + SIZE);//SIZE在预处理是已经定义表示每个蛇身的大小
    for (int i = 0; i < s.n; i++) {
        rectangle(s.szb[i].x, s.szb[i].y,
            s.szb[i].x + SIZE, s.szb[i].y + SIZE);
    } //生成矩形蛇
    setfillcolor(GREEN);//食物颜色
    fillroundrect(f.x, f.y, f.x + SIZE, f.y + SIZE,5,5);//生成圆形食物

五、蛇的移动事件


void snakemove()
{
    for (int i = s.n - 1; i > 0; i--)
    {
        s.szb[i].x = s.szb[i - 1].x;
        s.szb[i].y = s.szb[i - 1].y;  //通过数组的变换来实现蛇的移动
    }
    switch (s.ch)//ch枚举类型在预处理时已经定义
    {
    case up:
        s.szb[0].y -= SIZE;
        //由于在窗口坐标系中y方向是向下的所以向上移动需要减去一个size
        break;
    case down:
        s.szb[0].y += SIZE;
        break;
    case left:
        s.szb[0].x -= SIZE;
        break;
    case right:
        s.szb[0].x += SIZE;
        break;
    }
}

六、输入方向******这个方面没什么好解释的大家看代码应该可以看懂。


void changech()
{
    char key;
    key = _getch();
    switch (key)
    {
    case up:
        if (s.ch != down)
            s.ch = up;
        break;
    case down:
        if (s.ch != up)
            s.ch = down;
        break;
    case left:
        if (s.ch != right)
            s.ch = left;
    case right:
        if (s.ch != left)
            s.ch = right;
    }
}

七、生成食物


void creatfood()
{
    bool flag = false;
    if (f.iseat == true) {
        while (1)
        {
            flag = false;//设定flag判断食物是否与蛇身重合
                f.x = rand() % 68*10;
                f.y = rand() % 48*10;//食物的随机生成
                for (int i = 0; i < s.n; i++)
                {
                    if (f.x == s.szb[i].x && f.y == s.szb[i].y)
                    {
                        flag = true;
                        break;
                    }
                }
                if (!flag)
                {
                    f.iseat = false;
                    break;
                }
           //上面部分为判断食物是否与蛇身重合
        }
    }
}

八、吃食物


void eatfood()
{
    if (s.szb[0].x == f.x && s.szb[0].y == f.y)//如果蛇头与食物重合那么食物就被吃掉了
    {
        f.iseat = true;
        s.n++;
    }
}

九、游戏失败的判定

因为我初始化的窗口为640*480,if判断的范围打击可以根据自己窗口大小设定。


int gameover()
{
    if (s.szb[0].x < 0 || s.szb[0].x>640 || s.szb[0].y < 0 || s.szb[0].y>480)
    {
        return 1;
    }
    for (int i = 1; i < s.n; i++)
    {
        if (s.szb[0].x == s.szb[i].x && s.szb[0].y == s.szb[i].y)
        {
            return 1;
        }
    }
    return 0;
}

十、main函数


int main()
{
    initgraph(680,480);
    mciSendString(L"open 7895.mp3", 0, 0, 0);
    mciSendString(L"play 7895.mp3", 0, 0, 0);
//添加音乐必须加上这个预处理指令#pragma comment(lib,"winmm.lib")
    int n = 0;
    gameinit();
    while (1) {
        while (!_kbhit())
        {
            snakemove();
            drawgame();
            creatfood();
            eatfood();
            n = gameover();
            if (n)
                break;
            Sleep(100);
        }
        if (n)
            break;
        changech();
    }
    closegraph();
    getchar();
    return 0;
}

总结:

贪吃蛇游戏的难点就在于蛇身的变化与移动,只要这两个问题解决后其他的都很好想。封面就是运行后的结果。

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: C语言Easyx实现贪吃蛇详解

本文链接: https://lsjlt.com/news/137835.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言Easyx实现贪吃蛇详解
    目录一、头文件包含二、创建蛇与食物的结构体三、游戏的初始化四、游戏的绘画事件五、蛇的移动事件六、输入方向******这个方面没什么好解释的大家看代码应该可以看懂。七、生成食物八、吃食...
    99+
    2024-04-02
  • C语言基于EasyX实现贪吃蛇
    本文实例为大家分享了C语言基于EasyX实现贪吃蛇的具体代码,供大家参考,具体内容如下 成品展示: 实现思路: 贪吃蛇的实现思路并不复杂,由于我们需要将数据展示在图形窗口上,因此就...
    99+
    2024-04-02
  • C语言基于EasyX如何实现贪吃蛇游戏
    本篇内容主要讲解“C语言基于EasyX如何实现贪吃蛇游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言基于EasyX如何实现贪吃蛇游戏”吧!成品展示:实现思路:贪吃蛇的实现思路并不复杂,由...
    99+
    2023-07-02
  • C语言如何实现贪吃蛇
    本篇内容主要讲解“C语言如何实现贪吃蛇”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何实现贪吃蛇”吧!一、游戏说明1.1游戏按键说明按方向键上下左右,可以实现蛇移动方向的改变。短时间长按...
    99+
    2023-06-21
  • C语言实现贪吃蛇超详细教程
    目录一、游戏说明1.1游戏按键说明1.2计分系统二、游戏运行2.1游戏效果展示2.2一个报错的纠正2.3 游戏代码三、游戏框架构建3.1游戏界面的大小3.2蛇头和蛇身3.2.1蛇头3...
    99+
    2024-04-02
  • C语言实现贪吃蛇小黑窗
    本文实例为大家分享了C语言实现贪吃蛇小黑窗的具体代码,供大家参考,具体内容如下 思路: 1.利用整型二维数组保存显示数据,小蛇每移动一次清屏并便利数组做到动态效果。每次移动(清屏)的...
    99+
    2024-04-02
  • 用C语言实现贪吃蛇小游戏
    本文实例为大家分享了C语言实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 实现功能 蛇最开始三节,向右移动。用户可以通过按上下左右来控制蛇的移动,食物随机产生,蛇吃到食物后蛇的...
    99+
    2024-04-02
  • 用纯C语言实现贪吃蛇游戏
    本文实例为大家分享了C语言实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 在读大学生一枚,五一期间用四天时间写一个小游戏。 本贪吃蛇游戏代码共计531行,开发环境是VS,游戏分为...
    99+
    2024-04-02
  • C语言实现贪吃蛇游戏代码
    目录一、实现效果二、部分代码解释总结一、实现效果 键位:使用wasd四个键位来控制方向,按q键退出(注意在终用英文输入法实现键控) 规则:蛇每吃一个豆会得10分,同时身体边长、移速加...
    99+
    2024-04-02
  • C语言实现贪吃蛇游戏演示
    本文实例为大家分享了C语言实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 IDE用的是 VS2019 先看效果   代码全览 game.h #pragma once...
    99+
    2024-04-02
  • Linux下C语言实现贪吃蛇小游戏
    本文实例为大家分享了C语言实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 此次贪吃蛇小游戏的目的是使得我在Linux底下使用vi进行编写的 心得: 1.自己对linux中如何使用vi更加熟悉 如::wq yy ...
    99+
    2022-06-03
    Linux C语言 贪吃蛇
  • C语言链表实现贪吃蛇小游戏
    本文实例为大家分享了C语言链表实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 项目名称: 贪吃蛇小游戏 运行环境: Linux 编程语言: C语言 主要语法: 链表,指针,函数 ...
    99+
    2024-04-02
  • C语言实现简单的贪吃蛇游戏
    本文实例为大家分享了C语言实现简单贪吃蛇游戏的具体代码,供大家参考,具体内容如下 用指针数组来表示蛇,p[0]表示蛇头 控制方向:w,s,a,d-->上下左右  j,...
    99+
    2024-04-02
  • 基于C语言实现贪吃蛇小游戏
    本文实例为大家分享了C语言实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 1.目标要求: 1.上下左右控制蛇头转向2.若蛇头碰到食物,长度加一3.若蛇头碰到边框、碰到自身或蛇回...
    99+
    2024-04-02
  • C语言如何实现贪吃蛇小游戏
    这篇文章给大家分享的是有关C语言如何实现贪吃蛇小游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实现功能蛇最开始三节,向右移动。用户可以通过按上下左右来控制蛇的移动,食物随机产生,蛇吃到食物后蛇的身体会变长。蛇...
    99+
    2023-06-15
  • C语言如何实现贪吃蛇小黑窗
    本篇内容主要讲解“C语言如何实现贪吃蛇小黑窗”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何实现贪吃蛇小黑窗”吧!思路:利用整型二维数组保存显示数据,小蛇每移动一次清屏并便利数组做到动态...
    99+
    2023-06-22
  • 使用C语言实现贪吃蛇小游戏
    本文实例为大家分享了C语言实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 前言 控制台的欢乐就是这么简单; 提示:以下是本篇文章正文内容,下面案例可供参考 一、贪吃蛇实现的结构...
    99+
    2024-04-02
  • C语言实现贪吃蛇小游戏开发
    本文实例为大家分享了C语言实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 程序介绍 代码 #include<stdafx.h>            //vc自带...
    99+
    2022-11-13
    C语言 贪吃蛇
  • C语言实现贪吃蛇代码怎么写
    这是一个简单的C语言贪吃蛇游戏的代码示例: #include <stdio.h> #include <conio....
    99+
    2024-03-01
    C语言
  • C语言实现简单的贪吃蛇小游戏
    本文实例为大家分享了C语言实现简单贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 #温馨提示:以下设计在VS2019下完美运行,完整代码附在末尾,供大家学习参考 (1)游戏进入界面...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作