iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言游戏项目球球大作战实现流程
  • 481
分享到

C语言游戏项目球球大作战实现流程

2024-04-02 19:04:59 481人浏览 安东尼
摘要

目录项目代码 1、结构体2、初始化3、绘制函数 4、玩家控制函数 5、吃食物函数6、电脑移动函数7、主函数总结序 时间在流去,我们在长大 嗨,这里是狐狸

时间在流去,我们在长大

嗨,这里是狐狸~~

         今天是2022年1月11日,今天突然发现好久没有给你们更新项目了,今天来教大家一个新的项目,一个游戏项目——球球大作战。

         球球大作战在宇宙深处一片遍布着荆棘之花的神秘星云中,生活着一群名叫“波拉哩”(译名“球球”)的奇特生物。他们外表萌萌,却有着勇敢的心。他们是天生的战斗种族,为战斗而生,为战斗而亡。

         传说中,这群波拉哩的共同祖先是一只叫“塔坦”的超级波拉哩,塔坦的职责就是守护宇宙瑰宝“荆棘之花”,它拥有强大的能量,会分出分身,变化万物,唯一的弱点就是贪吃。

         一天,塔坦终于禁不住诱惑,偷食了“荆棘之花”,结果身体爆裂,成为了数以亿计的小波拉哩。从此,波拉哩的族群就受到了贪食的诅咒,只能在这片星云中无休止的战斗,如果停止战斗,生命便会流失,消亡在茫茫的星空之中。在漫漫的历史长河里,只有最强大的波拉哩才能冲过这片黑暗星云,打破命运的枷,去寻找那传说中的光明与和平。

         为了那甜蜜的希望,波拉哩们战斗着。他们必须奋力奔跑,让自己变大变大再变大,才能对抗比自己更强的存在。哪怕经历无数失败也必须重新凝聚力量,直到成为最强壮的那个。

球球大作战

项目代码 

 直接进入代码阶段吧,大家认真观看。

1、结构体


struct Ball //小球结构,玩家,食物,人工智障
{
	int x;
	int y;
	int r;//半径
	DWord color;//颜色
	bool flag;//是否存在 
};
int score = 0;//分数
struct Ball food[FOOD_NUM];
struct Ball player;//玩家
struct Ball ai[AI_NUM];

2、初始化


void GameInit()
{
	//播放背景音乐
	mciSendString("open ./BallBGM.mp3 alias BGM", 0, 0, 0);
	//mciSendString("play BGM repeat", 0, 0, 0);
	//设置随机数种子 时间是在不断的变化的
	srand((unsigned)time(NULL));
	//找到每一个元素
	for (int i = 0; i < FOOD_NUM; i++)
	{
		food[i].x = rand() % WIDTH;
		food[i].y = rand() % HEIGHT;
		food[i].flag = true;//刚开始食物是存在的,没有被吃掉
		food[i].r = rand() % 6 + 1;
		food[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);
	}
	//初始化玩家数据
	player.x = rand() % WIDTH;
	player.y = rand() % HEIGHT;
	player.r = 18;//只要比最大的食物大就可以了
	player.flag = true;
	player.color= RGB(rand() % 256, rand() % 256, rand() % 256);
	//初始化ai
	for (int i = 0; i < AI_NUM; i++)
	{
		ai[i].x = rand() % WIDTH;
		ai[i].y = rand() % HEIGHT;
		ai[i].r = rand() % 10 + 5;
		ai[i].flag = true;
		ai[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);
	}
}

3、绘制函数 


void GameDraw()
{
	//防止闪屏
	BeginBatchDraw();
	setbkcolor(WHITE);
	cleardevice();//清屏
	for (int i = 0; i < FOOD_NUM; i++)
	{
		if (food[i].flag)
		{
			setfillcolor(food[i].color);//设置填充颜色
			solidcircle(food[i].x, food[i].y, food[i].r);//画一个填充圆
		}
		else
		{
			food[i].x = rand() % WIDTH;
			food[i].y = rand() % HEIGHT;
			food[i].flag = true;//刚开始食物是存在的,没有被吃掉
			food[i].r = rand() % 6 + 1;
			food[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);
		}
	}
	//绘制玩家
	setfillcolor(player.color);//设置填充颜色
	solidcircle(player.x, player.y, player.r);
	settextcolor(GREEN);
	settextstyle(30, 0, "黑体");
	setbkmode(0);//设置文字背景透明
	outtextxy(player.x-50, player.y, "我是最亮的崽");
	//输出分数
	settextcolor(BLACK);
	char str[20];
	sprintf(str,"分数:%d",score);//格式化字符串
	outtextxy(20, 20, str);
	//绘制ai
	for (int i = 0; i < AI_NUM; i++)
	{
		if (ai[i].flag)
		{
			setfillcolor(ai[i].color);//设置填充颜色
			solidcircle(ai[i].x, ai[i].y, ai[i].r);//画一个填充圆
		}
	}
	EndBatchDraw();
}

