【精选】对随机粒子玩法的简单探索(C语言简单版本)
@TOC
程序展示
(1)
随机粒子
(2)
注:手机用户视频打不开可以在主页中查看视频
一、项目环境
1.Visual Studio 2022
2.安装easyx图形库,可以调用头文件
include<easyx.h>
简单介绍一下easyx图形库
EasyX库是一个基于C语言的图形界面库,可以用于Windows操作系统下的图形界面应用程序开发。该库提供了一些易于使用的图形绘制函数和简单的事件处理功能,可以帮助开发者快速地创建各种图形应用程序,如游戏、图形编辑器等。
EasyX库提供了丰富的绘图功能,如直线、矩形、圆形、椭圆、多边形等基本形状的绘制,同时还支持图片、文字、音频等多种媒体资源的加载和处理。此外,EasyX库还支持鼠标、键盘等多种事件的处理,可以让用户与应用程序进行交互。
EasyX库的另一个特点是易于学习和使用。它提供了简单的API,使得初学者也可以轻松地入门,并且具有丰富的在线文档和示例程序,帮助开发者快速地学习和理解如何使用这个库。除此之外,EasyX库还可以和Visual Studio等常见的集成开发环境进行配合使用,使得开发工作更加高效。
总之,EasyX库是一款简单易用、功能强大的图形界面库,适用于初学者和有一定编程基础的开发者,可以用于快速开发各种图形应用程序。
Easyx图形库
二、运行效果展示
运行展示
功能:随着鼠标移动粒子会跟随鼠标一起移动
三、项目介绍
一种对随机粒子玩法的探索,随着鼠标的移动粒子会跟随鼠标一起移动,采用七彩颜色的粒子画面十分的治愈,当然也可以改成点击鼠标左键粒子随之靠拢,更多玩法猿子们可以自行探索修改。
四、项目源代码分享
对随机粒子玩法的简单探索
#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;
}
总结与思考
对于随机粒子的探索还有很多更好的作品,本章并未写的更深,适合初学者研究修改🤭