《语言程序设计课程大型作业PPT课件》由会员分享,可在线阅读,更多相关《语言程序设计课程大型作业PPT课件(50页珍藏版)》请在金锄头文库上搜索。
1、C语言程序设计课程大型作业,大型作业内容介绍 图形操作简介 鼠标操作简介 西文状态下汉字的显示 DOS下如何发声 良好的程序设计风格,题目简介,五子棋游戏的棋盘功能,要求能悔棋一步,判断玩家输赢。 中国象棋游戏的棋盘功能,能判断走棋是否合法,允许悔棋一步,并能对玩家记时。 俄罗斯方块,要求能选难度,记分规则同掌上机。,所有题目简介,中文窗口下拉式菜单设计,汉化TC2.0界面,只要求实现菜单,不要求TC功能 BMP图象处理,柔化SMOOTH、锐化SHARPEN、浮雕EMBOSS、扩散DIFFUSE和定制过滤器。对640*480*256色图象处理,题目简介,二维图象动画演示,移动、翻转、旋转。,题
2、目简介,三维模型处理,对一个立方体进行旋转、平移、放大缩小。,题目简介,细胞生命演示,考虑到二维大数组的存取,及大数组的动态生成。 数据库的读写,对FOXBASE数据库的DBF和MEM文件进行读写。,题目简介,电脑音乐程序,能根据乐谱用PC喇叭演奏。 DOS版画笔程序,要求用不同粗细的点、线和不同填充模式的方块、圆,以不同颜色画图。,题目简介,汉诺塔的动态演示,自动移动HANIO,要求能输入塔盘的数量。,题目简介,数据加密技术探讨,DES加密算法的实现,要求能够加密解密,密钥位数可以指定。 扑克牌24点游戏,人机对弈,提供难度选择。,题目简介,TIC-TAC-TOE的人机对弈,机器判断输赢。,
3、题目简介,人工智能“重排九宫”,8个数字放在3*3九个格子中,余下一个格子为空。要求可以用鼠标拖动数字,并记录玩家花费的时间。,题目简介,跳棋,将三只黑子放在123方格中,3只白子放在567方格中,空格是4,将白子移到黑子位置,黑子移到白子位置。规则,可以走一步或跳一格,不能后退。,题目简介,中文文本文件阅读器。能处理HOME,END,PGUP,PGDN,ARROW,SPACE BAR,ESCAPE键。显示文件名,文件大小,以及操作提示。,题目简介,模拟PCTOOLS对文件进行编辑同时显示16进制和字符格式信息。,题目简介,自动发牌程序,能够将54张牌随机发给四个人。,课题要求,四个人一组,自
4、由组合。每组选一个题目,确定组长。上机时坐在一起。学期结束前每组提交一份正规的源程序清单,要有详尽的注释,同时注明哪个人负责编写哪部分程序。最后两周验收。,图形操作简介,必要的头文件 必须的系统变量 初始化图形界面 初始化出错处理 取得必须的信息 关闭图形界面 一些常用的画图函数,必要的头文件,#include #include #include #include #include ,必须的变量,int GraphDriver; int GraphMode; double AspectRatio; int MaxX, MaxY; int MaxColors; int ErrorCode; st
5、ruct palettetype palette;,初始化图形界面,GraphDriver = DETECT; initgraph(,初始化出错处理,ErrorCode = graphresult(); if( ErrorCode != grOk ) printf( Graphics System Error: %sn, grapherrormsg( ErrorCode ) ); exit( 1 ); ,取得必须的参数,getpalette( ,关闭图形界面,closegraph(); /* Return the system to text mode */,一些常用的画图函数,outtext
6、( buffer ),outtextxy(x,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();getbkcolor,鼠标操作,鼠标简介 鼠标驱动程序的主要
7、功能 鼠标功能调用方法 鼠标的初始化 鼠标光标的显示与隐藏 读取按钮状态,读取或设置光标位置 设置鼠标的光标形状和移动范围,鼠标简介,鼠标系统实际上由两个主要元素组成:鼠标机制和称作鼠标驱动程序的内存驻留程序。鼠标驱动程序提供与鼠标通信所需的全部低级支持。此外,它自动维持鼠标光标位置和发现是否按下了某个键。一旦装入驱动程序,鼠标就可以被随后执行的任意程序使用。,鼠标简介,可以通过PC中断33H访问鼠标和鼠标驱动程序的各种功能。所选择的特定函数依赖于中断时AX寄存器的值。三个其它寄存器(BX、CX和DX)用于把各种参数传送给鼠标例程。同样,鼠标函数使用这四个寄存器把鼠标的位置和按钮的状态返回给调
8、用函数。,鼠标驱动程序主要功能,鼠标驱动程序主要功能,鼠标功能调用方法,用TC通过INT33H中断来编制基本函数,有三种常用方法: 嵌入汇编程序,如:ASM CLI清中断 利用全程变量赋予寄存器值,然后通过函数geninterrupt( )调用中断实现 利用联合类型REGS,SREGS通过函数int86(),int86x()调用中断,原型在dos.h,鼠标的初始化,InitMouse() union REGS regs; regs.x.ax=0; int86(0 x33,鼠标光标的隐藏,HideCur() union REGS regs; if(visual) regs.x.ax=2; int
9、86(0 x33, ,鼠标光标的显示,ShowCur() union REGS regs; if(!visual) regs.x.ax=1; int86(0 x33, ,鼠标光标的显示与隐藏,在鼠标驱动程序中,鼠标的显示状态用0值表示,隐藏用负值表示,每调用一次显示功能则该值加一,每调用一次隐藏功能,则该值减一。这样,在多次调用了驱动程序的隐藏鼠标光标功能后,再调用显示鼠标光标功能时,将不能正常显示鼠标光标。需要加入一个visual布尔型变量,来取代驱动程序中的数值。,读取鼠标的状态,Status( ) union REGS regs; regs.x.ax=3; int86(0 x33, ,读
10、取鼠标的状态,其中X,Y为光标位置 status regs.x.ax=4; regs.x.cx=x; regs.x.dx=y; int86(0 x33, ,设置鼠标光标形状,设置鼠标光标需要三个方面信息: 鼠标的外边界:8*8点阵,16个整数 鼠标的内部形状:8*8点阵,16个整数 以及鼠标的热点的相对坐标:int x,y 其中外边界和内边界连续存放,为长度为32的整型数组 int marks32,设置鼠标光标形状,SetCurs(unsigned masks32,x,y) union REGS regs; struct SREGS sregs; regs.x.ax=9; regs.x.bx=
11、x; regs.x.cx=y;/* hot spot*/ regs.x.dx=(unsigned)masks; segread( ,手的光标数据,0 xffff, 0 xffff, 0 xffff, 0 xffff, 0 xffff, 0 xffff, 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 x1
12、249, 0 x7249, 0 x9001, 0 x9001, 0 x9001, 0 x8001, 0 x8001, 0 x4002, 0 x3ffc /*cursor mask*/ 4,0 /*hot spot*/,设置鼠标的移动范围,SetMouseArea(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, ,西文状态下汉字的显示,汉字库简介 取得字节的某一位 显示24点阵汉字 显示16点阵汉字 在字库中取字模,汉字库简介,程序中可直接使用UCD
13、OS中的HZK16,ASC16和HZK24三个文件。 HZK16中存储的是16*16点阵汉字是按行存储的以便于显示,每个汉字字模32BYTE,按照国标码顺序存储,其中也包含了682个纯中文符号字母。,汉字库的情况,ASC16存储256个西文ASCII码的8*16点阵格式,按行存储,每个ASCII码16字节。 HZK24X存储24*24点阵打印字模,按列存储,每个汉字字模占576字节。24*24点阵汉字存储两比较大,所以从16区1位“啊”字开始存储,以减少字库大小。其中X为KS表示楷体,宋体等。,取得字节某一位的值,int getbit(unsigned char byte,int bit) i
14、f(bit7) return 0; return (bytebit) 函数getbit用于得出一个字节中每个位(bit)是0还是1。,显示24点阵的汉字,void PutChn24(x,y,char *by,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* bu
15、f,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) putpixel(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;,DOS下如何发声,在dos.h下,有如下三个函数可以处理声音: sound (long freq):发出特定频率的声音 nosound( ):停止发声 delay( ):延时特定时间,良好的程序设计风格,使用有意义的变量名 匈牙利式命名法 文档的模块化组织(缩进、对齐) 自顶向下的设计方法 增加程序的可读性(增加注释) 不要滥用语言技巧,