转印烫印膜:以下程序怎么实现的?

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/02 17:38:06
以下程序是我在c语言吧看到的,是一个跟随鼠标移动的c特效,能不能告诉我他大概是怎样实现的?用了一些什么函数?谢谢大家:)
#include <DOS.H>
#include<graphics.h>
#include<stdlib.h>
#include<math.h>
#define maxcircle 80
#define CR 1
main()
{union REGS r;
int dr=DETECT,mode=0;
int mx,my,mc;
int i, color[maxcircle];
double fx,fy,force=0;
double s,x[maxcircle],y[maxcircle];

initgraph(&dr,&mode,"");
r.x.ax=0;
int86(0X33,&r,&r);
r.x.ax=2;
int86(0x33,&r,&r);
for(i=0;i<maxcircle;i++)
{color[i]=random(16)+1;
x[i]=random(640);
y[i]=random(480);
}

while(!kbhit())
{
r.x.ax=3;
int86(0x33,&r,&r);
mx=r.x.cx;
my=r.x.dx;
mc=r.x.bx;
for(i=0;i<maxcircle;i++)
{
fx=mx-x[i];
fy=my-y[i];
s=sqrt(fx*fx+fy*fy+0.0012);
if(s!=0)
{
setcolor(0);
setfillstyle(1,0);

fillellipse(x[i],y[i],CR,CR);
setcolor(color[i]);
setfillstyle(1,color[i]);

force=random(30)/(double)10;

x[i]+=fx/s*force;
y[i]+=fy/s*force;

fillellipse(x[i],y[i],CR,CR);

}

}
if(mc==1)
{
cleardevice();
for(i=0;i<maxcircle;i++)
{x[i]=random(640);
y[i]=random(480);
color[i]=random(16)+1;
fillellipse(x[i],y[i],CR,CR);
}
}

}
}

#include <DOS.H>
#include<graphics.h>
#include<stdlib.h>
#include<math.h>
#define maxcircle 80
#define CR 1
main()
{
union REGS r; /*寄存器联合*/
int dr=DETECT;/*自动检测图形驱动器(是个指定的常数,在一个枚举结构中)*/
int mode=0; /*图形驱动器工作模式为0(是个指定的常数,在一个枚举结构中)*/
int mx,my,mc;
int i, color[maxcircle];
double fx,fy,force=0;
double s,x[maxcircle],y[maxcircle];

initgraph(&dr,&mode,""); /*初始化图形系统,代入上面的常数后,这句语句的意义为自动检测图形驱动器,并将工作模式设定为0*/
r.x.ax=0; /*寄存器AX=0*/
int86(0X33,&r,&r); /*调用中断号为0x33的DOS中断*/
r.x.ax=2;
int86(0x33,&r,&r);
for(i=0;i<maxcircle;i++)
{
color[i]=random(16)+1; /*向color数组填充取值在0到16之间的随机数*/
x[i]=random(640);
y[i]=random(480);
}

while(!kbhit()) //循环等待,直到键盘按下任意键
{
r.x.ax=3;
int86(0x33,&r,&r);
mx=r.x.cx; //将寄存器CX的值赋予变量mx
my=r.x.dx;
mc=r.x.bx;
for(i=0;i<maxcircle;i++)
{
fx=mx-x[i];
fy=my-y[i];
s=sqrt(fx*fx+fy*fy+0.0012); /*求平方根*/
if(s!=0)
{
setcolor(0); /*设置前景颜色为黑色(注:0代表黑色)*/
setfillstyle(1,0); /*设置填充模式(1代表实填充)和填充颜色*/

fillellipse(x[i],y[i],CR,CR); /*以(x[i],y[i])为中心位置,用前景色画实心椭圆(这里正好是圆形,并且半径为宏常数CR)*/
setcolor(color[i]);
setfillstyle(1,color[i]);

force=random(30)/(double)10;

x[i]+=fx/s*force;
y[i]+=fy/s*force;

fillellipse(x[i],y[i],CR,CR);

}

}
if(mc==1)
{
cleardevice(); //清除屏幕上显示的图形
for(i=0;i<maxcircle;i++)
{
x[i]=random(640);
y[i]=random(480);
color[i]=random(16)+1;
fillellipse(x[i],y[i],CR,CR);
}
}
}
}

