连连看C语言毕业课程设计报告
c语言程序设计课程设计报告总结 (2)
C语言程序设计课程设计报告总结引言C语言作为一种高级程序设计语言,广泛应用于软件开发、系统编程等领域。
本课程设计旨在通过实际项目的开发,提高学生对C语言的综合运用能力,并培养学生的问题解决能力和团队合作精神。
本文将对本次课程设计进行总结和回顾。
一、课程设计介绍1.1 设计目标本次课程设计的主要目标是让学生熟悉C语言的基本语法和编程思想,能够运用所学知识解决实际问题,培养学生的编程能力和团队协作能力。
1.2 设计内容课程设计要求学生以小组为单位,选择一个实际问题进行分析和设计,并用C语言编写相应的程序。
设计内容涵盖了C语言的输入输出、循环结构、条件结构、数组、函数等知识点。
1.3 设计过程本次课程设计分为三个阶段:问题分析与需求确定、详细设计与编码、测试与优化。
在每个阶段,学生需要按照规定的任务要求完成相应的工作,并及时提交报告和源代码。
二、课程设计过程回顾2.1 问题分析与需求确定在这个阶段,小组成员共同商讨选题,并进行问题分析和需求确定。
我们选择了一个简单的学生成绩管理系统作为课程设计的题目。
通过分析,我们确定了以下需求:能够录入学生信息、计算学生平均分、按照成绩排序并输出等。
2.2 详细设计与编码在这个阶段,我们详细设计了软件的功能模块和数据结构,并开始编写代码。
我们将程序分为输入、计算、排序和输出四个模块,每个模块对应一个函数。
我们采用模块化设计的思想,使得每个函数的功能明确,便于调试和维护。
在编码过程中,我们遵循了良好的编码规范,并采用了一些常用的代码优化技巧,如避免重复计算、合理使用循环和条件结构等。
在保证功能正确性的前提下,我们还注重代码的可读性和可维护性。
2.3 测试与优化在编码完成后,我们进行了功能测试和性能测试。
功能测试主要是确保程序按照需求正常运行,各个功能模块能够正确交互。
性能测试则是为了检查程序的效率和稳定性,我们输入了大量的测试数据进行测试。
通过测试,我们发现了一些潜在的问题和性能瓶颈,并进行了相应的优化。
连连看c课程设计
连连看 c课程设计。
一、课程目标知识目标:1. 学生能理解并掌握连连看游戏的基本规则和策略。
2. 学生能运用所学知识,分析并解决连连看游戏中遇到的问题。
3. 学生了解连连看游戏背后的数学原理,如排列组合、概率等。
技能目标:1. 学生能运用计算机操作,熟练玩转连连看游戏。
2. 学生通过连连看游戏,培养逻辑思维能力和问题解决能力。
3. 学生学会与他人合作,进行游戏策略的交流与分享。
情感态度价值观目标:1. 学生在游戏中培养积极的学习态度,主动探索和发现新知识。
2. 学生树立正确的竞争意识,学会尊重对手,敢于面对挑战。
3. 学生通过团队合作,培养集体荣誉感,增强团队协作能力。
本课程旨在通过连连看游戏,将学科知识与实际操作相结合,提高学生的逻辑思维能力、问题解决能力和团队合作能力。
针对学生的年级特点,课程设计注重知识性、趣味性和实践性,使学生学以致用,激发学习兴趣,培养良好的学习习惯和价值观。
二、教学内容1. 连连看游戏规则与策略:介绍连连看游戏的基本规则,分析游戏策略,如消除顺序、路径选择等。
- 教材章节:第三章第二节“游戏的规则与策略”2. 连连看游戏中的数学原理:讲解排列组合、概率等数学知识在连连看游戏中的应用。
- 教材章节:第四章第一节“排列组合与概率”3. 计算机操作与连连看游戏:教授如何使用计算机进行连连看游戏,包括游戏界面的认识、操作方法等。
- 教材章节:第二章第二节“计算机游戏操作基础”4. 逻辑思维与问题解决:通过连连看游戏,培养学生逻辑思维能力和问题解决能力。
- 教材章节:第五章第三节“逻辑思维与问题解决方法”5. 团队合作与交流分享:组织学生进行连连看游戏比赛,培养团队合作精神,并进行游戏策略的交流与分享。
- 教材章节:第六章第一节“团队合作与交流”教学内容按照教学大纲进行安排,共计5个课时。
第一、二课时讲解连连看游戏规则与策略,第三课时介绍数学原理在游戏中的应用,第四课时教授计算机操作,第五课时进行团队合作与交流分享。
(完整版)连连看C语言毕业课程设计报告
(完整版)连连看C语言毕业课程设计报告目录问题描述连连看是一款简单有趣的小游戏,曾经风靡一时,玩家要将相同的两张牌用三根以内的直线连在一起就可以消除,规则简单容易上手,游戏速度节奏快,画面清晰可爱,适合细心的玩家。
游戏胜利条件的判定:将棋盘上面的格子全部消除掉;失败的判定:规定的时间内格子没有消除。
问题分析连连看需要解决的问题包括:(1)整个游戏界面和各种图案的图形显示;(2)如何判断鼠标所点的两个图像能否相消;(3)如何判断是否消除完全;(4)如何判断游戏的结束及如何终止游戏;(5)游戏难度的设计和得分规则游戏总的流程可以描述如下:首先出现游戏界面,一幅由10*6的小图片的构成的画面,玩家需要点击2 个相同图案的对子,其连接线不多于3 根直线,也就是说连接相同图案时,直线只能有两个折点,就可以成功将对子消除。
此外,需要重点考虑的是游戏面板和各种形状的方块的数据结构表示。
格子面板可以用一个二维数组来表示。
1、开发工具的介绍【VS2008 】VS2008引入了250多个新特性,整合了对象、关系型数据、XML的访问方式,语言更加简洁。
使用Visual Studio 2008可以高效开发Windows应用程序。
设计器中可以实时反映变更,XAML中智能感知功能可以提高开发效率。
同时Visual Studio 2008支持项目模板、调试器和部署程序。
Visual Studio 2008可以高效开发Web应用,集成了AJAX 1.0,包含AJAX项目模板,它还可以高效开发Office应用和Mobile应用。
VS的开发界面分为两个版本:整合模式和孤立模式,分别对基于语言的开发和基于特别工具的开发作了优化。
【EasyX 】EasyX 是针对C++ 的图形库,可以帮助C 语言初学者快速上手图形和游戏编程。
许多学编程的都是从C 语言开始入门的,而目前的现状是:1. 有些学校以Turbo C 为环境讲C 语言,只是Turbo C 的环境实在太老了,复制粘贴都很不方便。
【精品完整版】毕业设计(论文)报告连连看游戏的设计与实现
毕业设计(论文)报告系别计算机科学技术专业计算机应用班级姓名学号设计(论文)题目连连看游戏的设计与实现指导教师起迄日期连连看游戏的设计与实现摘要本文用VisualC++来设计与实现简单的连连看游戏的基本功能,玩家可以在游戏区域中通过键盘控制来选取相同的两个物件,采用特定的消除规则对它们进行消除的操作,当游戏区域中的所有方块对都被消除后玩家即可胜利。
本次课程设计对该游戏的算法以及游戏图案的绘制进行详细的介绍。
运用连线相消的方法完成了连连看游戏。
关键词:VisualC++6.0;连连看;游戏;3D绘图1 引言1.1连连看游戏介绍游戏“连连看”顾名思义就是找出相关联的东西,它来源于街机游戏《四川麻将》和《中国龙》,是给一堆图案中的相同图案进行配对的简单游戏,在2003年,一个叫做朱俊的网友将这种形式搬到了PC上,立刻成为办公一族的新宠,并迅速传遍了世界各地。
饱受工作压力的人们没有太多的时间进行复杂的游戏,而对于这种动动鼠标就能过关的游戏情有独钟。
之后村子的连连看风靡版,阿达的连连看奥运版,连连看反恐版,还有敏敏连连看,水晶连连看等遍地开花,造就了一个连连看的新世界。
连连看游戏有多种地图样式和道具系统、大大加强了游戏的可玩性,是一款老少皆宜的休闲佳品。
1.2课程设计的目的网络小游戏制作的目的是满足了人们休闲的需要,在紧张工作之余休闲类的小游戏能够给人带来最大程度的放松,也可以增进人们之间的交流,沟通,通过游戏还可以认识更多的朋友,也可以到达跨省、跨市,甚至跨国间人们互相娱乐的目的。
另外也想通过本次课程设计将三年来所学的专业知识和其他方面的知识融入到实际应用中。
1.3主要问题开始制作游戏时,主要要解决的问题有以下几个方面:如何设置整个游戏的界面;如何控制连连看游戏中随机图片的生成且每种图片必须为偶数个;游戏开始后,判断鼠标两次点击的图片能否消去,即图片是否相同且图片之间路径的判断。
1.4课题实现技术的简要说明Visual C++是一个功能强大的可视化软件开发工具,Visual C++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。
c语言课程设计设计报告
c语言课程设计设计报告c语言课程设计设计报告「篇一」c语言课程设计实验报告第一章基础掌握1.1 实验目的掌握C程序设计编程环境Visual C++,掌握运行一个C程序的基本步骤,包括编辑、编译、链接和运行。
(]1.2 实验要求在报告中记录建立、保存C程序实习过程。
1.3 实验基本内容编写程序,在屏幕上显示一个短句“Hello World”(1)程序:1)编译如下程序:#includeVoid main{printf (“Hello World! ”);}2)链接。
执行Build-命令。
3)运行。
执行Build Execute 命令。
显示结果。
4)关闭程序工作区。
(2)运行结果:输出结果:Hello World!总结:掌握C语言程序设计的基本框架,能够编写简单的程序。
第二章数据类型2.1 实验目的(1)掌握C语言的运算符和表达式的正确使用以及C语言的几种基本数据类型和基本输入输出函数的使用方法。
()(2)通过编程进一步理解和掌握运算符的确切含义和功能。
2.2 实验要求(1)在报告中记录建立、保存C程序实习过程。
(2)完成典型题目,分析遇到的困难和实验中的收获。
2.3 实验基本内容输入程序,观察输出结果 1>./*test2.1c*/1)编译如下程序: #includevoid main{char ch; int k;ch='a',k='b';printf("%d,%x,%c",ch,ch,ch,ch,k); printf("k=%%d ",k) }2)链接。
执行Build-命令。
3)运行。
执行Build Execute 命令。
显示结果。
4)关闭程序工作区。
2>./*test2.2c*/1)编译如下程序: #includevoid main{float a1,a2; double b1,b2; a1=1234.12; a2=0.000001; b1=1234.12; b2=0.000001;printf("%f,%l f ",a1+a2,b1+b2);}2)链接。
C 课程设计_连连看1
课程设计报告课程名称:面向对象程序设计C++设计题目:连连看专业:计算机科学与技术姓名:学号:指导教师:李晓虹2015 年 12 月 10 日摘要在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生活不可或缺的一部分,越来越多的人使用计算机办公、娱乐、购物等等。
游戏行业发展一日千里,该行业极大的影响和改变了人们的生活和娱乐方式,游戏为消费者提供丰富多彩的虚拟空间,使消费者可以自由自在的享受虚拟世界的乐趣,实现自己在现实生活着那个可能永远不能实现的梦想,满足了消费者的心理和精神需求。
连连看游戏是一款很流行的小游戏,有的是连水果图片,有的是连麻将牌,有的是连各种小图片的等等。
各种图片让人看得眼花缭乱,这也可以锻炼人的反应能力和眼力,所以这款小游戏受到了越来越多人的喜爱,尤其是小孩子的喜爱。
连连看游戏也是比较经典的一款小游戏,实现它的方法很多,可以用很多不同算法设计和语言实现,如C,C#,C++,VB,JAVA等。
在本课程设计中我是利用C++语言编写,开发平台是Microsoft Visual Studio 2010,功能较为简单,寓学于乐。
程序的功能是通过找出游戏中两个相同图案的小方块,然后分别点击两个小方块将其消除;可通过倒计时的方式控制游戏时间,游戏时间到或者没有匹配的图案时则游戏结束,需要重新开局,每一局开始倒计时都重新开始;能够响应鼠标事件。
论文首先介绍了进行该游戏课程设计的目的,然后是任务描述和设计的相关要求,最后是最重要的需求分析和设计方案。
重点介绍了在游戏过程中各种事件的处理,其中又以鼠标事件的处理最为最要,鼠标事件是利用鼠标所发出的信息了解用户的意图,进而做出相对应的动作,消除需要消除的小方块。
关键词:连连看游戏;算法设计;事件;C++,Microsoft Visual Studio 2010第一章系统需求分析1.1 功能分析每次用户选择两个相同的小方块,如果小方块满足一定条件(这两个小方块之间存在转弯少于3的路径),则两个小方块可以消掉,给定任意具有相同图案的两个小方块,用户需要寻找这两个小方块之间在转弯最少的情况下,如果这个最优路径的转弯数目小于3,则这两个小方块可以消掉。
连连看c课程设计
连连看 c课程设计一、教学目标本课程的教学目标是使学生掌握连连看游戏的设计与实现,包括算法分析、界面设计、编程实现等。
知识目标要求学生了解连连看游戏的规则,掌握常用的算法,如深度优先搜索、广度优先搜索等。
技能目标要求学生能够使用编程语言实现连连看游戏,提高编程能力和问题解决能力。
情感态度价值观目标在于培养学生的团队合作意识和创新精神,通过小组合作完成游戏设计,提高沟通协作能力。
二、教学内容本课程的教学内容主要包括连连看游戏规则介绍、算法分析、界面设计、编程实现和团队协作。
具体包括以下几个部分:1.连连看游戏规则介绍:介绍连连看游戏的规则,让学生了解游戏的基本玩法。
2.算法分析:讲解如何使用深度优先搜索、广度优先搜索等算法解决连连看游戏中的问题。
3.界面设计:教授如何设计连连看游戏的界面,包括游戏区域、提示框、菜单等。
4.编程实现:指导学生使用编程语言实现连连看游戏,包括算法实现、界面绘制等。
5.团队协作:讲解如何进行小组合作,分工完成游戏设计,提高团队合作能力。
三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性。
包括:1.讲授法:讲解连连看游戏规则、算法分析、界面设计等理论知识。
2.案例分析法:分析经典连连看游戏案例,引导学生思考并解决问题。
3.实验法:让学生动手实践,编写代码实现连连看游戏。
4.讨论法:学生进行小组讨论,分享设计思路,互相学习。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将提供以下教学资源:1.教材:提供专门的教材,介绍连连看游戏的设计与实现方法。
2.参考书:推荐学生阅读相关编程书籍,加深对编程语言和算法的理解。
3.多媒体资料:制作PPT、视频等多媒体资料,帮助学生更好地理解课程内容。
4.实验设备:提供计算机、编程环境等实验设备,让学生能够动手实践。
五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分,以全面反映学生的学习成果。
平时表现占30%,主要评估学生在课堂上的参与度、提问回答和小组讨论等;作业占30%,主要评估学生的编程实践能力;考试占40%,包括理论知识考试和实际编程考试,以评估学生对课程内容的掌握程度。
连连看设计报告
连连看学号姓名指导教师2008年1月【需求分析】1.需求描述1.1.题目描述:要求同学用C语言开发一个游戏“连连看”。
游戏规则可参考原游戏。
1.2.功能要求:1.2.1界面界面由若干个小图构成,每个小图案成为一张牌。
游戏分难,易2种,分别为9行16列牌,和5行8列牌。
每张牌上的图案可由不同数字代替。
在屏幕上显示“重新洗牌”,“生命值”,“得分”。
1.2.2操作方式必须设计一种可随时结束程序的方法(例如按ESC键)。
可使用下面任何一种操作方式:(1)用键盘操作。
按键把光标移动到要选中的牌上,按ENTER键选中该牌。
(2)鼠标操作(扩展要求)。
2.需求分析2.1.功能2.1.1游戏操作选中2张牌,若2张牌的数字不同,则取消两张牌的选中状态;若2张牌的数字相同,则寻找可能存在的连线,连线最多允许两次转折,若未找到,则取消两张牌的选中状态;若找到,则画出连线,连线保留一段时间,然后再将此2张牌和连线删除。
通过键盘控制程序的运行,进行选块,消块,退出的功能。
2.1.2游戏结束有3种结束方式:成功结束:当所有牌均被连接并删除,则游戏结束,并显示“congratulation!”。
失败结束:当进度条减为0时,而界面中仍有牌未被删除,则游戏结束,并显示“you have lost!”。
强行结束:按ESC结束程序。
2.1.3进度条显示当前剩余时间自动获取系统时间,更新进度条时,设置为某个百分比,用背景色进行填充,以达到减少时间的目的。
2.2.界面2.2.1菜单进入游戏首先要设置判断键入,选择是否继续进行游戏。
若选择退出,输入0,界面返回“Thank you”如果选择进入游戏,则键入1,屏幕出现难以程度选择的界面。
2.2.2游戏界面拥户键入2后,游戏进入5行8列的界面,进行游戏。
用户键入3后,游戏进入9行16列的界面,进行游戏。
2.2.3游戏结束用户成功完成游戏后,在界面正中显示“congratulations”。
c语言课程设计连连看
c语言课程设计连连看一、教学目标本课程旨在通过C语言编程的教学,使学生掌握C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识,培养学生具备基本的编程能力和逻辑思维能力。
同时,通过编程实践,使学生能够运用C语言解决实际问题,提高学生的创新能力和实践能力。
此外,通过课程的学习,培养学生对计算机科学的兴趣和热情,培养学生良好的编程习惯和团队协作精神。
二、教学内容教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识,以及简单的编程实践。
具体包括以下几个方面:1.C语言的基本语法和规则;2.数据类型、变量和常量的定义与使用;3.运算符和表达式的使用;4.控制结构:条件语句、循环语句;5.函数的定义和调用;6.数组、指针和字符串的基本操作;7.结构体和文件操作等高级知识。
三、教学方法为了提高学生的学习兴趣和主动性,将采用多种教学方法相结合的方式进行教学。
具体包括:1.讲授法:讲解C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识;2.案例分析法:通过分析实际案例,使学生掌握C语言编程的方法和技巧;3.实验法:安排上机实验,让学生亲自动手编写程序,巩固所学知识;4.讨论法:学生进行小组讨论,分享学习心得和编程经验,互相学习和进步。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,将选择和准备以下教学资源:1.教材:《C程序设计语言》(K&R);2.参考书:《C Primer Plus》、《C和指针》;3.多媒体资料:教学PPT、视频教程、在线编程练习题;4.实验设备:计算机、网络环境、编程环境(如Code::Blocks、VisualStudio等)。
五、教学评估教学评估是检验学生学习成果和教学效果的重要手段。
本课程的评估方式将包括以下几个方面:1.平时表现:通过课堂参与、提问、讨论等环节,评估学生的学习态度和参与程度;2.作业:布置课后编程作业,评估学生的编程能力和应用能力;3.实验报告:评估学生在实验环节的操作能力和解决问题的能力;4.考试成绩:包括期中和期末考试,全面测试学生的C语言编程知识和技能。
c语言课程设计报告
c语言课程设计报告C语言课程设计报告。
一、设计目的。
本次课程设计的目的在于通过实际的项目实践,帮助学生巩固C语言的基础知识,提高编程能力,培养学生的实际动手能力和解决问题的能力。
二、设计内容。
1. 学生信息管理系统。
设计一个简单的学生信息管理系统,包括学生的基本信息录入、查询、修改和删除功能。
通过这个项目,学生可以学习如何使用C语言中的结构体、文件操作等知识,加深对C语言的理解。
2. 简易计算器。
设计一个简易的计算器程序,实现基本的加减乘除运算,同时具备错误输入提示和异常处理功能。
通过这个项目,学生可以学习如何使用条件语句、循环语句和函数等知识,提高对C语言的掌握程度。
3. 学生成绩管理系统。
设计一个学生成绩管理系统,包括成绩录入、统计、排名等功能。
通过这个项目,学生可以学习如何使用数组、指针等知识,提高对C语言的应用能力。
三、设计思路。
在设计过程中,我们要注重培养学生的问题分析和解决能力,鼓励他们多动手实践,多思考,多尝试。
同时,要引导学生注重代码的规范性和可读性,提高代码的质量和可维护性。
四、设计方法。
1. 理论教学与实践相结合。
在课程教学中,要注重理论知识的讲解,同时配合实际的项目练习,让学生在实践中巩固所学知识,提高编程能力。
2. 引导学生独立思考与合作交流。
在项目实践过程中,要引导学生独立思考问题,培养他们解决问题的能力,同时鼓励学生之间的合作交流,共同解决问题,促进学习效果的提高。
3. 鼓励创新与实践。
在项目设计中,要鼓励学生发挥创造力,设计出独特的程序,同时要注重实际操作,让学生通过实践检验自己的设计,不断完善和改进。
五、设计效果。
通过本次课程设计,学生将能够掌握C语言的基本语法和常用技巧,提高编程能力,培养解决问题的能力,为以后的学习和工作打下坚实的基础。
六、总结。
C语言课程设计是学生学习C语言的重要环节,通过设计实际项目,可以提高学生的动手能力和解决问题的能力,为学生今后的学习和工作打下坚实的基础。
连连看c语言课程设计
连连看c语言课程设计一、教学目标本课程旨在通过学习C语言的基础知识,使学生能够理解并运用C语言进行简单的程序设计。
具体目标如下:1.理解C语言的基本语法和数据类型。
2.掌握C语言的运算符和表达式。
3.学会使用C语言进行控制流程的编写。
4.能够使用C语言编写简单的程序。
5.能够阅读并理解简单的C语言程序。
6.能够对简单的C语言程序进行调试和修改。
情感态度价值观目标:1.培养学生对计算机科学的兴趣和热情。
2.培养学生解决问题的能力和创新思维。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据类型、运算符、表达式和控制流程。
具体安排如下:1.C语言的基本语法和数据类型。
2.C语言的运算符和表达式。
3.C语言的控制流程,包括条件语句和循环语句。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法。
具体方法如下:1.讲授法:通过讲解C语言的基本语法、数据类型、运算符和表达式,使学生理解并掌握相关知识。
2.案例分析法:通过分析具体的C语言程序案例,使学生学会运用C语言进行程序设计。
3.实验法:通过上机实验,使学生能够实际操作C语言进行程序编写和调试。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:《C语言程序设计》。
2.参考书:提供相关的C语言参考书籍,供学生自主学习。
3.多媒体资料:制作相关的教学PPT和视频资料,以便学生更好地理解教学内容。
4.实验设备:提供计算机实验室,供学生进行上机实验和实践。
五、教学评估为了全面反映学生的学习成果,本课程将采用以下评估方式:1.平时表现:通过学生在课堂上的参与度、提问和回答问题的情况,以及小组讨论的表现来评估。
2.作业:布置适量的作业,通过学生的作业完成情况来评估其对知识的掌握程度。
3.考试:进行期中考试和期末考试,通过考试的成绩来评估学生的学习成果。
以上评估方式将客观、公正地评价学生的学习情况,同时也将鼓励学生的自主学习和积极参与。
c语言课程设计报告书3篇
c语言课程设计报告书3篇c语言课程设计报告书1我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要。
在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。
在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。
由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。
包括了程序模块处理。
简单界面程序。
高级界面程序。
程序的添加修改。
用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。
上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。
对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。
学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。
因为学时所限,课程不能安排过多的上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。
为此,我们结合课堂讲授的内容和进度,安排了12次上机实验。
课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:1、加深对课堂讲授内容的理解课堂上要讲授许多关于c语言的.语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。
然而要使用c语言这个工具解决实际问题,又必须掌握它。
通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。
对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。
C 课程设计_连连看游戏
课程设计报告课程名称:面向对象程序设计C++设计题目:连连看游戏专业:计算机科学与技术姓名:学号:指导教师:李晓虹2016 年 1 月 1 日1、系统需求分析本程序是一款连连看游戏,该程序应该具备以下功能:(1)该游戏界面为黑色背景加方格图片类型,不同的图片上有不同的图案,位置为随机打乱。
(2)游戏规则为将相同图案的图片进行连接,但需满足只能至少单边无阻呈直线连接,否则无效。
一旦成功连接两个相同的图案,则这两个图案消失,如此反复直到所有的图片消失,游戏通关。
(3)图片的位置具有随机性,但要求都是必须成对出现。
1.1 功能需求(1)主界面需求显示玩家当前关卡数及得分数提供“新游戏”按钮,单击后可以重新开始游戏提供“退出”按钮,单击后可以退出程序提供“帮助”按钮,单击后可以弹出制作人信息,联系方式等(2)消除需求玩家点击图案,图案会变色以提示被选中;此时再点击另一个图案,如果图案相同,则这两个图案消失;此外,两个图案中间必须无其他图片阻碍才有效,消除规则如下:一条直线相连:图1-1两条直线相连:图1-2图1-3(3)新游戏需求当玩家点击新游戏按钮时,游戏将重新生成新的图案并重排,且重排的方式是随机的。
(4)帮助当玩家点击帮助时,将弹出制作者信息以及秘籍。
(5)退出点击退出按钮,将退出程序。
1.2时间性能需求响应速度:3秒以内客户端:可执行文件,点开即可运行,方便快捷。
1.3界面友好需求系统提供统一的界面操作方式。
要求界面操作方式美观大方,布局合理,功能完善,整个操作简单,对于初级用户容易上手。
良好的操作界面可以给游戏玩家带来更好地游戏体验和愉悦的心情。
复杂的游戏界面会造成玩家的负担,所以在设计程序时,功能以及各种操作都应当尽量简单明了。
1.4系统可用性需求系统操作快捷,内容完整是保证用户进行使用的基础。
因此,应准确而详细的理解各用户区的特征,任务和使用环境,在“有效性”、“效率”等各个方面满足各类用户对系统的需要。
C 课程设计_连连看游戏1
课程设计报告课程名称:面向对象程序设计C++设计题目:连连看游戏专业:计算机科学与技术姓名:学号:指导教师:李晓虹2016 年 1 月7 日第一章系统需求分析相信大多数玩过QQ游戏的人对这款游戏都不陌生。
这款游戏不止操作简单,规则也不难,再加上游戏速度的控制机制得宜,让整个游戏在操作过程中充满了快乐与紧张的气氛。
除了游乐当中能带给使用者快乐之外,游戏的设计内容无形中也不断训练使用者的逻辑思考能力,对于依靠高度脑力工作的现代人,都可以通过这个游戏,不时的检验一下自己,所以我们不难发现,在各种可携带的电子产品上都有这款游戏的踪影。
第二章总体设计本游戏主要给用户提供的是游戏的娱乐功能,所以怎么提高游戏的娱乐性成为问题的关键,那么娱乐性主要体现在那些方面呢?1,用户界面,具有良好的用户界面能吸引人去玩;2,游戏的娱乐功能,具有良好的娱乐功能是游戏具有持久魅力的基础,需要设计游戏的不同级别以充分调动用户积极性;3,具有友好的提示功能,满足不同游戏级别的人的不同需要,增加必要的音乐效果,使用户玩起来不觉得单调乏味。
鉴于上面分析,本次设计设置不同的游戏级别主要是缩短时间的进行速度,因为图标是随机列换的,所以通过控制产生随机数的难度显得不现实。
通过菜单和快捷键的操作可以适时做出游戏的提示功能,满足提示要求,如果用户对某次产生的图标分布效果不满意可以对现在有的图表资源进行有限次的重排,以满足用户的需要。
关于算法问题,这是游戏设计的核心问题,算法的选择好坏涉及到游戏的质量,采用的产生的二维随机数索引分别和对应图标对应形成游戏界面。
算法需要计算两个相同图标的连通性,计算连通性需要分别判断多次,所以算法的根本在于如何判断区域连通。
第三章详细设计3.1 连连看的要求1,要连接的两点上的图形是相同的。
2,两点间存在一条没有“障碍”的并且折点不超过两个的路线。
那么分析一下可以看到,一般分为三种情况。
图例说明:假设以一个2维数组来表示一张连连看的地图,数组中元素值为0的代表游戏界面中的空格子,值大于0的代表游戏中的各种连接对象。
C语言课程设计总结汇报
C语言课程设计总结汇报C语言课程设计总结汇报一、课程设计背景:C语言是一门广泛应用于程序设计领域的编程语言,具有效率高、清晰易读等优点。
作为计算机专业的学生,掌握C语言的基本编程技能是非常重要的。
为了让学生更好地掌握C语言的编程方法和技巧,提高他们的程序设计能力,我们开设了C语言课程设计。
二、设计目标和任务:1.目标:通过C语言课程设计,使学生掌握C语言的基本语法、流程控制、数组、函数等常用知识和技巧,能够独立编写简单的C语言程序。
2.任务:设计一系列与实际生活相关的C语言程序,既考察学生对C语言基础的理解,又锻炼他们的动手实践能力。
三、设计方法和步骤:1.方法:以问题驱动的方式进行设计,让学生在实际问题中运用C语言编程的知识和技巧解决实际问题。
2.步骤:(1)确定课程设计的主题和内容,结合课程大纲和教学进度,选择适合的项目。
(2)对每个项目进行详细的分析和设计,确定输入输出的格式和功能要求。
(3)编写相应的代码,运行调试,确保程序能够正常运行。
(4)撰写文档,包括程序的功能说明、实现思路以及使用说明等。
四、设计项目和成果展示:1.项目一:计算器通过编写计算器程序,让学生掌握C语言的基本运算符、条件语句和函数的使用。
该程序可以实现基本的四则运算和求平方根等功能。
2.项目二:学生成绩管理系统通过编写学生成绩管理系统,让学生学会使用C语言的数组和循环结构。
该程序可以实现学生成绩的录入、查询和排序等功能。
3.项目三:图书管理系统通过编写图书管理系统,让学生进一步熟悉C语言的函数和文件操作。
该程序可以实现图书的添加、删除、查询和修改等功能。
五、设计成果总结:1.学生能够熟练掌握C语言的基本语法和常用的编程技巧,能够独立编写简单的C语言程序。
2.学生通过完成一系列实际项目,提高了问题解决能力和动手实践能力,培养了他们的创新意识和团队合作精神。
3.学生通过设计项目,充分理解了C语言在实际生活中的应用,增强了对计算机程序设计的兴趣。
连连看c语言课程设计
连连看c语言课程设计一、课程目标知识目标:1. 学生能理解C语言中结构体的概念和使用方法,掌握结构体数组的相关操作。
2. 学生能运用指针和结构体相关知识实现连连看游戏的逻辑设计。
3. 学生了解并掌握C语言中的文件操作,实现对连连看游戏数据的保存和读取。
技能目标:1. 学生能独立设计并编写C语言程序,完成连连看游戏的框架和基本功能。
2. 学生通过课程学习,培养逻辑思维能力和问题解决能力,学会运用所学知识解决实际问题。
3. 学生能运用调试工具对程序进行调试和优化,提高程序性能。
情感态度价值观目标:1. 学生通过参与课程学习,培养对编程的兴趣和热情,提高主动学习的积极性。
2. 学生在团队协作中,学会沟通与交流,培养合作精神和团队意识。
3. 学生在课程实践中,体验编程的乐趣,增强自信心和成就感,培养克服困难的意志。
本课程针对高年级学生,结合C语言学科特点,注重理论知识与实践操作的结合。
课程以连连看游戏为载体,引导学生运用所学知识,培养编程能力和逻辑思维能力。
同时,关注学生的情感态度,激发学习兴趣,提高合作意识,为学生的终身发展奠定基础。
通过本课程的学习,期望学生能够达到以上所述的具体学习成果。
二、教学内容1. 结构体和结构体数组:讲解结构体的定义和用法,结构体数组的创建与初始化,以及结构体变量的访问和操作。
2. 指针与结构体:介绍指针与结构体的结合使用,包括结构体指针的定义、访问结构体成员,以及结构体指针数组的应用。
3. 文件操作:讲解C语言中文件的基本操作,包括文件的打开、关闭、读取和写入,重点掌握文件读写结构体数据的方法。
4. 游戏逻辑设计:分析连连看游戏的规则和逻辑,引导学生运用结构体、指针和文件操作等知识,设计游戏的数据结构和算法。
5. 编程实践:结合教材实例,指导学生编写连连看游戏的代码,实现游戏的基本功能,包括游戏界面的显示、数据的保存与读取、游戏逻辑判断等。
教学内容参照教材相关章节,按照以下进度安排:第一课时:结构体和结构体数组;第二课时:指针与结构体;第三课时:文件操作;第四课时:游戏逻辑设计;第五课时:编程实践与调试优化。
c课课程设计(连连看)
c 课课程设计(连连看)一、教学目标本课程的教学目标是使学生掌握XX学科的基本概念、原理和方法,提高学生的XX能力。
具体来说,知识目标包括:掌握XX学科的基本知识、概念和原理,了解XX学科的发展趋势;技能目标包括:能够运用XX方法分析问题和解决问题,具备XX技能;情感态度价值观目标包括:培养学生的创新意识、科学精神和合作精神。
二、教学内容根据课程目标,本课程的教学内容主要包括XX学科的基本概念、原理和方法。
教学大纲如下:第1章:XX学科概述1.1 XX学科的定义和发展历程1.2 XX学科的应用领域和意义第2章:XX基本概念2.1 XX概念的定义和内涵2.2 XX概念的应用和举例第3章:XX原理3.1 XX原理的表述和解释3.2 XX原理的应用和案例第4章:XX方法4.1 XX方法的原理和步骤4.2 XX方法的实践应用三、教学方法为了实现课程目标,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
通过多样化的教学方法,激发学生的学习兴趣和主动性,提高学生的参与度和实践能力。
四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备等。
教材和参考书将用于引导学生掌握基本知识和概念;多媒体资料将用于辅助讲解和展示;实验设备将用于实践操作和验证。
教学资源的选择和准备将充分支持教学内容和教学方法的实施,丰富学生的学习体验。
五、教学评估本课程的评估方式包括平时表现、作业和考试等。
平时表现主要评估学生的课堂参与度、提问和回答问题的积极性等;作业主要评估学生的理解和应用能力;考试主要评估学生对知识的掌握和运用能力。
评估方式应客观、公正,能够全面反映学生的学习成果。
具体的评估标准和权重分配将在课程开始时明确告知学生。
六、教学安排本课程的教学安排如下:共计XX课时,每周安排XX时间段进行课堂教学,教学地点为XX教室。
教学进度将根据课程内容和学生的实际情况进行调整,确保在有限的时间内完成教学任务。
C语言课程设计报告
C语言课程设计报告一、设计目的本次课程设计旨在帮助学生熟悉C语言的基本语法和编程思想,通过设计一个简单的C语言程序,掌握C语言的基本编写技巧和调试方法,加深对C语言的理解。
二、设计内容本次C语言课程设计要求学生设计一个简易的学生信息管理系统,包括学生的基本信息录入、查询、修改和删除功能。
三、设计思路1. 需要定义一个学生信息的结构体,包括学号、姓名、年龄等基本信息。
2. 定义一个学生信息数组,用于存储学生信息。
3. 实现录入学生信息的功能,通过用户输入学生的学号、姓名、年龄等信息,并将其存储到学生信息数组中。
4. 实现查询学生信息的功能,用户输入要查询的学生学号,系统通过遍历学生信息数组找到对应的学生信息并输出。
5. 实现修改学生信息的功能,用户输入要修改的学生学号,系统通过遍历学生信息数组找到对应的学生信息,并提示用户输入新的学生姓名、年龄等信息,并将其更新到学生信息数组中。
6. 实现删除学生信息的功能,用户输入要删除的学生学号,系统通过遍历学生信息数组找到对应的学生信息,并将其从学生信息数组中删除。
四、设计步骤1. 定义一个学生信息的结构体,并在主函数中定义一个学生信息数组。
2. 实现录入学生信息的功能,通过用户输入学生的学号、姓名、年龄等信息,并将其存储到学生信息数组中。
3. 实现查询学生信息的功能,用户输入要查询的学生学号,系统通过遍历学生信息数组找到对应的学生信息并输出。
4. 实现修改学生信息的功能,用户输入要修改的学生学号,系统通过遍历学生信息数组找到对应的学生信息,并提示用户输入新的学生姓名、年龄等信息,并将其更新到学生信息数组中。
5. 实现删除学生信息的功能,用户输入要删除的学生学号,系统通过遍历学生信息数组找到对应的学生信息,并将其从学生信息数组中删除。
6. 编写主函数,实现菜单选择功能,用户可以通过选择不同的菜单选项进行录入、查询、修改和删除学生信息的操作。
五、实验成果经过设计和编码,最终实现了一个简易的学生信息管理系统,能够完成学生信息的录入、查询、修改和删除功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(此文档为word格式,下载后您可任意编辑修改!)目录问题描述连连看是一款简单有趣的小游戏,曾经风靡一时,玩家要将相同的两张牌用三根以内的直线连在一起就可以消除,规则简单容易上手,游戏速度节奏快,画面清晰可爱,适合细心的玩家。
游戏胜利条件的判定:将棋盘上面的格子全部消除掉;失败的判定:规定的时间内格子没有消除。
问题分析连连看需要解决的问题包括:(1)整个游戏界面和各种图案的图形显示;(2)如何判断鼠标所点的两个图像能否相消;(3)如何判断是否消除完全;(4)如何判断游戏的结束及如何终止游戏;(5)游戏难度的设计和得分规则游戏总的流程可以描述如下:首先出现游戏界面,一幅由10*6的小图片的构成的画面,玩家需要点击2 个相同图案的对子,其连接线不多于3 根直线,也就是说连接相同图案时,直线只能有两个折点,就可以成功将对子消除。
此外,需要重点考虑的是游戏面板和各种形状的方块的数据结构表示。
格子面板可以用一个二维数组来表示。
1、开发工具的介绍【VS2008 】VS2008引入了250多个新特性,整合了对象、关系型数据、XML的访问方式,语言更加简洁。
使用Visual Studio 2008可以高效开发Windows应用程序。
设计器中可以实时反映变更,XAML中智能感知功能可以提高开发效率。
同时Visual Studio 2008支持项目模板、调试器和部署程序。
Visual Studio 2008可以高效开发Web应用,集成了AJAX 1.0,包含AJAX项目模板,它还可以高效开发Office应用和Mobile 应用。
VS的开发界面分为两个版本:整合模式和孤立模式,分别对基于语言的开发和基于特别工具的开发作了优化。
【EasyX 】EasyX 是针对C++ 的图形库,可以帮助C 语言初学者快速上手图形和游戏编程。
许多学编程的都是从C 语言开始入门的,而目前的现状是:1. 有些学校以Turbo C 为环境讲C 语言,只是Turbo C 的环境实在太老了,复制粘贴都很不方便。
2. 有些学校直接拿VC 来讲C 语言,因为VC 的编辑和调试环境都很优秀,并且VC 有适合教学的免费版本。
可惜在VC 下只能做一些文字性的练习题,想画条直线画个圆都很难,还要注册窗口类、建消息循环等等,初学者会受严重打击的。
初学编程想要绘图就得用TC,很是无奈。
3. 还有计算机图形学,这门课程的重点是绘图算法,而不是Windows 编程。
所以,许多老师不得不用TC 教学,因为Windows 绘图太复杂了,会偏离教学的重点。
新的图形学的书有不少是用的OpenGL,可是门槛依然很高。
所以,于是就有了EasyX 库方便的开发平台和TC 简单的绘图功能。
2、设计【程序总体结构】:【界面设计】:界面的设计通过插入背景图片beijing.bmp , 在对每一个格子的赋图片,通过getimage( )从board.bmp中截下所需要的图,再利用putimage( )放置每一个小图。
具体算法:loadimage(&beijing,"D:\\llk\\beijing.bmp");//载入背景图putimage(0,0,&beijing);//放置背景图for(int i = 0 ;i < ROW; i ++)for(int j = 0 ;j < COL ; j++){idy = i * 54 + board_Y ,idx = j * 48+ board_X;putimage(idx,idy,&image[board[i + 1][j + 1]]); //根据赋的值放置每一个格子图}beijing.bmpboard.bmp【重要数据的数据结构设计】:struct BOARD //点击的格子信息{int tx,ty; //格子坐标int xx,yy; //屏幕坐标int data; //图片类型};定义BOARD型的结构体,里面包含的是鼠标点击以后,所读取的点击点在屏幕里的坐标(xx,yy)在二维数组里的坐标board[tx][ty],以及在给每一个二维数组元素赋的值data(用来判断两个格子是否相等,相等以后赋值为0,以便判断是否存在格子,为之后的寻找路径铺垫)int board[ROW + 2][COL + 2];二维数组,用来记录格子的信息,其值是判定是否有方块的标志。
MOUSEMSG mouse;鼠标的记录类型struct MOUSEMSG{UINT uMsg; // 当前鼠标消息bool mkCtrl; // Ctrl 键是否按下bool mkShift; // Shift 键是否按下bool mkLButton; // 鼠标左键是否按下bool mkMButton; // 鼠标中键是否按下bool mkRButton; // 鼠标右键是否按下int x; // 当前鼠标x 坐标(物理坐标)int y; // 当前鼠标y 坐标(物理坐标)int wheel; // 鼠标滚轮滚动值};#define board_X 140 //格子区距左边框距离#define board_Y 140 //格子呢区距上边框距离#define COL 10 //格子区列数#define ROW 6 //格子区行数#define board_number 15 //游戏图片数目【函数设计】:函数的功能列表:void Init(); //初始化界面void load_picture (); //加载图片void del(BOARD &rec); //每个格子赋值为void leftbottondown (MOUSEMSG mouse); //实现鼠标左击效果void frame (int leftx,int lefty); //画边框bool judge_mouse(int leftx,int lefty); //判断鼠标是否在游戏区void select(int leftx,int lefty); //显示选中效果void accurate(int& leftx,int& lefty); //使格子的坐标都在边缘void cover(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4); //覆盖直线void line(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4) ; //用直线连接void exchange(BOARD& pre,BOARD& cur); //交换格子信息bool click(int mousex,int mousey); //判断单击是否有效void record(int leftx,int lefty,BOARD &rec);//记录选中的格子void mouse_to_board(int mousex,int mousey,int *idx,int *idy);//鼠标的坐标转为格子的数组下标int findpath(BOARD &pre,BOARD &cur);//寻找路径,判断是否相等void progressbar();//画进度条void updateprogressbar(long t);//更新进度条因为有许多的函数是执行图像处理以及坐标转化的简单操作,这里画出包含关键算法的主要函数的流程图,其他的函数只做文字的描述介绍。
findpath(BOARD &pre,BOARD &cur)函数cover(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4)函数Init()函数load_picture ()函数:这是一个类似于初始图片的函数,利用loadimage ,SetWorkingImage,对含有格子图片信息的图进行分割读取,并存入image[]的IMAGE类型的数组里,同时还读入了填充背景的图(填充线条)。
del(BOARD &rec)函数:删除函数,将之前记录的鼠标信息全部赋值为0;leftbottondown (MOUSEMSG mouse)函数:记录鼠标的信息,如果鼠标是第一次点击的话,将其信息存入pre里,如果鼠标是第二次点击的话,将其存入cur里,通过findpath()函数来相消与否,如果能相消,则将鼠标点的两块区域覆盖,同时调用del 函数,来清除信息,在此过程中,根据统计剩余格子对数的变量counter,来给出分数(用s[]数组来存储分数信息,并在相应位置输出)。
frame (int leftx,int lefty)函数:根据导入的参数画一个格子边框。
judge_mouse(int leftx,int lefty)函数:判断鼠标的点击区域是否在规定的范围里。
select(int leftx,int lefty)函数:在鼠标点击选择以后,显示frame的效果,并记录数据。
accurate(int& leftx,int& lefty)函数:规范坐标的函数,鼠标点击的区域是在一个范围内的,此函数能把属于一个区域的坐标归整为统一的坐标。
line(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4) 函数:连线函数,通过导入的点的坐标来调用moveto,lineto函数画线。
exchange(BOARD& pre,BOARD& cur)函数:交换格子信息的函数,在点击2次后,发现两个格子并不能相消后,将pre取第二次点击的格子信息。
click(int mousex,int mousey)函数:判断点击的地方是不是有效,即已经被消去的格子,点击时,没有像有格子的地方一样会出现线框的情况。
record(int leftx,int lefty,BOARD &rec)函数:将鼠标的屏幕坐标转化并记录在BOARD类型的变量里。
mouse_to_board(int mousex,int mousey,int *idx,int *idy)函数:将鼠标的坐标转化为格子信息。
progressbar( )函数:画进度条,作矩形,并填充相应颜色。
updateprogressbar(long t)函数:进度条的更新函数,读取当前系统时间与游戏开始时系统时间的差,来画图覆盖进度条,从而达到进度条运动的效果。
【程序运行整体视图】3、源程序#include<stdio.h>#include<graphics.h>#include<conio.h>#include<time.h>#include<windows.h>#include<mmsystem.h>//播放音乐用的库#pragma comment(lib, "WINMM.LIB")//播放音乐用的库#define ture 1#define flase 0#define board_X 140 //格子区距左边框距离#define board_Y 140 //格子呢区距上边框距离#define COL 10 //格子区列数#define ROW 6 //格子区行数#define board_number 15 //游戏图片数目#define W 48 //格子的长#define H 54 //格子的宽#define N 555 //背景的宽#define M 797 //背景的长#define max(a,b) a>b?a:b#define min(a,b) a<b?a:b#define DGREE 2 //时间条的运动速度struct BOARD //点击的格子信息{int tx,ty; //格子坐标int xx,yy; //屏幕坐标int data; //图片类型}pre,cur,dur;IMAGE image[board_number+ 1]; //图片库IMAGE tianchong; //填充图片IMAGE tianchong1; //覆盖分数的图片IMAGE tianchong2; //覆盖分数的图片int board[ROW + 2][COL + 2]; //游戏图纸MOUSEMSG mouse;int counter=board_number*2;void Init(); //初始化界面void load_picture (); //加载图片void del(BOARD &rec); //每个格子赋值为void leftbottondown (MOUSEMSG mouse); //实现鼠标左击效果void frame (int leftx,int lefty); //画边框bool judge_mouse(int leftx,int lefty); //判断鼠标是否在游戏区void select(int leftx,int lefty); //显示选中效果void accurate(int& leftx,int& lefty); //使格子的坐标都在边缘void cover(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4); //覆盖直线void line(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4) ; //用直线连接void exchange(BOARD& pre,BOARD& cur); //交换格子信息bool click(int mousex,int mousey); //判断单击是否有效void record(int leftx,int lefty,BOARD &rec); //记录选中的格子void mouse_to_board(int mousex,int mousey,int *idx,int *idy); //鼠标的坐标转为格子的数组下标int findpath(BOARD &pre,BOARD &cur);//寻找路径,判断是否相等void progressbar();//画进度条void updateprogressbar(long t);//更新进度条int findpath(BOARD &pre,BOARD &cur){int i,j,path,min1,max1,min2,max2,left,right,top,bottom;int m,n;if (board[pre.ty][pre.tx]!= board[cur.ty][cur.tx]) //判断是否点中相同return false;min1=max1=pre.tx;min2=max2=cur.tx;while (min1-1>=0 && board[pre.ty][min1-1]==0) min1--;//查找水平方向公共区域while (min2-1>=0 && board[cur.ty][min2-1]==0) min2--;left=max(min1,min2); // 左边界while (max1+1<=11 && board[pre.ty][max1+1]==0) max1++;while (max2+1<=11 && board[cur.ty][max2+1]==0) max2++;right=min(max1,max2); // 右边界if (left==0){line(pre.tx,pre.ty,0,pre.ty,0,cur.ty,cur.tx,cur.ty);//左边缘连通Sleep(300);cover(pre.xx,pre.yy,board_X-48,pre.yy,board_X-48,cur.yy,cur.xx,cur.yy);//覆盖线条return true;}if (right==11){line(pre.tx,pre.ty,11,pre.ty,11,cur.ty,cur.tx,cur.ty);cover(pre.xx,pre.yy,board_X+480,pre.yy,board_X+480,cur.yy,cur.xx,cur.yy);//覆盖线条return true;}for (i=left;i<=right;i++){path=0;//记录竖直方向上的长度m=min(pre.ty,cur.ty);n=max(pre.ty,cur.ty);for (j=m+1;j<n;j++){path=path+board[j][i];if (path>0) break;}if (path==0){line(pre.tx,pre.ty,i,pre.ty,i,cur.ty,cur.tx,cur.ty);Sleep(300);cover(pre.xx,pre.yy,board_X+(i-1)*48,pre.yy,board_X+(i-1)*48,cur.yy,cur.xx,cur.yy);//覆盖线条return true;}}min1=max1=pre.ty;//查找垂直方向公共区域min2=max2=cur.ty;while (min1-1>=0 && board[min1-1][pre.tx]==0) min1--;while (min2-1>=0 && board[min2-1][cur.tx]==0) min2--;top=max(min1,min2);while (max1+1<=7 && board[max1+1][pre.tx]==0) max1++;while (max2+1<=7 && board[max2+1][cur.tx]==0) max2++;bottom=min(max1,max2);if (top==0){line(pre.tx,pre.ty,pre.tx,0,cur.tx,0,cur.tx,cur.ty);//同在顶端消除Sleep(300);cover(pre.xx,pre.yy,pre.xx,board_Y-54,cur.xx,board_Y-54,cur.xx,cur.yy);//覆盖线条return true;}if (bottom==7){line(pre.tx,pre.ty,pre.tx,7,cur.tx,7,cur.tx,cur.ty);Sleep(300);cover(pre.xx,pre.yy,pre.xx,board_Y+324,cur.xx,board_Y+324,cur.xx,cur.yy);//覆盖线条}for (j=top;j<=bottom;j++){path=0;//记录水平方向的长度m=min(pre.tx,cur.tx);n=max(pre.tx,cur.tx);for (i=m+1; i<n; i++){path+=board[j][i];if (path>0) break;}if (path==0){line(pre.tx,pre.ty,pre.tx,j,cur.tx,j,cur.tx,cur.ty);Sleep(300);cover(pre.xx,pre.yy,pre.xx,board_Y+(j-1)*54,cur.xx,board_Y+(j-1)*54,cur.xx,cur.yy);//覆盖线条return true;}}return false;}void Init() //初始化{int ix,iy,jx,jy,idx,idy,temp;srand((unsigned)time(NULL));load_picture();IMAGE beijing;for(int i= 0, x = 1; x <= ROW; ++x ){for( int y = 1; y <= COL; ++y ){board[x][y] = i++ % board_number + 1;}}loadimage(&beijing,"D:\\llk\\beijing.bmp");//载入背景图putimage(0,0,&beijing);//放置背景图getimage(&tianchong,3 * 48,2 *);getimage(&tianchong1,3 * 48,2 *);getimage(&tianchong,55);for( int k = 0; k <60; ++k ){ix = rand() % ROW + 1;iy = rand() % COL + 1;jx = rand() % ROW + 1;jy = rand() % COL + 1;if( board[ix][iy] != board[jx][jy]) //使数据打乱{temp= board[ix][iy];board[ix][iy] = board[jx][jy];board[jx][jy] =temp;}}for(int i = 0 ;i < ROW; i ++)for(int j = 0 ;j < COL ; j++){idy = i * 54 + board_Y ,idx = j * 48+ board_X;putimage(idx,idy,&image[board[i + 1][j + 1]]); //根据赋的值放置每一个格子图}setbkmode(TRANSPARENT);setfont(35, 0,"华文琥珀");setcolor(YELLOW);outtextxy(700, 100,"分数");outtextxy(700, 150,"000");}void load_picture(){IMAGE image1,background;loadimage(&image1,"D:\\llk\\board.bmp");SetWorkingImage(&image1);for(int i = 1 ;i <=board_number;i ++)getimage(&image[i],0,i * 54,48, 54);loadimage(&background,"IMAGE","bg");SetWorkingImage(&background);getimage(&tianchong,3 * 56,2 *);SetWorkingImage();putimage(0,0,&background);}void leftbottondown (MOUSEMSG mouse) //单击左键{static int click1 = 0,x,y;char s[3];int number,i;click1++;select(mouse.x,mouse.y); //显示选中效果if(click1 == 1){record(mouse.x,mouse.y,pre);}if(click1 == 2){mouse_to_board(mouse.x,mouse.y,&x,&y);if(x != pre.tx||y != pre.ty){record(mouse.x,mouse.y,cur);if(findpath(pre,cur)){board[pre.ty][pre.tx] = board[cur.ty][cur.tx] =0;putimage(pre.xx,pre.yy,&tianchong);putimage(cur.xx,cur.yy,&tianchong);del(pre);del(cur);click1 = 0;counter--;putimage(&tianchong1);number=20*(board_number*2-counter);for(i=2;i>=0;i--){s[i] = number % 10 + '0';number/= 10;}setbkmode(TRANSPARENT);setfont(35, 0,"华文琥珀");setcolor(YELLOW);outtextxy(700, 150,s);putimage(&tianchong2);}else{exchange(dur,pre);exchange(pre,cur);del(cur);click1 = 1;putimage(dur.xx,dur.yy,&image[board[dur.ty][dur.tx]]);}}else click1= 1;}}void select (int leftx,int lefty) //选中时效果{if(judge_mouse(leftx,lefty)){int x,y;mouse_to_board(leftx,lefty,&x,&y);accurate(leftx,lefty);frame(leftx,lefty);}}bool judge_mouse(int leftx,int lefty) //判断鼠标是否在游戏区{return leftx >board_X && leftx < board_X + W * COL &&lefty >board_Y && lefty < board_Y+ H * ROW;}void mouse_to_board(int mousex,int mousey ,int *x,int *y) //鼠标坐标转化为图纸坐标{if(judge_mouse(mousex,mousey)){*x = (mousex -board_X) / 48 + 1;*y = (mousey -board_Y) / 54 + 1 ;} }void record(int leftx,int lefty,BOARD &rec) //记录选中的信息{mouse_to_board(leftx,lefty,&rec.tx,&rec.ty);rec.xx = (rec.tx - 1) * 48 +board_X;rec.yy = (rec.ty - 1) * 54 +board_Y;rec.data = board[rec.ty][rec.tx];}bool click(int mousex,int mousey) //判断单击是否有效{int x,y;mouse_to_board(mousex,mousey,&x,&y); //转化为格子坐标if(judge_mouse(mouse.x,mouse.y) && board[y][x] != 0)return true;return false;}void frame(int leftx,int lefty) //画方框{setcolor(RGB());setlinestyle(PS_SOLID,3);rectangle(leftx,lefty,leftx+47,lefty+53);rectangle(leftx + 2,lefty + 2,leftx+47,lefty+53);setcolor(RGB());rectangle(leftx + 1,lefty + 1,leftx+48,lefty+54);}void accurate(int& leftx,int& lefty){leftx = ((leftx -board_X) / 48) *48 +board_X;lefty = ((lefty -board_Y) / 54) *54 +board_Y;}void exchange(BOARD &pre,BOARD &cur) //交换格子信息{pre.data = cur.data;pre.tx = cur.tx;pre.ty = cur.ty;pre.xx= cur.xx;pre.yy = cur.yy;}void del(BOARD &rec) //每个格子赋值为{rec.data = 0;rec.tx = 0;rec.ty = 0;rec.xx = 0;rec.yy = 0;}void line(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4){setlinestyle(PS_SOLID,NULL,3);setcolor(RGB());moveto(board_X+24+48*(x1-1),board_Y+27+54*(y1-1));lineto(board_X+24+48*(x2-1),board_Y+27+54*(y2-1));lineto(board_X+24+48*(x3-1),board_Y+27+54*(y3-1));lineto(board_X+24+48*(x4-1),board_Y+27+54*(y4-1));}void cover(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4) {int minx,miny,maxx,maxy;if(x1 == x2){maxy = y1 > y2? y1:y2;miny = y1 < y2? y1:y2;for(int i = miny; i <= maxy;i += 54)putimage(x1,i,&tianchong);}else if(y1 == y2){maxx = x1 > x2? x1:x2;minx = x1 < x2? x1:x2;for(int j = minx; j <= maxx;j += 48)putimage(j,y1,&tianchong);}if(x2 == x3){maxy = y2 > y3? y2:y3;miny = y2 < y3? y2:y3;for(int i = miny; i <= maxy;i += 54)putimage(x2,i,&tianchong);}else if(y2 == y3){maxx = x2 > x3? x2:x3;minx = x2 < x3? x2:x3;for(int j = minx; j <= maxx;j += 48)putimage(j,y2,&tianchong);}if(x3 == x4){maxy = y3 > y4? y3:y4;miny = y3 < y4? y3:y4;for(int i = miny; i <= maxy;i += 54)putimage(x3,i,&tianchong);}else if(y3 == y4){maxx = x3 > x4? x3:x4;minx = x3 < x4? x3:x4;for(int j = minx; j <= maxx;j += 48)putimage(j,y3,&tianchong);}}void progressbar()//进度条的初始化{setcolor(YELLOW);rectangle(5);setcolor(YELLOW);rectangle(2);setfillstyle(RED);floodfill(YELLOW);setfillstyle(RED);floodfill(YELLOW);}void updateprogressbar(long t)//进度条的更新{setcolor(WHITE);rectangle(524-DGREE*t);setfillstyle(WHITE);floodfill(525-DGREE*t,60,WHITE);}void main(){long t_base,t_run,t;IMAGE bye,fail;initgraph(M,N);Init();loadimage(&bye,"d:\\llk\\end.bmp");//成功时的图loadimage(&fail,"d:\\llk\\fail.bmp");//失败时的图PlaySound("d:\\llk\\sound.wav", NULL, SND_FILENAME | SND_ASYNC);//背景音乐progressbar();t_base= time(NULL);while(1){t_run=time(NULL);t=t_run-t_base;updateprogressbar(t);mouse = GetMouseMsg();switch(mouse.uMsg){case WM_MOUSEMOVE:break;case WM_LBUTTONDOWN:if(click(mouse.x,mouse.y)){leftbottondown(mouse);} break;default: break;}if(counter==0){putimage(0,0,&bye);}if((525-DGREE*t)<=150){putimage(0,0,&fail);}}closegraph(); }4、测试刚开始消去游戏进行中胜利的图案失败的图案。