既有适合小白学习的零基础资料,也有适合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)**