C语言项目实战:《气球射击》游戏项目!200行代码轻松实现

C语言项目实战:《气球射击》游戏项目!200行代码轻松实现

首页枪战射击全民打气球更新时间:2024-04-24

这篇文章主要为大家详细介绍了C语言实现——《气球射击》小游戏,示例源码介绍的非常详细,具有相当的参考价值,感兴趣的小伙伴们可以参考一下的!

游戏介绍:

《打气球》,英文名是Balloon Hit。就像我们在现实中见到的一样,只需要你用枪瞄准气球射击即可,玩法简单,容易上手!在时间范围内,打破气球的数量越多,排名越靠前。还等什么,来打破气球,打破记录。

开发准备

编译器:VS2013/2019最佳;

插件:图形库插件easyx,涉及图片素材可以自行百度找也可以关注文末领取;

效果图展示:

配套讲解教程:

源代码示例:

#include<stdio.h> #include<math.h> #include<graphics.h>//包含easyx图形库头文件 enum Attr { WIDTH=640, HEIGHT=480, MAX_BULL=15 }; //不同数据类型的集合 结构体 struct Battery//炮台 { int cx;//炮台中心位置 int cy; int x; //炮管末端坐标,可以改变的 int y; int len; int speed; double radian;//弧度 }; struct Bullet //子弹结构 { int x; int y; int vx;//xy轴分量 int vy; int speed;//子弹速度; bool flag; //子弹是否存在 DWORD color;//子弹的颜色 }; struct Ball { int x; int y; DWORD color; int flag; }; struct Battery bat; struct Bullet bull[MAX_BULL]; struct Ball ball[MAX_BULL]; //初始化数据 void gameInit() { bat.cx = WIDTH / 2; bat.cy = HEIGHT - 10; bat.x = bat.cx; bat.y = bat.cy-bat.len; bat.len = 80; bat.speed = 7; //初始化气球 for (int i = 0; i < MAX_BULL; i ) { ball[i].x = rand() % WIDTH; ball[i].y = rand() % HEIGHT; ball[i].flag = true; ball[i].color= RGB(rand() % 256, rand() % 256, rand() % 256); } } void gameDraw() { //设置背景颜色 setbkcolor(RGB(101, 144, 182)); cleardevice(); //画气球 椭圆,尾巴,颜色 setlinestyle(PS_SOLID, 1); setlinecolor(WHITE); for (int i = 0; i < MAX_BULL; i ) { if (ball[i].flag) { setfillcolor(ball[i].color); solidellipse(ball[i].x, ball[i].y, ball[i].x 30, ball[i].y 60); //画尾巴 arc(ball[i].x, ball[i].y 60, ball[i].x 20, ball[i].y 60 20, 0, 1.2); //画里面的弧,让它看起来更像气球 arc(ball[i].x 10, ball[i].y 10, ball[i].x 25, ball[i].y 50, 0, 1.2); } } //printf("hello 同学们~"); //画炮台 setlinestyle(PS_DASHDOT, 2); circle(WIDTH / 2, HEIGHT - 10, 60); setfillcolor(BLACK); solidcircle(WIDTH / 2, HEIGHT - 10, 5); //画炮管 setlinecolor(BLACK); setlinestyle(PS_SOLID, 5); line(WIDTH / 2, HEIGHT - 10, bat.x, bat.y); //绘制子弹 for (int i = 0; i < MAX_BULL; i ) { if (bull[i].flag) { setfillcolor(bull[i].color); solidcircle(bull[i].x, bull[i].y, 5); } } } //产生子弹 void createBulllet() { for (int i = 0; i < MAX_BULL; i ) { if (bull[i].flag == false)//如果子弹不存在,则产生一个 { bull[i].flag = true; bull[i].x = bat.x; bull[i].y = bat.y; bull[i].color = RGB(rand()%6, rand() % 256, rand() % 256); bull[i].vx = bat.speed * cos(bat.radian); bull[i].vy = bat.speed * sin(bat.radian); break; } } } //子弹的移动 void bullMove() { for (int i = 0; i < MAX_BULL; i ) { if (bull[i].flag) { bull[i].x = bull[i].vx; bull[i].y -= bull[i].vy; //判断子弹是否超出了边界 if (bull[i].x<0 || bull[i].x>WIDTH || bull[i].y < 0) { bull[i].flag = false; } } } } //鼠标操作 void mouseControl() { //判断是否有鼠标操作 if (MouseHit()) { MOUSEMSG msg = GetMouseMsg(); bat.radian = atan2((double)bat.y - msg.y, (double)msg.x - bat.x); bat.x = bat.cx cos(bat.radian) * bat.len; bat.y = bat.cy - sin(bat.radian) * bat.len; printf(".....\n"); //如果鼠标左键按下,发射子弹 if (msg.uMsg == WM_LBUTTONDOWN) { createBulllet(); } } } void 函数() { } /* 1,26个英文字母认识吧! 2,知道简单的单词,create */ void playBall() { //遍历气球 for (int i = 0; i < MAX_BULL; i ) { if (ball[i].flag) { //遍历子弹 for (int k = 0; k < MAX_BULL; k ) { //判断坐标是否发生了碰撞 if (bull[k].x>ball[i].x && bull[k].x<ball[i].x 30 && bull[k].y>ball[i].y && bull[k].y<ball[i].y 60) { bull[k].flag = false; ball[i].flag = false; } } } } } int main() { //需要一个窗口,init 初始化 graph initgraph(WIDTH, HEIGHT,SHOWCONSOLE); gameInit(); //双缓冲绘图 BeginBatchDraw(); while (1) { gameDraw(); FlushBatchDraw(); mouseControl(); bullMove(); playBall(); } EndBatchDraw(); return 0; }

未完成的部分功能代码,大家也可以自己先去想想试试,每一次的思考就是你进步的过程!

如果学习的过程中有什么问题,以及本项目有什么不懂的地方,都可以来找我交流,我来帮你!

那么今天的分享就到这里了,后续会更新更多精彩项目或者知识内容的,大家要好好学C语言C 哟~

写在最后:对于准备学习C/C 编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

编程学习书籍分享:

编程学习视频分享:

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

对于C/C 感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C 的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved