哈哈,看来我不贴个源码是不行了?
好,就贴一个!
#include<graphics.h> #include<dos.h> #include<stdlib.h> #include<stdio.h> #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,®s,®s); 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<NX;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<NX;i++) px[i]=randto(0,3); } void updtp() { int i,j ; for(i=0;i<NX;i++) { for(j=0;j<p[i][1];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<NX;i++) for(j=0;j<NY*2;j++) { gtext[i][j][0]=j<NY?' ':randto(48,49); gtext[i][j][1]=randto(1,14); } } void updtgtext() { int i,j ; for(i=0;i<NX;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<NY/6;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<NX;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<NY;j++) putword(i,j); } } void inputtext(char t[],int n,int i) { int j ; if(n>NY-2)return ; for(j=0;j<n;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*/
记得看货给钱