⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex16.c

📁 NEO SDK是一个跨平台的免费开源图形软件开发包。它支持基本绘图、多种格式图形显示、鼠标操 作、扩展内存和扩充内存的操作、时钟、音频播放、多种字体的汉字及英文显示等等特性;更激动人心的是
💻 C
字号:
/* 
   Example program for the NEO SDK, by Dong Kai.
   http://neosdk.91i.net
   ckerhome@yahoo.com.cn
   
   这个程序演示了通过NEO的基本绘图函数实现的粒子系统——瀑布
   效果。
*/

#include <stdlib.h>
#include "neo.h"

#define particle_num 950

typedef struct particle_sys /*粒子系统*/
{
   float cx;    /*X座标*/
   float cy;    /*Y座标*/
   float vx;    /*X轴速度*/
   float vy;    /*Y轴速度*/
   float vyacc; /*加速度*/
   float life;  /*生命期*/
   float decay; /*衰减量*/
}PARTICLE, *LPPARTICLE;

PARTICLE g_drop[particle_num];

void  init_drop(int x, int y);
void  move_drop(void);

void init_drop(int x, int y)
{
   int i;
   
   for (i = 0; i < particle_num; i++)
   {
      if (g_drop[i].life <= 0)
      {
          g_drop[i].cx = (float)x;
          g_drop[i].cy = (float)y;
          g_drop[i].vx = (float)(0.0007 * (random(500) + 500));
          g_drop[i].vy = (float)(0.1 * random(10));
          g_drop[i].vyacc = 0.05f;
          g_drop[i].life  = 1.0f;
          g_drop[i].decay = (float)(0.0005 * (random(250)));
      }
   }
}

void move_drop(void)
{
   int i;
      
   for (i = 0; i < particle_num; i++)
   {
      if (g_drop[i].life > 0)
      {
         g_drop[i].cx += g_drop[i].vx;
         g_drop[i].cy += g_drop[i].vy;
         g_drop[i].vy += g_drop[i].vyacc;
         g_drop[i].life -= g_drop[i].decay;
         if (g_drop[i].cx >= 310)
            g_drop[i].vx *= (-1);
         if ((g_drop[i].cy <= 10) || (g_drop[i].cy >= 190))
         {
            g_drop[i].vy *= (-1);
            g_drop[i].decay += 0.1f;
            g_drop[i].vy += 0.1f;
         }
      }
   }
}

void main()
{
   int i,x,y,color;
   
   neo_init();
   install_keyboard();
   set_vbe_mode(0x13);
   for (i=0; i<=128; i++)
   {
      set_color(i, 0, i>>3, i>>1);
   }
   
   while (!keypressed())
   {
      init_drop (130, 25);
      move_drop();

      for (i = 0; i < particle_num; i++)
      {
         dot(g_drop[i].cx, g_drop[i].cy, 127);
      }
      
      for (y = 25; y < 200; y++)
      {
         for (x = 130; x < 215; x++)
         {           
            color = (get_dot(x, y-1) +
                     get_dot(x+1, y) +
                     get_dot(x, y+1) +
                     get_dot(x-1, y)) >> 2;
            if (color > 2)
               dot(x, y, color - 2);
            else
               dot(x, y, 0);
         }
      }
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -