C语言游戏教学项目,有C基础和对小游戏感兴趣的可以看看,做出来成就感爆棚~
使用的编译器是VS2013,图片素材,可以自己百度寻找素材图片,也可以在文章最后领取哦~
效果图:
话不多说,接下来就奉上我们的源码了(写的时候包含了一些笔者的注释,勿怪勿怪):
/* 1.创建一个可视化窗口 2.显示一张背景图 */ #include#include #include #include #include #include #pragma comment(lib,"winmm.lib") /* stdlib.h : Sleep stdio.h : C语言头文件 conio.h : _getch() graphics.h: 图形库头文件 写的时候报错,需要安装 */ int main() { //288*608 srand((unsigned int)time(NULL)); initgraph(288, 608); struct 柱子 pillar[3]; for (int i = 0; i < 3; i++) { initPillar(pillar, i); //让柱子之间有差距 pillar[i].x = 288 + i * 150; } loadResource(); while (1) { putimage(0, 0, &background); drawBird(flyBird.x, flyBird.y); flyBird.y += 10; for (int i = 0; i < 3; i++) { pillar[i].x -= 10; if (pillar[i].x < (-52 - 150)) { initPillar(pillar, i); } } for (int i = 0; i < 3; i++) { drawPillar(pillar[i]); } //一定要先判断按键是否按下 if (_kbhit()) { keyDown(); } if (hitFloor()) { actionGameOver(); break; } Sleep(50); } closegraph(); return 0; } IMAGE background; IMAGE myBird[2]; //鸟有两张 myBird[0] myBird[1] IMAGE overImg[2]; IMAGE down[2]; IMAGE up[2]; //鸟的属性 struct 鸟 { int x; int y; int speed; //上跳速度 }; struct 鸟 flyBird = { 124, 0, 100 }; struct 柱子 { int x; //上面柱子的起始坐标 int y; int h; //上面柱子显示的高度 }; //加载资源 void loadResource() { loadimage(&background, "background.bmp"); loadimage(&myBird[0], "birdy.bmp", 48, 48); loadimage(&myBird[1], "bird.bmp", 48, 48); loadimage(&overImg[0], "endy.bmp"); loadimage(&overImg[1], "end.bmp"); loadimage(&down[0], "downy.bmp"); loadimage(&down[1], "down.bmp"); loadimage(&up[0], "upy.bmp"); loadimage(&up[1], "up.bmp"); } //画鸟--->透明贴图技术 void drawBird(int x, int y) { //SRCAND方式贴掩码图 putimage(x, y, &myBird[0], SRCAND); //SRCPAINT 方式贴背景图 putimage(x, y, &myBird[1], SRCPAINT); } //多线程 DWORD WINAPI playMusic(LPVOID lpParamer) { mciSendString("open jump.mp3", 0, 0, 0); mciSendString("play jump.mp3 wait", 0, 0, 0); mciSendString("close jump.mp3", 0, 0, 0); return 0; } //应用技术-->所有编程行业通用 //没有学的同学,想办法去拓展一下 //并发编程,网络编程,数据库编程 //鸟的按键处理 void keyDown() { /* mciSendString("指令",0,0,0); 指令: open:打开 play:播放 pause:暂停 wait:等待 stop:停止 close:关闭 */ char userKey = _getch(); //_getch(); switch (userKey) { case ' ': flyBird.y -= flyBird.speed; CreateThread(NULL, NULL, playMusic, NULL, NULL, NULL); break; default: break; } } int hitFloor() { if (flyBird.y <= 0 || flyBird.y >= (608 - 96)) return 1; return 0; } void actionGameOver() { //结束图片初始位置 int x = 50; int y = 608; while (y >= 240) { putimage(0, 0, &background); putimage(x, y, &overImg[0], SRCAND); putimage(x, y, &overImg[1], SRCPAINT); y -= 50; Sleep(50); } Sleep(5000); } void initPillar(struct 柱子 pillar[], int i) { pillar[i].h = rand() % 100 + 160; //[160,259]; pillar[i].x = 288; pillar[i].y = 0; } void drawPillar(struct 柱子 pillar) { //上面的柱子 putimage(pillar.x, 0, 52, pillar.h, &down[0], 0, 320 - pillar.h, SRCAND); putimage(pillar.x, 0, 52, pillar.h, &down[1], 0, 320 - pillar.h, SRCPAINT); //下面那根柱子 putimage(pillar.x, 512 - (320 - pillar.h), 52, 320 - pillar.h, &up[0], 0, 0, SRCAND); putimage(pillar.x, 512 - (320 - pillar.h), 52, 320 - pillar.h, &up[1], 0, 0, SRCPAINT); }
//小作业:
//碰上面柱子的求解
//碰下面柱子的柱子
最后呢,笔者将剩下了这两部分源码给去掉了,目的想必大家也知道,可不要直接照着源码敲,而不自己去理解哦!你们应该学着自己去理解这个小游戏,然后呢,自己写出剩下的部分哦!希望我们能够在学习C语言C++的路上越走越远,共勉!
自学C/C++编程难度很大,不妨和一些志同道合的小伙伴一起学习成长!
C语言C++编程学习交流圈子,【点击进入】微信公众号:C语言编程学习基地
有一些源码和资料分享,欢迎转行也学习编程的伙伴,和大家一起交流成长会比自己琢磨更快哦!