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



目录

  • 【精选】对随机粒子玩法的简单探索(C语言简单版本)
  • 程序展示
  • 一、项目环境
  • 简单介绍一下easyx图形库
  • Easyx图形库
  • 二、运行效果展示
  • 三、项目介绍
  • 四、项目源代码分享
  • 总结与思考



程序展示

(1)


随机粒子初


(2)


随机粒子


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

一、项目环境

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

#include<easyx.h>


简单介绍一下easyx图形库

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


Easyx图形库

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


二、运行效果展示

运行展示

粒子群随机权重策略sigma 随机粒子方法_粒子群随机权重策略sigma


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

粒子群随机权重策略sigma 随机粒子方法_c语言_02


三、项目介绍

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


四、项目源代码分享

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

#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;
}

总结与思考

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