#include<stdio.h> #include<dos.h> #include<graphics.h> #include<fcntl.h> #include<time.h> #define N1 64 #define N2 32 #define N4 16 #define N8 8 #define N16 4 #define END 0 void interrupt(* handler)( ); void interrupt music( ); int handle,control; enum NOTES { C10=131,D10=147,E10=165,F10=175,G10=196,A10=220,B10=247, C0=262, D0=296, E0=330, F0=349, G0=392, A0=440, B0=494, C1=523, D1=587, E1=659, F1=698, G1=784, A1=880, B1=988, C2=1047, D2=1175, E2=1319, F2=1397, G2=1568, A2=1760, B2=1796 }song[]={ E1,N4,E1,N8,E1,N8,F1,N4,G1,N4,F1,N4,F1,N4,E1,N4,D1, N4,C1,N4,C1,N4,D1,N4,E1,N4,E1,N4,D1,N4,D1,N4,E1,N4, E1,N8,E1,N8,F1,N4,G1,N4,G1,N4,F1,N4,E1,N4,D1,N4,C1, N4,C1,N4,D1,N4,E1,N4,D1,N4,D1,N4,C1,N4,D1,N4,D1,N8, D1,N8,E1,N4,C1,N4,D1,N4,E1,N8,F1,N8,E1,N4,C1,N4,D1, N4,E1,N8,F1,N8,E1,N4,C1,N4,C1,N4,D1,N4,G0,N4,E1,N4, E1,N4,E1,N8,F1,N4,G1,N4,G1,N4,F1,N4,E1,N4,D1,N4,C1, N4,C1,N4,D1,N4,E1,N4,E1,N4,D1,N4,C1,N4,D1,N4, END,END }; main() { int gdriver=VGA,gmode=1,i; initgraph (&gdriver,&gmode," "); handler=getvect(0x1c); setvect(0x1c,music); cleardevice( ); setbkcolor(BLUE); setcolor(YELLOW); setfillstyle(SOLID_FILL,RED); sector(200,150,50,120,70,50); bar3d(400,150,500,200,10,5); setactivepage(1); sector(200,150,50,170,70,50); bar3d(400,200,500,250,10,5); for(i=0;i<100;i++) { while(kbhit()) goto end; setvisualpage(1); delay((100-i)*10); setvisualpage(0); delay((100-i)*10); } end:; outportb(0x61,control&0xfe); setvect(0x1c,handler); cleardevice(); closegraph(); } void interrupt music( ) { static int flag=0,note=0,fre,dur=8; flag++; fre=song[note]; dur=song[note+1]; if(/*flag>(int)dur*2/5*/fre) { flag=0; outportb(0x43,0xb6); fre=(unsigned)(1193180L/fre); outportb(0x42,(char)fre); outportb(0x42,(char)(fre>>8)); control=inportb(0x61); outportb(0x61,(control)|0x3); note=note+2; if(note>=134)note=0; } handler(); } |
发布评论