2024年C C++最全【C++】贪吃蛇小游戏--有图形界面和背景音乐_c+,分布式架构演进+相关笔记参考

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

(1)loadimage()加载图片,一共四个参数,第一个参数是IMAGE类的对象的地址,第二个是图片的名称,是一个字符串(L是编码格式的转换),剩下两个参数表示图片的尺寸
(2)putimage()放置图片到某个位置,一共三个参数,放入位置的横坐标,放入位置的纵坐标,IMAGE类的对象的地址
 下面我们为这个游戏再加上背景音乐:
使用PlaySound函数,一共三个参数,第一个是歌曲路径,第二个参数是应用程序的一个实例句柄,除非指向一个资源标识符,否则设置为空,第三个参数播放的方式,使用这个函数时要加上:#pragma comment(lib, "winmm.lib")
否则无法使用。而且这个函数只能播放wav格式的音乐,可以使用格式工厂将mp3格式转化为wav格式再使用。
这里写图片描述
代码如下:

#include<graphics.h>//图形库头文件
#include<conio.h>//按键相关的头文件
#include<time.h>
#include<imapi.h>
#include<windows.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
#define MAX 1000//蛇的最大节数
#define SIZE 20//蛇的尺寸
IMAGE sheadup, sheaddown, sheadleft, sheadright,body, sfood;

struct COOR//坐标类
{
    int x;
    int y;
};
enum CH
{
    up=72,//键码值
    down=80,
    left=75,
    right=77
};
//蛇类
struct SNAKE
{
    int n;//蛇的节数
    COOR scr[MAX];//蛇的坐标
    CH ch;//蛇的方向
}snake;

struct FOOD//食物类 
{
    COOR fcr;//食物坐标
    int  flag;//食物是否生成的标志
}food;

void initGame()
{
    initgraph(640, 480);//窗口宽度,高度

    setbkcolor(WHITE);
    cleardevice();
    //加载图片
    loadimage(&sheadup, L"蛇头上.jpg", SIZE, SIZE);
    loadimage(&sheaddown, L"蛇头下.jpg", SIZE, SIZE);
    loadimage(&sheadleft, L"蛇头左.jpg", SIZE, SIZE);
    loadimage(&sheadright, L"蛇头右.jpg", SIZE, SIZE);
    loadimage(&body, L"蛇身.jpg", SIZE, SIZE);
    loadimage(&sfood, L"西瓜.jpg", SIZE, SIZE);
    snake.n = 1;//蛇的节数初始化
    snake.scr[0].x = 0;//蛇的坐标
    snake.scr[0].y = 0;
    snake.ch = right;

    food.flag = 0;//生成食物
}

//绘制蛇
void SnakePaint()
{
    //绘制蛇头
    /\*fillrectangle(snake.scr[0].x, snake.scr[0].y, snake.scr[0].x + SIZE, \
 snake.scr[0].y + SIZE);\*/
    switch (snake.ch)
    {
    case up:
        putimage(snake.scr[0].x, snake.scr[0].y, &sheadup);
        break;
    case down:
        putimage(snake.scr[0].x, snake.scr[0].y, &sheaddown);
        break;
    case left:
        putimage(snake.scr[0].x, snake.scr[0].y, &sheadleft);
        break;
    case right:
        putimage(snake.scr[0].x, snake.scr[0].y, &sheadright);
        break;
    default:
        break;
    }
    //绘制蛇身
    for (int i = snake.n - 1; i > 0; i--)
    {
        /\*fillrectangle(snake.scr[i].x, snake.scr[i].y, snake.scr[i].x + \
 SIZE, snake.scr[i].y + SIZE);\*/
        putimage(snake.scr[i].x, snake.scr[i].y, &body);
    }
}
//蛇的移动
void SnakeMove()
{
    for (int i = snake.n - 1; i > 0; i--)
    {
        snake.scr[i].x = snake.scr[i - 1].x;
        snake.scr[i].y = snake.scr[i - 1].y;
    }
    switch (snake.ch)
    {
    case up:
        snake.scr[0].y -= SIZE;
        break;
    case down:
        snake.scr[0].y += SIZE;
        break;
    case left:
        snake.scr[0].x -= SIZE;
        break;
    case right:
        snake.scr[0].x += SIZE;
        break;
    default:
        break;
    }
}
//控制蛇的方向
void ChangeSnakech()
{
    switch (_getch())
    {
    case 72:
        if (snake.ch != down)
            snake.ch = up;
        break;
    case 80:
        if (snake.ch != up)
            snake.ch = down;
        break;
    case 75:
        if (snake.ch != right)
            snake.ch = left;
        break;
    case 77:
        if (snake.ch != left)
            snake.ch = right;
        break;
    default:
        break;
    }
}
//生成食物坐标
void FoodCoor()
{
    //随机数种子
    srand((unsigned)time(NULL));
    food.fcr.x = rand() % 32 * SIZE;
    food.fcr.y = rand() % 24 * SIZE;
    food.flag = 1;//生成坐标以后先不生成食物

}
//绘制食物
void FoodPaint()
{
    /\*setlinecolor(BLUE);
 roundrect(food.fcr.x,food.fcr.y,\
 food.fcr.x+SIZE,food.fcr.y+SIZE,10,10);\*///绘制圆角矩形
    putimage(food.fcr.x, food.fcr.y, &sfood);
}