4、玩家控制函数 


void keyControl(int speed)
{
	//获取键盘消息,按得是哪一个键  _getch();    GetAsyncKeyState() windows系统函数
	if ((GetAsyncKeyState('W') || GetAsyncKeyState(VK_UP)) && player.y >= 0)//按了上键 y不能小于0
	{
		player.y -= speed;
	}
	if ((GetAsyncKeyState('S') || GetAsyncKeyState(VK_DOWN)) && player.y <= HEIGHT)//按了下键
	{
		player.y += speed;
	}
	if ((GetAsyncKeyState('A') || GetAsyncKeyState(VK_LEFT)) && player.x >= 0)//按了左键
	{
		player.x -= speed;
	}
	if ((GetAsyncKeyState('D') || GetAsyncKeyState(VK_RIGHT)) && player.x <= WIDTH)//按了右键
	{
		player.x += speed;
	}
}

5、吃食物函数


void eatFood()
{
	for (int i = 0; i < FOOD_NUM; i++)
	{
		if (food[i].flag && distance(food[i], player) <= player.r)
		{
 
			food[i].flag = false;
			player.r += food[i].r / 4;
			score++;//加分
		}
	}
}

6、电脑移动函数


void aiMove()
{
	for (int i = 0; i < AI_NUM; i++)
	{
		if (ai[i].flag)
		{
			ai[i].x += rand() % 5-2;// ?%5={0,1,2,3,4}-2=={-2,-1,0,1,2}
			ai[i].y += rand() % 5 - 2;//0 
		}
	}
}

7、主函数


int main(int arGC,char *agv[])
{
	initgraph(WIDTH, HEIGHT);
	GameInit();
	while (1)
	{
		keyControl(1);
		GameDraw();
		eatFood();
		aiMove();
	}
 
	getchar();
	return 0;
}

总结

        OK,简单总结一下下,距离上次给大家分享项目好像已经过去很久了,今天的这个项目希望大家可以认真的去试试,难度不大,这个项目暂时是个单机版的,大家可以增加玩家联机对战也是可以的,画风也比较简单,这些都是可以自己去优化的,好叭,今天就到这里了哈。后续我还会发布更多的项目源或者学习资料,希望大家可以持续关注。

视频讲解

      今天没有效果展示,emmmm,有很大原因是因为那个录制有点麻烦,有兴趣的同学可以去看视频讲解,上面有详细的代码讲解,大家可以认真观看

https://www.bilibili.com/video/BV1Yu41127E4/

到此这篇关于C语言游戏项目球球大作战实现流程的文章就介绍到这了,更多相关C语言 球球大作战内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言游戏项目球球大作战实现流程

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c语言怎么计算字符串长度
    在C语言中,可以使用内置的strlen()函数来计算字符串的长度。该函数位于string.h头文件中。以下是一个示例代码: #inc...
    99+
    2024-05-15
    c语言
  • c语言怎么判断三个数的大小
    可以通过比较三个数之间的大小关系来判断它们的大小。以下是一个示例代码: #include <stdio.h> int ...
    99+
    2024-05-15
    c语言
  • c++排序函数sort怎么使用
    在C++中,使用sort函数对容器中的元素进行排序,可以按照默认的升序排列,也可以自定义排序规则。 下面是一个简单的例子,对一个ve...
    99+
    2024-05-15
    c++
  • c++中string的compare函数怎么使用
    在C++中,可以使用string的compare函数来比较两个string对象的大小。该函数的原型如下: int compare(c...
    99+
    2024-05-15
    c++
  • c++中string的compare函数有什么用
    c++中string的compare函数用于比较两个字符串的大小关系。该函数返回一个整数值,表示两个字符串的比较结果。 具体来说,如...
    99+
    2024-05-15
    c++
  • c++中print函数的功能有哪些
    在C++中,通常使用std::cout来进行输出操作,而不是使用print函数。std::cout是C++标准库中的一个输出流对象,...
    99+
    2024-05-15
    c++
  • c语言数据结构怎么使用
    在C语言中,数据结构可以通过定义结构体来实现。以下是一些常见的数据结构的使用方法示例: 链表: #include <std...
    99+
    2024-05-15
    c语言
  • c++中print函数的用法是什么
    在C++中没有内置的print函数,但可以使用cout来输出内容到控制台。cout是C++标准库中的一个输出流对象,可以使用<...
    99+
    2024-05-15
    c++
  • c++中concept的用法是什么
    在C++20中,Concept是一种新的语言特性,用于定义类型要求和约束。Concept可以被用来约束函数模板、类模板和普通函数的参...
    99+
    2024-05-15
    c++
  • c++中concept的作用是什么
    在C++中,concept的作用是定义一种通用的约束,用于限制模板参数的类型范围。通过使用concept,可以在编译时对模板参数进行...
    99+
    2024-05-15
    c++
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作