图形和声音的C程序.doc_第1页
图形和声音的C程序.doc_第2页
图形和声音的C程序.doc_第3页
图形和声音的C程序.doc_第4页
图形和声音的C程序.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

图形和声音的C程序1整个屏幕分2部分,左侧为菜单显示区,右侧为绘图区。在图形显示区设计一个光标,光标形状为“+”。设计光标的移动方式为键盘操作方式。上下左右分别对应键盘上的相应键,HOME、END、PAGEUP、PAGEDOWN分别代表左上、右上、左下、右下移动。F1、F2分别代表小步长和大步长。a,b分别代表起点和终点。O代表画圆,h画BOX,C清屏,W保存图形,R回调上次保存的图形。#include #include #include #include #include #include #include #include #define COLOR WHITE#define F1 59#define F2 60#define UP 72#define DOWN 80#define LEFT 75#define RIGHT 77#define HOME 71#define END 79#define PAGEUP 73#define PAGEDOWN 81void menu(void);void save(void);void load(void);void xhairs(int a,int b);union kchar c2;/*分割键盘码为扫描码还是ASCII码*/int i;key;struct dot/*定义一个点结构*/int x;int y;dis;void main()int inc=1,k,j,m,r;int driver,mode;struct dot firstdot,secdot;dis.x=200;dis.y=200;/*初始化dis点为光标所在点 */driver=DETECT;mode=VGAHI;initgraph(&driver,&mode,c:bcbgi);setbkcolor(BLUE);/*设置屏幕的显示底色为兰色*/cleardevice();/*清整个屏幕*/setcolor(YELLOW);/*设置图形显示颜色,字符显示颜色*/xhairs(dis.x,dis.y);/*在某点显示光标*/while(key.c0!=q)/*等待键盘输入,不是退出显示菜单*/menu();key.i=bioskey(0);xhairs(dis.x,dis.y);if(!key.c0)/*如果键盘低8位为0,则为功能键*/switch(key.c1)case LEFT:dis.x-=inc;break;case RIGHT:dis.x+=inc;break;case UP:dis.y-=inc;break;case DOWN:dis.y+=inc;break;case HOME:dis.x-=inc;dis.y-=inc;break;case PAGEUP:dis.x+=inc;dis.y-=inc;break;case END:dis.x-=inc;dis.y+=inc;break;case PAGEDOWN:dis.x+=inc;dis.y+=inc;break;case F1:inc=1;break;case F2:inc=5;break;elseswitch(tolower(key.c0)/*如果低8位字节显示ASCII*/case a:putpixel(dis.x,dis.y,COLOR);firstdot.x=dis.x;firstdot.y=dis.y;break;case b:putpixel(dis.x,dis.y,COLOR);secdot.x=dis.x;secdot.y=dis.y;break;case o:r=sqrt(fabs(secdot.x-firstdot.x)*(secdot.x-firstdot.x)+(secdot.y-firstdot.y)*(secdot.y-firstdot.y);circle(firstdot.x,firstdot.y,r);break;case h:rectangle(firstdot.x,firstdot.y,secdot.x,secdot.y);break;case c:cleardevice();break;case w:save();break;case r:load();break;xhairs(dis.x,dis.y);closegraph();/*关闭图形方式*/void xhairs(int a,int b) /*显示+光标*/int i;for(i=a-5;i=a+5;i+)putpixel(i,b,15getpixel(i,b);for(i=b-5;i=b+5;i+)putpixel(a,i,15getpixel(a,i);void menu(void)/*显示菜单*/#define STARTX 10#define STARTY 22#define DISTANCE 30int i;char *menu_name=a:start point.,b:end point.,o:draw circle.,h:draw box.,c:clear screen.,F1:step=1.,F2:step=5,HOME PAGEUP,END PAGEDOWN.,w:save graph.,r:load graph.,q:quit;setcolor(WHITE);rectangle(5,5,150,470);setcolor(LIGHTBLUE);settextstyle(TRIPLEX_FONT,HORIZ_DIR,2);outtextxy(36,STARTY,menu);setcolor(YELLOW);settextstyle(DEFAULT_FONT,HORIZ_DIR,1);for(i=0;i=14;i+)outtextxy(STARTX,STARTY+(i+1)*DISTANCE,menu_namei);void save(void)/*图形保存*/int i,j;FILE *fp;if(fp=fopen(graph.dat,w+)=NULL)printf(cannot open this file!);exit(0);for(i=5;i=470;i+)for(j=155;j=635;j+)fputc(getpixel(j,i),fp);fclose(fp);outtextxy(260,471,save over!);void load(void)/*图形读取*/int i,j;FILE *fp;if(fp=fopen(graph.dat,r+)=NULL)printf(cannot open this file!);exit(0);outtextxy(280,471,loading.);for (i=5;i=471;i+)for(j=155;j=635;j+)putpixel(j,i,fgetc(fp);fclose(fp);outtextxy(368,471,over!);2利用蜂鸣器使程序发声,通过控制蜂鸣器的发音频率产生音符,播放好人一生平安!#include #include #include #include #include #include #define N1 64/*定义音长*/#define N2 32/*半音符音长*/#define N4 16/*4分音符音长*/#define N8 8/*16分音符音长*/#define N16 4/*结束*/#define END 0enum NOTESC10=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=1976;/*定义音符与频率的关系,C10就是C频率为131Hz*/enum NOTES song=D0,N4,E0,N8,D0,N8,C0,N4,A10,N4,G10,N8,E10,N8,G10,N8,A10,N8,C0,N2,A10,N4,A10,N8,C0,N8,G10,N8,A0,N8,E0,N8,G0,N8,D0,N2,E0,N4,D0,N8,E0,N8,G0,N4,E0,N4,G10,N8,E10,N8,G10,N8,A10,N8,C0,N2,A10,N4,A10,N8,C0,N8,A10,N8,A10,N8,D10,N8,E10,N8,G10,N2,D0,N4,G0,N4,A0,N8,G0,N8,F0,N2,G0,N2,A0,N4,G0,N8,E0,N8,D0,N8,E0,N8,C0,N8,A10,N8,D0,N2,E0,N4,G0,N8,E0,N8,G0,N4,E0,N4,G10,N8,E10,N8,G10,N8,A10,N8,C0,N4,A10,N4,A10,N8,C0,N8,D0,N8,A10,N8,C0,N8,E0,N8,D0,N1,END,END;/*乐谱*/void main()int note=0,fre,dur,control;clock_t goal;while(songnote!=0)fre=songnote;/*取乐谱数组中的频率*/dur=songnote+1;/*取乐谱数组的音长*/if(kbhit()break;/*如果有按键退出音乐播放*/if(fre)outportb(0x43,0xb6);/*初始化扬声器端口*/fre=(unsigned)(1193180L/fre);outportb(0x42,(char)fre);/*往扬声器端口送声音频率的值*/outportb(0x42,(char)(fre8);control=inportb(0x61);outportb(0x61,control|0x3);/*开始发音*/goal=(clock_t)dur+clock();/*设定延迟时间*/while(goalclock(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论