//吃食物
void EatFood()


![img](https://img-blog.csdnimg.cn/img_convert/847dc46e509cd498ad965ba0381e73e3.png)
![img](https://img-blog.csdnimg.cn/img_convert/472d69e3bc95c4cc07fd0f4fabf0ca06.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中实现贪吃蛇的游戏通常涉及到图形界面编程,这可能需要一些特定的库如 Allegro, SDL, 或者使用终端模拟器(如 ncurses)在控制台上绘制字符。为了简单起见,这里我会提供一个基本的控制台版本的贪吃蛇的示例,使用字符来表示蛇的身体和食物。 ```c #include <stdio.h> #include <stdlib.h> #include <conio.h> // Windows下使用,Unix/Linux需替换为`#include <termios.h>` #define SNAKE_SPEED 5 #define SNAKE_LENGTH 10 #define SNAKE_HEAD '@' #define SNAKE_BODY '#' #define FOOD 'O' typedef struct { int x, y; int length; } Snake; Snake snake; int food_x, food_y; void print_board() { for (int i = 0; i < 20; i++) { for (int j = 0; j < 20; j++) { if (i == snake.y && j == snake.x) printf("%c", SNAKE_HEAD); else if (i == food_y && j == food_x) printf("%c", FOOD); else printf("%c", SNAKE_BODY); if ((i + 1) % 10 == 0) printf("\n"); } } printf("\n"); } void move_snake(char direction) { switch (direction) { case 'w': snake.y--; break; case 's': snake.y++; break; case 'a': snake.x--; break; case 'd': snake.x++; break; } // 检查是否撞墙或吃到食物 if (snake.x < 0 || snake.x >= 20 || snake.y < 0 || snake.y >= 20 || snake.body[snake.length - 1].x == snake.x && snake.body[snake.length - 1].y == snake.y) { // 如果撞到边界或自己,游戏结束 printf("Game over!\n"); return; } // 吃到食物时增长蛇身 if (snake.x == food_x && snake.y == food_y) { food_x = rand() % 20; food_y = rand() % 20; snake.length++; } else { // 移动蛇身到头部位置 memmove(&snake.body, &snake.body, sizeof(Snake) * (snake.length - 1)); } snake.body[snake.length - 1].x = snake.x; snake.body[snake.length - 1].y = snake.y; } int main() { srand(time(0)); // 初始化随机数生成器 snake.x = 10; snake.y = 10; snake.length = SNAKE_LENGTH; food_x = rand() % 20; food_y = rand() % 20; while (true) { print_board(); char direction = _getch(); // 获取用户输入,Windows下使用 move_snake(direction); } return 0; } ``` 这段代码创建了一个简单的贪吃蛇游戏,玩家通过方向键来控制蛇的移动。注意,这个版本仅在控制台上运行,并且没有包含完整的游戏循环和用户界面,如果你想制作一个图形化的游戏,你需要使用专门的游戏开发库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值