/***************************************
关于这里提到的INT 33H号功能,我在网上搜索了下,找到了关于它的一些相关信息,希望对你有所帮助

2.2.2 鼠标器的INT 33H 功能调用
当安装好了鼠标器的驱动程序,并进行了初始化后,就可使用鼠标器的驱动程序来管
理鼠标器的各种操作。鼠标器驱动程序将INT 33H 中断作为鼠标器的操作中断,这样每当
移动一下鼠标器,或者按动一下鼠标器的按钮,就将产生一次INT 33H 中断。而鼠标驱动
程序将按照中断时的入口参数,调用不同的功能处理程序,来完成中断服务。
对于Microsoft 鼠标驱动程序,共提供了30 多个功能调用,用户可以通过INT 33H 中
断调用,选用不同的入口参数,来实现相应的功能调用,这些功能号和对应的功能如表3-13:
表3-13 INT 33H 中断调用功能号和对应的功能
功能号 功能简介 功能号 功能简介
0 鼠标复位及取状态 20 交换中断程序
1 显示鼠标光标 21 取驱动程序存储要求
2 鼠标光标不显示 22
保存驱动程序状态
3 取按钮状态和鼠标位置 23 恢复驱动程序状态
4 设置鼠标光标位置 24 设辅助程序掩码和地址
5 取按钮压下状惑 25 取用户程序地址
6 取按钮松开状态 26 设置分辨率
7 设置水平位置最大值 27 取分辨率
8 设置垂直位置最大值 28 设置中断速度
9 设置图形光标 29 设置显示器显示的页号
10 设置文本光标 30 取显示器显示的页号
11 取鼠标器移动的方向和距离 31 关闭驱动程序
12 设中断程序掩码和地址 32 打开驱动程序
13 打开光笔模拟 33 软件重置
14 关闭光笔模拟 34 选择语言
15 设置鼠标移动速度 35 取语言编号
16 条件关闭 36 取版本号及鼠标类型和中断号
19 设置速度加倍的下限 37 取鼠标驱动有关信息
表3-14 列出了一些上述功能号中的基本的功能调用和相应的入口参数,及调用后的出
口参数,这些调用是一般常用的:
表3-14 INT 33H 中断调用常用功能调用和相应的入口参数,及调用后的出口参数
功能码 功能 入口参数 出口参数
0 鼠标复位及取状态
m=0(AX=0)

m1=-1 鼠标安装成功
(AX=-1)
m1=0 鼠标安装失败
(AX=0)
m2= 鼠标按钮数目
(BX= )

1 显示鼠标光标
m1=1(AX=1)


2 不显示鼠标光标
m1=2(AX=2)


3 取按钮状态和鼠标位置
m1=3
(AX=3)
m2=各按钮状态
BX= 见注释

4 设置鼠标光标位置 m1=4
(AX=4)
m3=光标x 坐标
(CX= )
m4=光标y 坐标
(DX= )

5 取按钮压下状态 m1=5
(AX=5)
m2=按钮号
(BX= )
0 为左按钮
1 为右按钮
m1=各按钮状态
(AX= 见注释)
m2=自上次调用以来该按钮
按下的次数
(BX= )
最后一次按下时鼠标的x 坐

(CX= )
最后一次按下时鼠标的y 坐

(DX= )
6 取按钮松开状态 m1=6
(AX=6)
m2=按钮号
(BX= )
m1=各按钮状态
(AX= 见注释)
m2=自上次调用以来该按钮
释放的次数
(BX= )
最后一次释放时鼠标的x 坐

(CX= )
最后一次释放时鼠标的y 坐

(DX= )
7 设置水平位置最大值 m1=7
(AX=7)
m3=x 坐标最小

m4=x 坐标最大


8 设置垂直位置最大值 m1=7
(AX=7)
m3=x 坐标最小

m4=x 坐标最大


11 取鼠标器移动的方向和距离 m1=11
(AX=11)
m3=x 方向移动距离
m4=y 方向移动距离
12 设中断程序掩码和地址 m1=12
m3=调用掩码,
见注释
m4=程序地址


注释1:鼠标各按钮的状态,由下面信息格式提供:
位 等于0 时 等于1 时
0 左按钮未按下 左按钮正在按下
1 右按钮末按下 右按钮正在按下
2 中按钮未按下 中按钮正在按下
注释2:当用功能12 设置用户的鼠标中断服务程序时,其入口参数m3=调用掩码,该掩码表示在哪种条件
发生时,产生中断,即执行用户定义的中断服务程序。其掩码位与中断产生条件如下:(该掩码位置1 时,
便产生中断)
掩码位 中断的条件
0 光标位置移动
1 左按钮按下
2 左按钮松开
3 有按钮按下
4 右按钮松开
在上表中,各入口参数和出口参数中,m1,m2,m3,m4 分别存放在Ax,Bx,Cx,
Dx 各寄存器中。表中用括号标示出了。当用汇编语言调用上表中的功能时,只要将相应入
口参数赋给相应的Ax,Bx,Cx,Dx 寄存器即可,出口参数则从上述的寄存器中得到。

========================================
不贴了,这个排版太乱了!上面这些都引自<<高级编程技术>>,下载地址是:
http://jpck.zju.edu.cn/crs/ccxsj/htm/bcjs.pdf
不知道有没有时效性,下载的话要快哦~
****************************************/