C语言课程设计.ppt
《C语言课程设计.ppt》由会员分享,可在线阅读,更多相关《C语言课程设计.ppt(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、图形操作简介 必要的头文件 必须的系统变量 初始化图形界面 初始化出错处理 取得必须的信息 关闭图形界面 一些常用的画图函数必要的头文件 #include #include #include #include #include 初始化图形界面 GraphDriver = DETECT; initgraph(&GraphDriver,&GraphMode, ); initgraph(&GraphDriver,&GraphMode,”c:turboc2 );初始化出错处理 ErrorCode = graphresult(); if( ErrorCode != grOk ) printf( Grap
2、hics System Error: %sn, grapherrormsg( ErrorCode ) ); exit( 1 ); 取得必须的参数 getpalette( &palette ); MaxColors = getmaxcolor( ) + 1; MaxX = getmaxx( ); MaxY = getmaxy( );AspectRatio=(double)xasp/(double)yasp;关闭图形界面 closegraph(); /* Return the system to text mode */一些常用的画图函数 outtext( buffer ),outtextxy(x
3、,y,buffer) line(x0,y0,x1,y1);linerel( );lineto( ) circle(int x, int y, int radius); arc( ) bar(int l, int t, int r, int b); bar3d( ); moveto(int x, int y);moverel(dx,dy);getx( ) putpixel(x,y,color); getpixel(x,y) setcolor();setbkcolor();getcolor();getbkcolorDOS下如何发声在dos.h下,有如下三个函数可以处理声音: sound (long
4、 freq):发出特定频率的声音 nosound( ):停止发声 delay( ):延时特定时间 人能听到的声音频率 大致在20 Hz至 20000 Hz 之间学习资料与方法 C程序编程资料汇总 图书文献资料查询 上网查询 借鉴它山之石课题要求 二人一组,自由组合。每组选一个题目,确定组长。学委负责登记并提交。 设计结束前进行程序的运行演示和讲解,提交有详尽的注释的源程序和可执行程序。 提交开发文档,说明程序的主要模块及功能、主要数据结构及意义、程序采用的核心算法及实现方式、小组成员的分工及完成情况。 提交课程设计报告,参考模版。1、文字编辑器:设计界面,实现中、英文字输入,能实现新建、保存、
5、中英文字切换等功能菜单。2、键盘电子琴:能通过键盘弹奏乐曲,通过PC喇叭播放音乐。能够播放简单的WAV文件,支持键盘和鼠标操作 。主要应用dos.h下的处理声音的函数sound(long freg)发出特定频率的声音;nosound()停止发音;delay()延时特定时间发音等函数来实现。参考题目3、简易图形编辑器:实现Windows下的画笔工具的部分功能,能够读写编辑位图(BMP)文件 。实现类似Photoshop滤镜的部分功能,如锐化、模糊、凸出、扭曲、马赛克等,能够读写编辑位图(BMP)文件。 4、黑白翻转棋:二人对弈,系统判断输赢和禁手,具有计时和记分功能,保留纪录,支持鼠标和键盘操作
6、,能悔棋 。通过画图函数设定棋盘,设定二人对弈的有效范围,通过鼠标或键盘进行对弈,根据一定的规则,判断输赢。5、五子棋:二人对弈,系统判断输赢和禁手,具有计时和记分功能,保留纪录,支持鼠标和键盘操作,能悔棋 。通过画图函数设定棋盘,设定二人对弈的有效范围,通过鼠标或键盘进行对弈,根据一定的规则,判断输赢。6、跳棋:二人对弈,具有计时和记分功能,保留纪录,支持鼠标和键盘操作,能悔棋 。7、中国象棋:二人对弈,具有计时和记分功能,系统判断输赢和禁手,支持鼠标和键盘操作,能悔棋一步 。8、俄罗斯方块:可选择难度,可记分,保留最高分纪录,支持键盘和鼠标操作 。9、挖雷游戏:实现Windows下的挖雷游
7、戏功能 。10、走迷宫:绘制和选择迷宫地图,系统能够自动寻找出口,支持鼠标和键盘操作 。通过画图函数设定迷宫,运用数据结构的相关知识,利用一定的算法,实现单步找寻迷宫出口的操作。11、汉诺塔的动态演示:自动移动盘子,要求能输入塔盘的数量,支持鼠标和键盘操作。运用数据结构的相关知识,利用一定的算法,实现单步的动态演示。12、华容道游戏:系统能够自动提示。要求用鼠标拖动并记录时间,支持鼠标和键盘操作。注意事项 规范化编程 模块化编程 制定详细的日程安排,并严格遵守 合理分工,团队协作 认真完成开发文档以及课程设计报告鼠标简介 鼠标系统实际上由两个主要元素组成:鼠标机制和称作鼠标驱动程序的内存驻留程
8、序。鼠标驱动程序提供与鼠标通信所需的全部低级支持。此外,它自动维持鼠标光标位置和发现是否按下了某个键。一旦装入驱动程序,鼠标就可以被随后执行的任意程序使用。鼠标简介续 可以通过PC中断33H访问鼠标和鼠标驱动程序的各种功能。所选择的特定函数依赖于中断时AX寄存器的值。三个其它寄存器(BX、CX和DX)用于把各种参数传送给鼠标例程。同样,鼠标函数使用这四个寄存器把鼠标的位置和按钮的状态返回给调用函数。鼠标驱动程序主要功能功能功能输入值输入值输出值输出值功能调用功能调用初始化无AX BXAX=0000显示光标 无无AX=0001隐藏光标 无无AX=0002读取状态 无BXCXDX AX=0003设
9、置位置 CX、DX无AX=0004设置光标 BXCXDX 无AX=0009鼠标驱动程序主要功能功能功能输入值输入值输出值输出值功能调用功能调用X 范围CX DX无AX=0007Y 范围CX DX无AX=0008光标范围 CX DX SIDI无AX=0010中断程序 CX ES :DX无AX=000C鼠标功能调用方法 用TC通过INT33H中断来编制基本函数,有三种常用方法: 嵌入汇编程序,如:ASM CLI清中断 利用全程变量赋予寄存器值,然后通过函数geninterrupt( )调用中断实现 利用联合类型REGS,SREGS通过函数int86(),int86x()调用中断,原型在dos.h鼠
10、标的初始化InitMouse() union REGS regs; regs.x.ax=0; int86(0 x33,®s,®s); if(regs.x.ax=0) return false;else return true;鼠标光标的隐藏HideCur() union REGS regs; if(visual) regs.x.ax=2; int86(0 x33,®s,®s); visual=false;鼠标光标的显示ShowCur() union REGS regs; if(!visual) regs.x.ax=1; int86(0 x33,®s,®s);
11、 visual=true;鼠标光标的显示与隐藏 在鼠标驱动程序中,鼠标的显示状态用0值表示,隐藏用负值表示,每调用一次显示功能则该值加一,每调用一次隐藏功能,则该值减一。这样,在多次调用了驱动程序的隐藏鼠标光标功能后,再调用显示鼠标光标功能时,将不能正常显示鼠标光标。需要加入一个visual布尔型变量,来取代驱动程序中的数值。读取鼠标的状态Status( ) union REGS regs; regs.x.ax=3; int86(0 x33,®s,®s);x=regs.x.cx; y=regs.x.dx;status=regs.x.bx;读取鼠标的状态 其中X,Y为光标位置 sta
12、tus&1左键状态,1为按下,0为未按 status&2右键状态,1为按下,0为未按 status&4中键状态,1为按下,0为未按 要注意循环检测时的抖动现象,可增加一些空循环或延时来清除剩余的按键信号。设置光标位置void MoveMouse(int x,int y) REGS regs; regs.x.ax=4; regs.x.cx=x; regs.x.dx=y; int86(0 x33,®s,®s);设置鼠标光标形状设置鼠标光标需要三个方面信息: 鼠标的外边界:8*8点阵,16个整数 鼠标的内部形状:8*8点阵,16个整数 以及鼠标的热点的相对坐标:int x,y 其中外边界
13、和内边界连续存放,为长度为32的整型数组 int marks32设置鼠标光标形状SetCurs(unsigned masks32,x,y) union REGS regs; struct SREGS sregs;regs.x.ax=9; regs.x.bx=x; regs.x.cx=y;/* hot spot*/ regs.x.dx=(unsigned)masks; s e g r e a d ( & s r e g s ) ; int86(0 x33,®s,®s);手的光标数据 0 xffff, 0 xffff, 0 xffff, 0 xffff, 0 xffff, 0 xfff
14、f, 0 xffff, 0 xffff, 0 xffff, 0 xffff, 0 xffff, 0 xffff, 0 xffff, 0 xffff, 0 xffff, 0 xffff, /*cursor mask*/ 0 x0c00, 0 x1200, 0 x1200, 0 x1200, 0 x13fe, 0 x1249, 0 x1249, 0 x1249, 0 x7249, 0 x9001, 0 x9001, 0 x9001, 0 x8001, 0 x8001, 0 x4002, 0 x3ffc /*cursor mask*/ 4,0 /*hot spot*/设置鼠标的移动范围SetMous
15、eArea(int x0,int y0,int x1,int y1) union REGS regs;regs.x.ax=7;regs.x.cx=x0;regs.x.dx=x1;int86(0 x33,®s;®s);regs.x.ax=8;regs.x.cx=y0;regs.x.dx=y1;int86(0 x33,®s,®s);汉字库简介 程序中可直接使用UCDOS中的HZK16,ASC16和HZK24三个文件。 HZK16中存储的是16*16点阵汉字是按行存储的以便于显示,每个 汉 字 字 模32BYTE,按照国标码顺序存储,其中也包含了682个纯中文符号字母。汉字库
16、的情况 ASC16存储256个西文ASCII码的8*16点阵格式,按行存储,每个ASCII码16字节。 HZK24X存储24*24点阵打印字模,按列存储,每个汉字字模占576字节。24*24点阵汉字存储两比较大,所以从16区1位“啊”字开始存储,以减少字库大小。其中X为KS表示楷体,宋体等。取得字节某一位的值int getbit(unsigned char byte,int bit) if(bit7)return 0; return (bytebit)&0 x1;函数getbit用于得出一个字节中每个位(bit)是0还是1。显示24点阵的汉字void PutChn24(x,y,char *by
17、,color) int i1,i2,i3; for(i1=0;i124;i1+) /LINES for(i2=0;i23;i2+) /3 bytes per line for(i3=0;i38;i3+)f(getbit(byi1*3+i2,7-i3) putpixel(x+i1,y+(i2*8+i3),color);显示16点阵的汉字void PutChn16(x,y,char* buf,color) int i1,i2,i3; for(i1=0;i116;i1+) for(i2=0;i22;i2+) for(i3=0;i38;i3+)if(getbit(bufi1*2+i2,7-i3) pu
18、tpixel(x+i2*8+i3,y+i1,color);在字库中找字模 qu= c1 - 0 xa1; wei= c2 - 0 xa1; 通过计算个计算出该区位码在汉字库中的偏移量:lenth = 32 long offset=(qu) * 94 + wei) * (long) lenth; 24*24点阵汉字字模的读取类似,只是其偏移量计算稍有不同:lenth=72 long offset=(qu-15)* 94+ wei)* (long) lenth;良好的程序设计风格 全局变量用具有描述意义的名字,局部变量用短名字。函数采用动作性的名字。保持一致性。 缩进形式显示程序结构,使用一致的缩
19、行和加括号风格。使用空行显示模块 充分而合理地使用程序注释 给函数和全局数据加注释。不要注释不好的代码,应该重写。不要与代码矛盾。 友好的程序界面,程序界面的方便性及有效性 不要滥用语言技巧 使用表达式的自然形式。利用括号排除歧义。分解复杂的表达式。当心副作用,像+ 这一类运算符具有副作用。 程序的健壮性:容错 模块化编程 高级编程技术高级编程技术 屏幕文本输出屏幕文本输出 图形程序设计图形程序设计 硬件驱动硬件驱动 键盘鼠标输入方法编程键盘鼠标输入方法编程 其它高级编程技术其它高级编程技术一、屏幕文本输出一、屏幕文本输出 1.1文本方式的控制文本方式的控制 1.2窗口设置和文本输出函数窗口设
20、置和文本输出函数 1.3清屏和光标操作函数清屏和光标操作函数 1.4屏幕文本移动与存取函数屏幕文本移动与存取函数 1.5状态查询函数状态查询函数1.1.1 文本方式控制函数 文本方式就是显示文本的模式,它的显示单位文本方式就是显示文本的模式,它的显示单位是字符而不是图形方式下的象素,在屏幕上显是字符而不是图形方式下的象素,在屏幕上显示字符的位置坐标用行和列表示。示字符的位置坐标用行和列表示。 缺省方式下,每屏为缺省方式下,每屏为80列列25行,行,Turbo C规定规定屏的左上角为屏的左上角为l行行l列,屏的右下角为列,屏的右下角为25行行80列。列。 Turbo C支持的文本显示方式有支持的
21、文本显示方式有5种,它们可以种,它们可以用文本显示方式设置函数来进行设置。用文本显示方式设置函数来进行设置。文本显示方式设置函数:文本显示方式设置函数:void textmode(int newmode)其中newmode的值可分别为: 04025黑白显示 14025彩色显示 28025黑白显示 38025彩色显示 78025单色显示 -1上一次的显示方式1.1.2 文本方式颜色控制函数 文本颜色设置函数文本颜色设置函数void textcolor(int color)控制文本显示的前景色,即字符显示的颜色,控制文本显示的前景色,即字符显示的颜色,其参数其参数color仅能选择仅能选择17种颜
22、色,即值为种颜色,即值为016。 文 本 背 景 颜 色 设 置 函 数文 本 背 景 颜 色 设 置 函 数 v o i d textbackground(int color)设置文本显示的设置文本显示的背景颜色,其参数背景颜色,其参数color仅能选择仅能选择8种颜色,即种颜色,即值为值为07。 文本属性设置函数文本属性设置函数void textattr(int attr)设设置字符显示的颜色,背景色,字符显示是否闪置字符显示的颜色,背景色,字符显示是否闪烁,显示属性参数烁,显示属性参数attr可用一个字节即可用一个字节即8位来描位来描述。述。1.1.3 字符显示亮度控制函数字符显示亮度控
23、制函数 void highvideo(void)用高亮度显示字用高亮度显示字符。符。 void lowvideo(void)用低亮度显示字用低亮度显示字符。符。 void normvideo(void)将设置通常亮将设置通常亮度显示字符。度显示字符。1.2 窗口设置和文本输出函数 在文本方式下,没进行窗口设置时,即在文本方式下,没进行窗口设置时,即窗口设置缺省时,认为整个屏幕为显示窗口设置缺省时,认为整个屏幕为显示窗口,窗口, Turbo C提供了窗口设置函数提供了窗口设置函数window(),可由用户根据自己的需要来重新设定显可由用户根据自己的需要来重新设定显示窗口。当设定后,以后的控制台示
24、窗口。当设定后,以后的控制台I/O操操作作(即文本输入输出即文本输入输出),就可均在此窗口中,就可均在此窗口中进行。进行。1.2.1 窗口设置函数 void window(int x1,int y1,int x2,int y2); 其中其中(x1,y1)为窗口的左上角坐标,为窗口的左上角坐标,(x2,yz)为窗口的右下角坐标,这些坐标是以为窗口的右下角坐标,这些坐标是以整个屏幕为参考坐标系。整个屏幕为参考坐标系。 利用窗口函数可以在屏幕上定义多个不利用窗口函数可以在屏幕上定义多个不同窗口,以显示不同的信息。同窗口,以显示不同的信息。1.2.2 控制台文本输出函数 printf(),putc()
25、,puts(),putchar()和输出函数和输出函数以整个屏幕为窗口的,它们不受由以整个屏幕为窗口的,它们不受由window设设置的窗口限制,也无法用函数控制它们输出的置的窗口限制,也无法用函数控制它们输出的位置。位置。 Turbo C提供了三个文本输出函数,提供了三个文本输出函数, int cprintf(char *format,);int cputs(char *str);int putch(int ch);它们受窗口的控制,;它们受窗口的控制,窗口内显示光标的位置,就是它开始输出的位窗口内显示光标的位置,就是它开始输出的位置。置。1.3.1 清屏函数 void clrscr(void
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计
限制150内