高级言程序设计课程设计指导书13级计算机.doc_第1页
高级言程序设计课程设计指导书13级计算机.doc_第2页
高级言程序设计课程设计指导书13级计算机.doc_第3页
高级言程序设计课程设计指导书13级计算机.doc_第4页
高级言程序设计课程设计指导书13级计算机.doc_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

高级语言程序设计课程设计指导书(13级计算机学院适用)2013年11月 目 录1 课程设计任务书- 1 -1.1 课程设计教学环节的主要目的- 1 -1.2 课程设计总体任务要求- 1 -1.3 课程设计题目- 2 -1.3.1题目1:小狼下一百层- 2 -1.3.2题目2:“四则运算练习”游戏- 3 -1.3.3题目3:Pong游戏- 6 -2 课程设计要求与安排- 8 -2.1 完成课程设计任务的基本过程与时间安排- 8 -2.2 课程设计具体事项说明- 9 -2.2.1 课程设计题目分配方案- 9 -2.2.2 指导教师- 10 -2.2.3 上机时间地点- 10 -2.2.4课程设计的考核与成绩评定- 10 -2.3 课程设计报告要求- 11 -3 相关技术学习(VC)- 13 -3.1 Visual C+ 的文本显示方式- 13 -3.2 Visual C+ 的图形显示方式使用- 16 -3.2.1设置图形模式- 16 -3.2.2定义视口- 17 -3.2.3设置当前位置- 20 -3.2.4设置颜色- 21 -3.2.5在图形模式下显示文字和数值- 21 -3.2.6绘制图形- 22 -3.2.7封闭图形的填充- 22 -3.2.8制作动画- 24 -3.3 图形方式程序实例- 25 -3.4 键盘操作的响应- 26 -3.5 获得系统时间- 28 -3.5.1 time函数及应用- 28 -3.5.2 clock函数及应用- 29 -3.6 鼠标消息的响应- 30 -3.7 产生声音- 32 -附件1 报告格式- 33 -附件2 虚拟键码对照表- 38 - 5 -1 课程设计任务书1.1 课程设计教学环节的主要目的本课程设计的主要目的是通过一个趣味盎然的游戏程序的设计与实现使学生亲身经历一个对初学者而言较为复杂的程序的设计与开发过程。在设计中需要熟练运用“高级语言程序设计”课程中所学知识,理解和运用模块化程序设计的理念,初步体会软件工程的方法,自学用图形方式编写C 语言程序。设计培养学生严谨的工作态度,良好的程序设计习惯和程序文档写作能力。在本课程设计的训练中,首先强化训练了代码编写能力,代码编写量远高于通常课程作业训练。重点体会模块化程序设计方法,好的模块化程序设计方案使得程序开发效率高、可重用性好、易于调试、集成和扩展。在课程设计中,同学的调试能力也会有大幅度提高。设计文档的撰写培养了学生文档写作能力,并应在文档写作中提升对程序设计方法的理解。1.2 课程设计总体任务要求本课程设计要求学生完成的主要任务有:遵循软件开发过程的基本规范,运用模块化程序设计的方法,按照课程设计的题目要求,分析、设计、编写、调试和测试C语言程序及编写实践报告。学生应注意如下问题:(1)从思想上重视课程设计教学环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;(2)遵守软件设计规范,依据课程设计题目要求完成设计基本任务,并在此基础上增加扩展功能,充分发挥每个同学的想象力和创造力;注意完成任务书中题目的【基本功能要求】,同学的课设成绩可以得到约70分,同学要获得更高的成绩需要完成课程设计题目中的扩展功能,同学更可以发挥想象力自行合理地增加其他扩展功能。(3)独立完成分配给每人的一个课程设计题目,设计题目内容详见1.3节。设计任务包括程序开发和编写课程设计报告两部分。课程设计报告的书写规范和要求参看2.3节。具体格式参见附件1。(4)遵守课程设计的各项要求,仔细阅读第2部分课程设计要求与安排。按要求时间、地点参加课程设计。特别注意2.2.4课程设计的考核与成绩评定部分,认真完成每个步骤是取得好成绩的保证。(5)完成课程设计需要采用图形显示方式,要用到在高级语言程序设计课程中没有讲授过的知识,同学应先自学图形方式相关内容。图形方式学习内容可参见。3相关技术学习中的例子大部分取自网站,可以作为学习材料。1.3 课程设计题目1.3.1题目1:小狼下一百层【问题描述】用C语言编写一个简单的“小狼下一百层”游戏。游戏中小狼要不停在上升的砖间移动,防止撞到屏幕顶端,他要尽可能的下到更低层,下到的层数越多,得到的分数就越高。【基本功能要求】游戏主画面如图1-1所示:小狼结束暂停开始在此显示游戏相关的信息。如得分情况等。图1-1 “小狼下百层”游戏主画面一、主界面1. 主界面分为三个区域:游戏区、按钮区和信息显示区。2. 游戏区的游戏画面同学可参照网上下一百层游戏的画面。3. 按钮区有游戏的主要菜单,“开始”、“暂停”、“结束”等需要的按钮。扩展后的功能按钮也放在本区。4. 信息显示区至少需要显示用户名、最高得分、当前得分、下到层数等信息。二、游戏规则(要求)5. 游戏采用键盘控制.6. 当游戏打开时,需要添加新用户或者可以读取已经保存的用户。7. 鼠标左键单击开始按钮或者按回车键可以开始游戏;游戏进行中,可以鼠标单击暂停按钮或者按空格键暂停;暂停中暂停按钮变为继续按钮,单击继续按钮或者再次按空格键游戏继续;游戏处于任何阶段都可以单击结束按钮或者按ESC键结束游戏8. 游戏开始后,小狼随机出现在某个砖块上,从底部向上匀速运动,周围慢慢也有其它砖块以同样的速度匀速上升,玩家可以利用键盘控制小狼随砖块左右移动。小狼移动到离开砖块后,键盘的左右控制依然有效,同时小狼有一个向下的分速度,向下分速度应为匀速,同时要比砖块向上运动速度要快。9. 小狼撞到画面顶端或者掉下时没有踩到砖块则游戏结束10. 砖块出现密度应保证只要操作得当且足够敏捷,小狼就不会死11. 小狼下降多少为一层,由同学自己决定,由i层下降到i+1层,加10*(i+1)分12. 在保证上述条件下,狼左右、上下移动速度,砖块上升速度以及砖块出现频率由同学自行决定,出现位置随机产生。13. 每个用户及最高得分的信息、用户排行榜等应能以文件的形式存储到本地。【扩展功能要求】1. 增加可以美化界面元素,使游戏更具趣味性。2. 游戏可以采用鼠标控制。3. 游戏可以通过调整各种参数设置分级。4. 游戏可以增添小狼具有上下或者水平跳跃功能。5. 游戏可以增加不同类型砖块,例如带刺砖块,带弹簧的砖块等等6. 游戏可以给小狼赋予血属性,例如满血为5格,撞到顶扣两格血,踩到带刺砖块扣一血等等,待没有血了,游戏结束7. 可以保存游戏状态到文件,下次登录时读入状态继续游戏。8. 何自己设计添加可行的附加功能1.3.2题目2:“四则运算练习”游戏【问题描述】通过设计编写一个数百行的应用程序,学习VC6.0环境下图形程序的基本方法,掌握结构化程序设计的一般方法,了解程序设计、模块划分的基本思路,能够使用简单算法完成程序,掌握程序调试的一般技巧,消化和巩固在“高级语言程序设计”课程中所学的知识。用 C 语言编写一个简单的一位整数的“四则运算练习”游戏程序,供小学生练习数学使用,实现所要求的基本功能。在完成基本功能后,可以选择是否实现扩展功能。【基本功能要求】(必须完成)从屏幕左面向右面在一定高度范围内有飞艇按一定速度飞过,每隔一定时间出现一条飞艇,飞艇上有一道四则运算题。玩家用鼠标选定某个飞艇,然后在屏幕下方出现4个数字,从中选择题目的答案。如果玩家选中正确答案,则被选中的飞艇爆炸,玩家加1分;如果玩家选中错误答案,玩家减1分。未选的飞艇飞到右端消失,也减1分。玩家可不断选择,直到按下了“结束”按钮。动态显示玩家得分。一、界面界面分为四个区域:游戏区、控制、信息显示区、答案显示区。游戏界面如图所示。鼓励把界面做的更美观。5-284333254结束存积分榜显示积分得分:12用户:abc开始退出9+2图1-2 “四则运算练习”游戏主画面游戏区中有多个飞艇连续从左向右飞,没有爆炸的,到游戏区右端自动消失。控制区有“开始”、“结束”、“退出”、“存盘”、“导入”等按钮,扩展功能所需的按钮和同学自己添加功能的按钮也显示在此区域。信息显示区显示游戏的状态信息,例如用户名、游戏所得分数等。答案显示区显示被选中飞艇上题目的4个答案,其中只有一个是正确的。二、具体要求1、用户名程序运行时先输入用户名,再显示游戏界面,并把用户名显示在信息显示区中。2、控制区按钮单击“开始”按钮,游戏开始,此后,“开始”按钮无效。飞艇开始按指定间隔出现,并匀速飞行。单击“结束”按钮,本盘游戏结束,但不结束程序,且“开始”按钮可用。若再按“开始”按钮,则下一盘游戏从头开始。单击“退出”按钮,结束整个程序。单击“存积分榜”按钮,执行“存积分榜”功能(见6、)。单击“显示积分”按钮,执行“显示积分”功能(见7、)。其他添加功能的按钮。3、飞艇的出现和移动每次从屏幕左端出现一个飞艇,按指定时间间隔(例如2秒)连续出现,飞艇的高度在一定范围内随机产生。飞艇上有一道一位整数四则运算题(不能出现负数结果,除法结果必须为整数)。飞艇按匀速飞行(例如每0.3秒向右移动一定距离),如未爆炸,到右端自动消失。4、玩家操作及计分玩家用鼠标选定某个飞艇,该飞艇底色变红(在屏幕上只能有一条飞艇被选中),同时在答案显示区出现4个数字,供玩家选择,其中一个是被选中飞艇上题目的正确答案(另外3个答案必须是1位或2位正整数,随机产生)。如果玩家选择正确,则被选中的飞艇爆炸,玩家加1分;如果玩家选择错误,则被选中的飞艇恢复原来的颜色,玩家减1分,答案显示区中的4个答案消失。玩家可再选择任意一个飞艇。如飞艇飞到右端消失,也减1分。5、显示得分游戏开始后,在信息显示区动态显示本盘游戏玩家的得分。按“结束”按钮后,得分清零。导入文件中的游戏后,得分恢复到文件中存储的得分。6、存积分榜单击“存积分榜”按钮,先要求输入文件名,确定后,将当前当前用户的用户名和积分存入文件。7、显示积分单击“显示积分”按钮,先要求输入文件名,确定后,弹出窗口,显示积分榜。【扩展功能】(在完成基本功能之后可自选是否实现1项或数项扩展功能,视扩展功能质量,在基本功能得分基础上加分)1、游戏分级在游戏开始前,可在控制区通过鼠标选择游戏级别。不同级别飞艇的出现频率不同,飞艇的飞行速度也不同。2、限定游戏时间在游戏开始前,可在控制区通过鼠标选择游戏限定时间,例如100秒、200秒等,同时,在信息显示区动态显示剩余时间。限定时间到,则本盘游戏自动结束。3、将游戏的当前状态存盘和导入存盘:按指定文件名,将当前游戏的状态(各飞艇状态)、用户名、得分存入文件。游戏继续。导入:删除当前游戏(删除前应提问是否存盘),将文件中存储的游戏状态恢复到屏幕上,继续导入的游戏。4、自己添加的使游戏更加有趣的功能,或使界面更加美观的功能(例如,鼠标单击控制区中的按钮时,按钮有被按下去的效果,松开时,有弹回来的效果)。1.3.3题目3:Pong游戏【问题描述】用 C 语言编写一个简单的“Pong”游戏。球在界面上移动,左右各有一个板,板可以上下移动接球,当没有接住球时(左边的板一个人控制,右边的板另一个人控制),对方得一分。动态显示得分情况。【基本功能要求】游戏主画面如图1-3所示:姓名得分得分姓名结束回放停止记录开始记录轨迹在此显示游戏相关的信息。图1-3 “Pong”游戏主画面一、主界面l 主界面分为三个区域:游戏区、按钮区和信息显示区。l 游戏区上面显示玩家的姓名和得分情况l 按钮区应包括游戏主要菜单。l 信息显示区显示文件中玩家的姓名和得分信息。二、游戏规则l 按空格键开始游戏。l 开始时球在中间,初始球移动的速度和方向由同学自行设置。l 球的实际运动轨迹是水平与垂直两个方向的叠加。l 左侧的板按Q 向上移, 按A向下移l 右侧的板按P 向上移, 按L向下移l 当球碰到了板或者上下边界,球反弹。碰到了左右边界,对方得分。l 点击按钮记录轨迹后,该按钮变为不可用,此时开始记录球的运动轨迹。l 点击按钮停止记录后,就不再记录轨迹,此时记录轨迹按钮变为可用。l 点击按钮回放,则显示所记录的球的轨迹。l 点击按钮结束,则把用户的姓名及得分信息,以文件的形式存储到本地。【扩展功能要求】1. 增加和美化界面元素,使游戏更具趣味性。如增加背景,颜色等。2. 球的速度可以随着时间增加加快。3. 游戏可以通过调整各种参数分级。4. 考虑板的厚度。5. 任何可行的附加功能。2 课程设计要求与安排2.1 完成课程设计任务的基本过程与时间安排程序设计应采用自顶向下的模块化程序设计方法。按照软件开发规范,本课程设计任务的基本过程应该经过分析、设计、编码、调试、测试和整合优化程序等阶段。程序设计与开发中应兼顾程序的可扩展性和健壮性。完成程序之后,最终还要提交课程设计报告。表2-1给出了各阶段的主要任务和相应的时间分配,供大家参考。表2-1 课程设计主要任务与时间分配周次内容安排放假之前1、 认真阅读高级语言程序设计课程设计指导书的各个部分,特别是明确题目任务要求,思考完成课程设计的方法和实施计划,学习准备完成课程设计的各项知识技能。2、 鼓励假期提前开始设计。11、 学会C语言图形方式编程。参考:网站。该网站有关于该图形库的丰富的内容介绍,包括:函数库下载与安装方法、范例程序、技术文章、在线帮助(库函数介绍)和讨论社区等。2、 思考被分配的课设题目的图形界面方案、游戏规则和操作流程。3、 对题目进行详尽地了解和分析,明确最终系统应具有的功能,并初步写出课程设计报告的需求分析部分。21、 思考自己题目的模块化程序设计方案,体会模块化程序设计的优点。2、 完成程序框架的设计,给出功能模块的划分,定义主要的数据结构。3、 写出课程设计报告的概要设计部分中的主要内容。4、 完善更新已写出的课程设计报告部分内容。31、完成主界面部分的代码并调试成功。2、完成主要模块的代码编写、调试和测试。41、完成每个模块的详细设计。2、开始编写课程设计报告的详细设计部分。3、完善更新已写出的课程设计报告部分内容。51、完成全部模块的代码编写、调试和测试。2、集成程序,进行整体调试。61、 设计测试用例,并进行测试,记录测试结果。2、 完善修改程序设计。3、 完善修改已写出的课程设计报告部分内容。71、进行期中检查。期中检查要求同学已经完成题目的第一个版本,包括程序代码和报告。期中检查成绩记录在案,影响期末成绩。期中检查注意事项:携带程序源代码和课程设计报告。同学要提前准备好程序及运行环境。携带身份证件。81、对期中检查情况进行总结,分析典型经验与错误,修正和优化设计。91、修正和优化课程设计报告。101、进行期末检查,同时进行面试。注意事项:按时间安排准时在机房接受期末检查,如有不按时到达的同学,以旷考处理,一律不给予补考。携带学生证等有效证件。携带程序源代码和课程设计报告。同学按要求的时间提前准备好程序及运行环境。期末检查前需要在“教育在线”提交课程设计相关文件,提交内容有两部分:一部分是设计报告、程序全部源代码(以附录形式放在报告中),另一部分是可执行文件(可执行文件需要用Release版。通常缺省状态编译生成的可执行文件为Debug版本。Release制作方法:如果是在VC6环境下生成方式如下:选择Build菜单下Set Active Configuration菜单,打开一个对话框,选中其中的Win32 Release,关闭对话框。重新编译连接程序,在当前工程目录下会自动生成一个release目录,目录下的exe文件既是release办的可执行文件。没有提交的同学不得参加考试。2.2 课程设计具体事项说明2.2.1 课程设计题目分配方案每位学生分配的课程设计题目编号 = 学号的后两位%3+1要求:不允许擅自更换课程设计题目。2.2.2 指导教师指导教师:陈彩老师:地点:信息楼南305B房间,电话:67392986诸海生老师:地点:信息楼南412房间,电话:67391745周珺老师:地点:信息楼南412房间,电话:67391745三位老师分别负责1、2、3题,与班级无关。2.2.3 上机时间地点按课表执行。期中、期末检查同学按学号顺序执行。三位老师分别负责检查1、2、3题。2.2.4课程设计的考核与成绩评定【考核内容】课程设计考核主要包含两部分内容:游戏程序设计与实现和课程设计报告。下面分别详细描述。(1)程序设计与实现指导教师将在机房现场检查应用程序的运行情况,并同时进行面试,主要考查下列内容:l 是否符合题目要求,完全实现了基本功能要求;l 完成了哪些扩展功能要求;l 是否存在语法错误、逻辑错误及运行错误;l 程序设计是否合理,是否符合模块化程序设计所倡导的基本理念;l 程序是否具有良好的可读性和可靠性;l 用户界面是否友好。(2)课程设计报告检查程序的现场提交课程设计报告,主要考查下列内容:l 设计过程是否符合模块化程序设计方法的基本原则; l 课程设计报告的内容是否完整,应包括附件1中要求的全部内容;l 层次是否清楚,语言是否通顺;l 格式是否整洁漂亮,如类似附件1中的格式;【成绩评定方法】采用百分制。100(课程设计总评成绩)=50(程序运行情况)+30(课程设计报告)+20(平时成绩)成绩评定的原则:(1)有下列情况之一视为课程设计总评成绩不及格l 没有按照题目要求完成基本内容的;l 没有按照要求编写课程设计报告的;l 通过教师考查表明课程设计不是自己独立完成的;l 期中检查不来,或期末检查不来、不交课程设计报告的;l 期末检查时将随机提问,多数问题回答错误的;l 期末检查时可能要求现场修改或编写一段小程序,在指定时间内不能独立完成的;l 程序存在错误,不能运行,且不能在指定时间内独立修改正确的;l 两位同学之间课程设计报告和程序非常雷同,有抄袭嫌疑者,两同学均不及格。(2)有下列情况者将视完成情况给予加分l 程序设计符合模块化程序设计规范;l 模块设计合理;l 程序健壮性好;l 用户界面友好;l 出色地自行设计和完成了扩展功能。【温馨提示】为了完成课程设计的各项任务,并获得良好的成绩,在课程设计过程中应该注意以下几个问题:1、严格按照软件开发规范完成各个阶段的任务,合理分配时间,认真阅读本指导书,并按指导的基本过程完成课设会很有帮助。2、遵守模块化程序设计的基本原则。3、注重基本功能的实现。以前有同学扩展功能完成很好,但没有完成部分基本功能,最终影响了成绩。4、务必随时保存编程结果,特别是阶段性的编程结果,一旦代码丢失或意外损坏对成绩会有很大的影响。5、注意版权的自我保护,一旦发现抄袭拷贝别人的课设作业,抄袭人和被抄袭人按学校规定同等处理。6、认真写好课程设计报告。7、有问题及时与老师联系、沟通。2.3 课程设计报告要求书写文档是软件开发的一个重要组成部分,文档的完备性是评价一个软件质量优劣的重要因素之一。为了强化学生对书写文档重要性的认识,训练学生书写文档的能力,要求每位参与课程设计的学生认真完成编写课程设计报告的任务。课程设计报告应该能够反映学生完成课程设计题目的全部情况,包括对课程设计题目需求的分析、应用程序的设计、程序的测试过程以及程序的运行情况等等。设计报告有多种写法,同学们可自己发挥,但鉴于同学们可能初次编写程序设计报告,本指导书依据软件工程的思想,在附件1中给出了一种课程设计报告的参考内容和格式。同学应认真阅读附件1,并思考课程设计报告乃至软件文档的编写方法。其实,同学最好参考附件1的内容和格式,特别是附件1中列出的各个章节内容是通常程序设计报告都会涉及到的,缺少某些内容会直接影响到你的报告部分的成绩。同时要注意附件1中报告排版格式也是已经设置好的,同学按此字体字号大小排版即可。一个比较简洁的做法是直接使用附件1的报告结构,同学只需根据自己的程序设计详细填写每个部分的内容即可。3 相关技术学习(VC)该部分内容主要取自,供同学参考。3.1 Visual C+ 的文本显示方式C语言程序有字符显示和图形显示两种方式,控制台程序默认的显示方式为文本方式。在文本模式下可以使用各种库函数,用来输入输出文本,以及调整文本的颜色、字体、输出的位置等,这些函数在程序进入图形方式后不能正常使用。TC下提供了很多使用起来很简单的函数以便设置文本方式,而这些函数在VC下并不通用,随着操作系统从DOS变为Windows,编译环境也应该由古老的TC变更为VC等更高级的编译环境,那么TC下那些功能将如何在新的环境中使用呢?可以使用VC下的一些标准函数和Windows提供的功能更加强大的应用程序接口库(Application Programming Interface,简称API)。API函数是编程中非常常用的工具之一,它由Windows本身提供,通过调用API函数,可以直接使用Windows的各种功能,API的应用无处不在,用Windows API可以构建起丰富多彩的程序。在课设中,我们只使用几个少数的API就可以在VC下实现原先TC中的各种功能,对于API函数的细节不做过多解释,如有疑问或兴趣可以参照API函数手册等资料。在VC中使用Windows API非常方便,只需要引用windows.h即可。以下是一个使用API的例子。#include int main()MessageBoxA(0, Hello World!, Test, MB_OK); /*用API做的Hello World!*/return 0;下面列出了在文本模式下几个常用功能的实现。1、 将当前光标位置设置到(x,y)处,输出“Hello World!”。#include stdio.h#include int main()/COORD是一个结构体(struct),包含SHORT X;SHORT Y;两个变量,为一个坐标COORD position;/申明句柄变量hout,句柄是一个四字节长的数字,用以指定窗口等各种对象HANDLE hout;position.X = 20;position.Y = 20;hout = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hout,position);printf(Hello World!n);return 0;上面这句话设定了光标在第20行第20个字,第一个参数为被指定光标位置的对象, GetStdHandle(STD_OUTPUT_HANDLE)函数返回的数据指向一个标准输出对象,也就是当前控制台的输出对象,第二个参数是一个COORD结构体,它表示光标将会被定位在第X行,第Y个字的位置。2、 清空文本窗口:system(“cls”);system函数可以使用DOS中的一些常用命令,用这种方式清屏是最简单的。另外,system(“PAUSE”);可以产生让程序暂停的效果,用户按回车后继续。使用system函数需要引用stdlib.h。如在上面程序中printf(Hello World!n);语句之后,return 0;语句之前加入下面两个语句,可观察暂停后清屏的效果。system(PAUSE);system(cls);3、 设置文本颜色在文本显示模式下,颜色用一个占2字节的变量表示,其低八位格式如下所示: 8 7 6 5 4 3 2 1背景字符颜色当最低位到最高位分别为1时,表示如下含义:常数数值含义FOREGROUND_BLUE1前景蓝FOREGROUND_GREEN2前景绿FOREGROUND_RED4前景红FOREGROUND_INTENSITY8前景高亮BACKGROUND_BLUE16背景蓝BACKGROUND_GREEN32背景绿BACKGROUND_RED64背景红BACKGROUND_INTENSITY128背景高亮上述数值或常数之间可以用按位或运算符“|”连接,产生叠加效果。设置文字前景色和背景色要用到API函数SetConsoleTextAttribute用法为: SetConsoleTextAttribute(控制台输出句柄,颜色参数);例:使以后输出的字变成红色,其背景变为绿色HANDLE hout;hout = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hout,FOREGROUND_RED | BACKGROUND_GREEN);另外一种设置文字前景背景色的方式为:system (“color XX”);XX为颜色代号,第一个X为背景色代号,第二个为前景色(即文字颜色)代号,各个颜色代号如下表。字符颜色的定义如下表所示:颜色数值黑色0蓝色1绿色2青色3红色4紫色5黄色6白色7灰色8淡蓝色9淡绿色A淡浅绿色B淡红色C淡紫色D淡黄色E亮白色(高亮)F这两种设置方法有很明显的区别,第一种可以允许控制台中同时出现不同颜色的文字,而第二种方法会直接让控制台中所有文字变成所设定的颜色。另外,在第一种方法中,文字的背景色只影响该字符所在的一小块矩形的背景色,而用第二种方法会将整个控制台窗口的背景色改变。3.2 Visual C+ 的图形显示方式使用Turbo C(TC)开发环境提供了传统的图形显示方式。但是Turbo C的图形库BGI已经停止更新,并且TC是DOS下的开发环境,其图形模式在Visita和Windows7(x64)下不兼容,所以要使用TC原版的图形方式就需要在Windows环境下进入虚拟的DOS环境,用一些软件(如DoxBox)可以做到。另外一种方法就是在VC下采用EasyX图形库。EasyX图形库移植了BGI库中的主要函数,为了适应VC环境,对它的一些细节有修改,并能够在Visita/Windows7和Visual C+ 6.0/Visual C+ 2008/Visual C+ 2010中使用。安装EasyX图形库方法参看 。使用EasyX库的方式和使用TC中的BGI基本一致:大致需要经历下列基本过程:(1)设置图形模式。(2)定义视口(不是必须的)。(3)设置当前位置、前景色和背景色。(4)绘制图形或文字。下面各节分别介绍一下相关的函数功能及使用方式。这些函数的原型,以及下面要用到的符号常量、全局变量等都在头文件graphics.h中。另外,编程中遇到问题可以查看网站的相关信息。其中有所有函数的用法以及技术文章和范例程序等。3.2.1设置图形模式在未设置图形模式之前,系统默认的屏幕显示方式是文本显示模式,所以要使用图形显示方式,必须先进行设置。在Turbo C环境下,提供了initgraph()函数实现这一功能。其原型为:initgraph(int *gdriver,int *gmode,char *path);其中,gdriver表示图形驱动程序,一般使用常数VGA;gmode指定显示模式,一般使用常数VGAHI。图形驱动程序显示模式行列颜色数VGAVGALO64020016VGAMED64035016VGAHI64048016path指出图形驱动程序(也就是EGAVGA.BGI)的位置,若该文件的位置是“D:TC3BGI” ,path应为指向含有该文件的文件夹的字符串,例如:path= “d:tc3bgi”;(要双写,如果驱动程序在程序运行目录下,则path=” ”即可)。initgraph函数的具体功能是:初始化图形系统,并装入相应的图形驱动程序。该函数把由gdriver所指向的图形驱动程序代码装入内存。如果图形驱动程序未成功地装入内存,图形函数将不能操作,并会提示图形库载入失败的窗口。需要注意的是:图形驱动程序的源文件后缀为 .BGI,必须确保在当前系统下图形驱动程序能够正常地运行。若希望结束图形显示模式,应该调用closegraph()函数退出图形显示模式,返回文本显示状态(注意:文本显示状态的输入输出函数在图形显示模式下都无法正常使用)。在EasyX中,initgraph()函数的第三个参数可以始终置空,或者根本不写第三个参数,且initgraph()函数也可以这么用:initgraph(1024,768); /这样可创建一个比TC下更大的窗口,而且无需考虑驱动问题。例:#include #include /line函数int main() int graphdrive=VGA,graphmode=VGAHI;initgraph(&graphdrive,&graphmode,d:tc3bgi);/屏幕显示方式为图形模式了line(200, 240, 440, 240); /画线line(320, 120, 320, 360);getch(); / 按任意键/退出图形显示方式closegraph(); return 0;程序执行后可以看到屏幕正中央有一个十字。3.2.2定义视口与文本显示模式一样,在图形显示模式下也可以由用户自行定义操作窗口,我们将其称为视口。定义视口后,所有绘制图形的操作均相对于该视口,这样可以实现屏蔽屏幕其他区域的目的。视口本身没有边框。定义视口的函数原型为:void setviewport(int x1,int y1,int x2,int y2bool clip=true);setviewport函数的功能是:设置矩形区域、将矩形区域左上角设置为原点坐标和选择是否裁剪。其中,x1,y1是视口左上角的屏幕坐标位置,x2,y2是视口右下角的屏幕坐标位置。如果clip为非0,则超出视口的输出被自动地剪裁掉,否则不进行裁剪。可以在不同位置定义视口,最后定义的称为当前视口。void getviewport(int *pleft,int *ptop,int *pright,int *pbottom,bool *pclip = NULL);函数可以获得当前视口的信息,调用getviewsettings函数后,当前视口的信息将存放在相应的指针所指的变量中。void clearviewport()函数将清除当前视口显示的所有内容,并将光标重新定位于视口的左上角。void cleardevice()函数用当前背景色清空屏幕,并将光标重新定位于屏幕的左上角。下面的程序是在2个不同视口中切换显示不同信息,其中的Sleep();函数是延迟函数,其功能只是等待一定的时间,时间由无符号整型参数决定,单位是毫秒,函数原型在windows.h中。#include #include struct viewporttypeint left;int right;int top;int bottom;bool clip;void main(void)int graphdrive=VGA,graphmode=VGAHI;struct viewporttype view_info2; / 要定义2个视口,用2个数组元素保存其信息initgraph(&graphdrive,&graphmode,d:tc3BGI);setviewport(10,10,100,20,1); / 定义第1个视口outtext(viewport1); / 在视口中输出字符串Sleep(2000);getviewport(&view_info0.left,&view_info0.top,&view_info0.right,&view_info0.bottom, &view_info0.clip); / 保存第1个视口的信息setviewport(200,10,300,20,1); / 定义第2个视口outtext(viewport2); / 在视口中输出字符串Sleep(2000);getviewport(&view_info1.left,&view_info1.top,&view_info1.right,&view_info1.bottom, &view_info1.clip); / 保存第2个视口的信息/ 用保存在view_info0中的第1个视口的信息,重新定义第1个视口setviewport(view_info0.left,view_info0.top,view_info0.right,view_info0.bottom, view_info0.clip);clearviewport(); / 清除第1个视口中原有内容Sleep(2000);outtext(test1test1); / 在视口中输出字符串Sleep(2000);/ 用保存在view_info1中的第2个视口的信息,重新定义第2个视口setviewport(view_info1.left,view_info1.top,view_info1.right,view_info1.bottom, view_info1.clip);clearviewport(); / 清除第2个视口中原有内容Sleep(2000);outtext(test2test2); / 在视口中输出字符串Sleep(2000);closegraph();注:不定义视口(这时整个屏幕是一个视口),也可进行各种图形操作。不过,在需要经常清除屏幕某个区域内容的情况下,定义视口,可以很方便地清除某个矩形区域中的各项内容,并保证输出内容不会到视口之外。如果你是2011-2-24以后下载的EasyX软件包,其graphics.h文件中了没有 setviewport() 等有关视口函数,视口编程使用windows中区域的概念,windows GDI 函数中有关区域的的函数举例如下。创建矩形区域函数:HRGN CreateRectRgn(int left, int top, int right, int bottom);其中,HRGN是windows中定义的表示区域的句柄。参数为左上角和右下角的坐标。创建区域后不再使用时,执行DeleteObject(HRGN hrgn)函数释放该区域对应的系统资源。设置当前绘图设备的裁剪区函数:void setcliprgn(HRGN hrgn);该区域设置为裁剪区后,任何区域外的绘图都将无效。取消之前设置的裁剪区函数:setcliprgn(NULL);清空裁剪区的屏幕内容函数:void clearcliprgn();用于设置坐标原点函数:void setorigin(int x, int y);其中,x,y均是物理坐标。例:#include #include void main()/ 初始化绘图窗口initgraph(1024, 768);outtext(welcome);/ 创建一个矩形区域HRGN rgn = CreateRectRgn(100, 100, 200, 200);/ 将该矩形区域设置为裁剪区setcliprgn(rgn);/ 画圆,受裁剪区影响,只显示出四段圆弧circle(150, 150, 55);/ 取消之前设置的裁剪区setcliprgn(NULL);/ 画圆,不再受裁剪区影响,显示出一个完整的圆circle(150, 150, 70);/ 按任意键退出getch();/清除区域中内容clearcliprgn();getch();closegraph();此外,windows有很多创建区域的函数,如:使用CreateEllipticRgn创建椭圆形的区域;使用CreatePolygonRgn创建多边形的区域等等。还可以使用 CombineRgn 创建组合区域。用到时查手册或MSDN。3.2.3设置当前位置在图形显示模式下光标是不显示的,但仍然有一个光标位置,我们把这个位置称为当前位置。有一些函数的输出是从当前位置开始的,所以需要在程序中控制当前位置。下表是几个控制当前位置的函数。函数原形功能描述int getwidth(void); 返回当前图形模式下的最大的x坐标值int getheight(void);返回当前图形模式下的最大的y坐标值int getx(void);返回当前位置的x坐标int gety(void);返回当前位置的y坐标void moveto(int x,int y);将当前位置设置到(x,y)位置void moverel(int dx,int dy)如果当前位置为(x,y),则该函数将当前位置移到(x+dx,y+dy)3.2.4设置颜色在图形模式下,下面4个标准函数可以用来设置或获取前景颜色和背景颜色。void setcolor(COLORREF color) 将前景颜色设置为colorvoid setbkcolor(COLORREF color) 将背景颜色设置为colorint getcolor(void) 返回当前的前景颜色int getbkcolor(void) 返回当前的背景颜色其中,COLORREF是图形方式下表达颜色的类型,实际上是一个4字节的数字,可以用RGB函数给其赋值:COLORREF color = RGB(140,40,60);RGB函数三个参数分别为颜色的红色部分、绿色部分、蓝色部分,每部分取值为0255EasyX定义了如下的符号常量,BLACK(黑色)BLUE(蓝色)GREEN(绿色)CYAN(青色)RED(红色)MAGENTA(洋红)BROWN(棕色)LIGHTGRAY(亮灰色)DARKGRAY(深灰)LIGHTBLUE(浅蓝)LIGHTGREEN(浅绿)LIGHTCYAN(浅蓝绿)LIGHTRED(浅红)LIGHTMAGENTA、YELLOW(黄色)WHITE(白色)这些常量可以直接使用,不用再用RGB函数赋值。3.2.5在图形模式下显示文字和数值printf、puts 等函数均不能在图形模式下显示文字或数字,需要用下面的函数:void outtext(LPCTSTR buf) 在当前位置显示字符串bufvoid outtextxy(int x, int y ,LPCTSTR buf) 在(x, y)坐标位置显示字符串buf若要显示数值,也需把数值转换为字符串后才能使用这2个函数。在转换时使用下面的函数会很方便:(注:VC2008中,使用以上两个函数需要将工程中的字符集设定为”多字节字符集”)sprintf(char *buf, char *format, ) 它的功能与printf的几乎相同,只是把输出结果输出到字符数组buf中,而不是屏幕上。调用时,除第1个参数是一个数组的首地址外,后面的参数与printf完全一样。例如:char buf100;int x=10;float y=12.345;sprintf(buf, “x=%3d y=%8f” , x, y);即可把x、y按第2个参数指定的格式输出到字符数组buf中,之后就可把buf中的字符串用outtext输出到图形模式下的屏幕上,与用printf函数向屏幕输出的内容、格式完全一样。3.2.6绘制图形下表是EasyX提供的部分绘制基本图形的标准函数。函数原型功能(除putpixel外均使用当前前景色)void putpixel(int x,int y,COLORREF color);用color颜色在(x,y)象素上画一个点COLORREF ge

温馨提示

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

评论

0/150

提交评论