c语言编程屏保动画实例,一个非常棒的屏保源代码

哈哈,看来我不贴个源码是不行了?

好,就贴一个!

#include

#include

#include

#include

#define NX 12

#define NY 25

int speed=9 ;

union REGS regs ;

int p[NX][3],px[NX],privatex=-1 ;

char gtext[NX][2*NY][2];

/*读取鼠标状态*/

void readm(int*mx,int*my,int*mbutt)

{

/*,x0=*mx,y0=*my,b0=*mbutt*/

int xnew,ynew,bnew ;

regs.x.ax=3 ;

/* do*/

{

int86(51,&regs,&regs);

xnew=regs.x.cx ;

ynew=regs.x.dx ;

bnew=regs.x.bx ;

}

/* while(xnew==x0&&ynew==y0&&bnew==b0);*/

*mbutt=bnew ;

*mx=xnew ;

*my=ynew ;

}

void initrand()

/*初始化随机数函数*/

{

srand((unsigned)time(0));

}

int randto(int s,int b)

/*产生s-b的随机整数*/

{

if(s>b)

{

s+=b ;

b=s-b ;

s-=b ;

}

if(s==b)b++;

return rand()%(b+1-s)+s ;

}

void setregscolor(int colornum,int read0,int green0,int blue0)

{

union REGS r ;

int num[]=

{

0,1,2,3,4,5,20,7,56,57,58,59,60,61,62,63

}

;

outportb(0x3c8,num[colornum%16]);

outportb(0x3c9,read0);

outportb(0x3c9,green0);

outportb(0x3c9,blue0);

}

void initcolor()

{

int i ;

for(i=1;i<15;i++)

setregscolor(i,0,i*4+3,0);

setregscolor(15,10,63,40);

}

void initp()

{

int i ;

for(i=0;i

{

p[i][0]=randto(0,2*NY-1);

p[i][1]=randto(1,3);

p[i][2]=randto(0,2);

}

}

void initpx()

{

int i ;

for(i=0;i

px[i]=randto(0,3);

}

void updtp()

{

int i,j ;

for(i=0;i

{

for(j=0;j

{

p[i][2]=(p[i][2]+1)%speed ;

if(p[i][2]==0)

p[i][0]=(NY*2+p[i][0]-1)%(NY*2);

}

}

}

void initgtext()

{

int i,j ;

for(i=0;i

for(j=0;j

{

gtext[i][j][0]=j

gtext[i][j][1]=randto(1,14);

}

}

void updtgtext()

{

int i,j ;

for(i=0;i

{

if(i!=privatex)

{

gtext[i][(p[i][0]+NY)%(NY*2)][0]=randto(48,49);

gtext[i][(p[i][0]+NY)%(NY*2)][1]=randto(1,14);

if(randto(1,2*NX)==1)

for(j=0;j

gtext[i][(p[i][0]+NY+j)%(NY*2)][0]=' ' ;

}

}

}

void putword(int i,int j)

{

char s[2];

/*setfillstyle(1,0);

bar(i*640/NX,j*480/NY,i*640/NX+640/NX-1,j*480/NY+480/NY-1);

setcolor(0);

sprintf(s,"%c",gtext[i][(p[i][0]+p[i][1]+j)%(NY*2)][0]);

outtextxy(i*640/NX+210/NX,(j*3+(p[i][2]+2)%3-3)*160/NY,s);*/

setcolor(gtext[i][(p[i][0]+j)%(NY*2)][1]);

sprintf(s,"%c",gtext[i][(p[i][0]+j)%(NY*2)][0]);

outtextxy(i*640/NX+px[i]*120/NX,(j*speed+p[i][2]-speed)*(480/speed)/NY,s);

}

void putgtext()

{

int i,j ;

for(i=0;i

{

bar(i*640/NX+px[i]*120/NX-2,0,i*640/NX+px[i]*120/NX+120/NX+2,480);

for(j=0;j

putword(i,j);

}

}

void inputtext(char t[],int n,int i)

{

int j ;

if(n>NY-2)return ;

for(j=0;j

gtext[i][(NY*2-n+p[i][0]+j)%(NY*2)][0]=t[j],gtext[i][(NY*2-n+p[i][0]+j)%(NY*2)][1]=15 ;

}

void main()

{

int gd=DETECT,gm,i,x=0,y=0,b=0 ;

char t[][15]=

{

{

84,67,32,73,83,32,67,79,79,76

}

,

{

67,79,79,76,32,76,89,78,78

}

,

{

78,66,85,32,76,89,78,78,32,76,69,69

}

,

{

87,69,32,32,67,65,78,32,68,79

}

}

;

int tn[]=

{

10,9,12,10

}

;

initgraph(&gd,&gm,"");

readm(&x,&y,&b);

initrand();

initp();

initpx();

setfillstyle(1,1);

i=0 ;

p[0][1]=2 ;

initcolor();

{

initgtext();

while(!kbhit())

{

int tx=0,ty=0,tb=0 ;

readm(&tx,&ty,&tb);

if(tx!=x||ty!=y||tb!=b)break ;

if(i==420)

{

int tx ;

tx=randto(0,3);

privatex=randto(0,NX-1);

i=0 ;

inputtext(t[tx],tn[tx],privatex);

}

if(i==NY)privatex=-1 ;

i++;

putgtext();

updtp();

updtgtext();

}

}

closegraph();

}

/*end*/

记得看货给钱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值