语言程序设计课程大型作业课件

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

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!