前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【精选】对随机粒子玩法的简单探索(C语言简单版本)

【精选】对随机粒子玩法的简单探索(C语言简单版本)

作者头像
命运之光
发布2024-03-20 09:22:45
930
发布2024-03-20 09:22:45
举报
文章被收录于专栏:我在本科期间写的文章

【精选】对随机粒子玩法的简单探索(C语言简单版本)

程序展示

(1) https://live.csdn.net/v/embed/291439

随机粒子初

(2)

https://live.csdn.net/v/embed/291441

随机粒子

注:手机用户视频打不开可以在主页中查看视频

一、项目环境

1.Visual Studio 2022 2.安装easyx图形库,可以调用头文件

#include<easyx.h>

简单介绍一下easyx图形库

EasyX库是一个基于C语言的图形界面库,可以用于Windows操作系统下的图形界面应用程序开发。该库提供了一些易于使用的图形绘制函数和简单的事件处理功能,可以帮助开发者快速地创建各种图形应用程序,如游戏、图形编辑器等。 EasyX库提供了丰富的绘图功能,如直线、矩形、圆形、椭圆、多边形等基本形状的绘制,同时还支持图片、文字、音频等多种媒体资源的加载和处理。此外,EasyX库还支持鼠标、键盘等多种事件的处理,可以让用户与应用程序进行交互。 EasyX库的另一个特点是易于学习和使用。它提供了简单的API,使得初学者也可以轻松地入门,并且具有丰富的在线文档和示例程序,帮助开发者快速地学习和理解如何使用这个库。除此之外,EasyX库还可以和Visual Studio等常见的集成开发环境进行配合使用,使得开发工作更加高效。 总之,EasyX库是一款简单易用、功能强大的图形界面库,适用于初学者和有一定编程基础的开发者,可以用于快速开发各种图形应用程序。

Easyx图形库

点击此处跳转到Easyx官方下载

二、运行效果展示

运行展示

功能:随着鼠标移动粒子会跟随鼠标一起移动

三、项目介绍

一种对随机粒子玩法的探索,随着鼠标的移动粒子会跟随鼠标一起移动,采用七彩颜色的粒子画面十分的治愈,当然也可以改成点击鼠标左键粒子随之靠拢,更多玩法猿子们可以自行探索修改。

四、项目源代码分享

对随机粒子玩法的简单探索

代码语言:javascript
复制
#include<stdio.h>
#include<easyx.h>
#include<graphics.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include<iostream>
#include<math.h>
#include<time.h>
#define NUM_OF_BALLS 300
#define PI 3.14
typedef struct {
	int x;
	int y;
	int vx;
	int vy;
	COLORREF color;
}ball;
int main()
{
	srand(time(0));
	initgraph(1400, 800, EW_SHOWCONSOLE);

	int r = 10;
	ball* balls = (ball*)malloc(sizeof(ball) * NUM_OF_BALLS);
	if (balls == NULL)
	{
		return -1;
	}

	for (int i = 0; i < NUM_OF_BALLS; i++)
	{
		int m, n;
		m = 0 + r;
		n = 1400 - r;
		balls[i].x = rand() % (n - m + 1) + m;
		m = 0 + r;
		n = 800 - r;
		balls[i].y = rand() % (n - m + 1) + m;
		balls[i].color = HSVtoRGB((float)(rand() % 360), 0.8f, 0.9f);

		m = 3;
		n = 8;
		int v = rand() % (n - m + 1) + m;
		double theta;
		theta = rand() % 360;
		balls[i].vx = v * cos(theta * PI / 180);
		balls[i].vy = v * sin(theta * PI / 180);
	}

	BeginBatchDraw();
	while (1)
	{
		cleardevice();
		for (int i = 0; i < NUM_OF_BALLS; i++)
		{
			setfillcolor(balls[i].color);
			fillcircle(balls[i].x, balls[i].y, r);
		}

		FlushBatchDraw();

		Sleep(40);


		for (int i = 0; i < NUM_OF_BALLS; i++)
		{
			if (balls[i].y <= 0 - r || balls[i].y >= 800 + r)
			{
				balls[i].vy = -balls[i].vy;
			}
			if (balls[i].x >= 1400 - r || balls[i].x <= 0 + r)
			{
				balls[i].vx = -balls[i].vx;
			}
			balls[i].x += balls[i].vx;
			balls[i].y += balls[i].vy;
		}
		
		if (MouseHit())//判断是否有鼠标信息
		{
			MOUSEMSG msg = GetMouseMsg();//接收鼠标信息 
			for (int i = 0; i < NUM_OF_BALLS; i++)
			{
				if (msg.x < balls[i].x)
				{
					balls[i].x = balls[i].x - 30;
				}
				if (msg.x > balls[i].x)
				{
					balls[i].x += 30;
				}
				if (msg.y < balls[i].y)
				{
					balls[i].y -= 30;
				}
				if (msg.y > balls[i].y)
				{
					balls[i].y += 30;
				}
				if (msg.x == balls[i].x && msg.y == balls[i].y)
				{
					break;
				}
			}
	
			printf("坐标为(%d,%d)\n", msg.x, msg.y);
			switch (msg.uMsg)
			{
				case WM_LBUTTONDOWN:
					//NO的区域
					if (msg.x > 0 && msg.x < 1400 && msg.y>0 && msg.y < 800)
					{
						printf("坐标为(%d,%d)无所谓,我会出手!\n", msg.x, msg.y);
						
					}
				break;
			}
		}
	}
	EndBatchDraw();
	closegraph();
	return 0;
}
总结与思考

对于随机粒子的探索还有很多更好的作品,本章并未写的更深,适合初学者研究修改🤭

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【精选】对随机粒子玩法的简单探索(C语言简单版本)
    • 程序展示
      • 一、项目环境
        • 简单介绍一下easyx图形库
          • Easyx图形库
            • 二、运行效果展示
              • 三、项目介绍
                • 四、项目源代码分享
                  • 总结与思考
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档