毕业设计_c 连连看1

合集下载

连连看c课程设计

连连看c课程设计

连连看 c课程设计。

一、课程目标知识目标:1. 学生能理解并掌握连连看游戏的基本规则和策略。

2. 学生能运用所学知识,分析并解决连连看游戏中遇到的问题。

3. 学生了解连连看游戏背后的数学原理,如排列组合、概率等。

技能目标:1. 学生能运用计算机操作,熟练玩转连连看游戏。

2. 学生通过连连看游戏,培养逻辑思维能力和问题解决能力。

3. 学生学会与他人合作,进行游戏策略的交流与分享。

情感态度价值观目标:1. 学生在游戏中培养积极的学习态度,主动探索和发现新知识。

2. 学生树立正确的竞争意识,学会尊重对手,敢于面对挑战。

3. 学生通过团队合作,培养集体荣誉感,增强团队协作能力。

本课程旨在通过连连看游戏,将学科知识与实际操作相结合,提高学生的逻辑思维能力、问题解决能力和团队合作能力。

针对学生的年级特点,课程设计注重知识性、趣味性和实践性,使学生学以致用,激发学习兴趣,培养良好的学习习惯和价值观。

二、教学内容1. 连连看游戏规则与策略:介绍连连看游戏的基本规则,分析游戏策略,如消除顺序、路径选择等。

- 教材章节:第三章第二节“游戏的规则与策略”2. 连连看游戏中的数学原理:讲解排列组合、概率等数学知识在连连看游戏中的应用。

- 教材章节:第四章第一节“排列组合与概率”3. 计算机操作与连连看游戏:教授如何使用计算机进行连连看游戏,包括游戏界面的认识、操作方法等。

- 教材章节:第二章第二节“计算机游戏操作基础”4. 逻辑思维与问题解决:通过连连看游戏,培养学生逻辑思维能力和问题解决能力。

- 教材章节:第五章第三节“逻辑思维与问题解决方法”5. 团队合作与交流分享:组织学生进行连连看游戏比赛,培养团队合作精神,并进行游戏策略的交流与分享。

- 教材章节:第六章第一节“团队合作与交流”教学内容按照教学大纲进行安排,共计5个课时。

第一、二课时讲解连连看游戏规则与策略,第三课时介绍数学原理在游戏中的应用,第四课时教授计算机操作,第五课时进行团队合作与交流分享。

(完整版)连连看C语言毕业课程设计报告

(完整版)连连看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 的环境实在太老了,复制粘贴都很不方便。

连连看游戏设计与实现毕业设计实现

连连看游戏设计与实现毕业设计实现

连连看游戏设计与实现摘要“连连看”游戏是一款常见游戏。

游戏速度节奏快,画面清晰可爱,适合大众玩家。

本文主要介绍了游戏的设计过程,其中游戏主要分为4个模块,游戏界面模块、图片随机生成模块、图片消除路径判断、背景音乐模块。

游戏核心模块中图片随机生成采用了数字和图片绑定,运用随机函数以及数组交换的算法,实现了游戏图片初始化状态,有效的解决了图片排布问题,方案简单易行;另一核心模块图片消除路径判断,主要采用了分类判断的算法,将连连看图片的位置一一归类,分类设计函数判断位置,实现游戏的基本消除功能。

算法思路清晰,便于理解和编码。

本游戏实现了连连看的基本功能,可以准确的消除图片、记录分数、提示时间,同时设计了人性化的提示,解决僵局的功能,创新实现了新的连连看规则——消除图片后给予时间奖励,激发了玩家的积极性。

关键词:QT;连连看;算法;数组Link Game Design and ImplementationAbstractLinkgame is a common game. The game has fast-pacedspeed and the cute picture That is fit for public players . This paper describes the design process of the game , where the game is divided into four modules, the game interface module , the module of randomly generated pictures , eliminating path judgment , background music modules.Game Core module, the module of randomly generated pictures ,bind pictures and images, use the random function and a arrayexchange algorithm, and achieve game picture initialization state , effectively solve the problem of picture arrangement , the plan is simple ; another core module pictures ,eliminate path judgment , mainly uses classification algorithms to determine the location oflinkgame picture and classify it , classification functions judge the location,and realize the basic function of the game cancellation . Algorithm is clear, easy to understand and encoding.The game realize the basic function of linkgame, it can eliminate the exact picture , recording scores , suggesting that time ,and design humane tips ,the function of solving the deadlock .It achieves new rules -- after elimination of the picture you can be given time bonus .That is stimulating the enthusiasm of the players .Keywords:QT; Link; algorithm; Array目录摘要 (I)ABSTRACT ...................................................................................................................... I I 目录 .. (1)1. 绪论 (1)1.1游戏简介 (1)1.1.1 游戏背景 (1)1.1.2 游戏规则 (1)1.2游戏功能 (1)1.2.1 美观大气的界面 (1)1.2.2 背景音乐的添加 (1)1.2.3 奖励时间的设置 (1)1.2.4 提示功能 (1)1.2.5 僵局的重置 (1)1.2.6 得分记录、难度 (2)1.2.7 开始、重新开始、退出 (2)1.3游戏设计的主要工作 (2)1.3.1 游戏设计需要解决的问题 (2)1.3.2 游戏设计需要使用的算法 (2)1.3.3 游戏设计创新点 (2)2. 系统分析 (4)2.1技术可行性分析 (4)2.1.1 算法分析 (4)2.1.2 开发语言分析 (12)2.1.3 开发平台分析 (14)2.2需求分析 (16)2.2.1 环境分析 (16)2.2.2功能需求分析 (16)2.2.3性能需求 (17)2.2.4可靠性和可用性需求 (17)3. 游戏概要设计 (18)3.1任务概述 (18)3.1.1 目标 (18)3.1.2 需求概述 (18)3.2总体设计 (18)3.2.1 处理流程 (18)3.2.2 系统结构图 (18)3.2.3 游戏界面模块设计 (19)3.2.4 图片的随机生成 (19)3.2.5 图片消除路径判断 (19)3.2.6 背景音乐的模块 (21)4. 详细设计 (23)4.1视图层设计 (23)4.1.1 界面效果图,如图4-1 (23)4.1.2 思路 (23)4.2逻辑层设计 (23)4.2.1 图片偶数对存放以及随机生成 (23)4.2.2 图片消除路径判断详细设计 (25)4.3其他控件的设计实现 (31)4.3.1 重排按钮实现 (31)4.3.2 提示按钮实现 (32)4.3.3 奖励时间和进度条的逻辑实现 (34)4.3.4 音乐模块实现 (36)5. 游戏测试 (37)5.1软件测试 (37)5.1.1软件测试简介 (37)5.1.2测试方法 (37)5.1.3测试步骤 (38)5.2连连看游戏系统测试 (38)5.3游戏系统性能分析 (39)结论 (39)致谢 (40)参考文献 (41)外文原文 (42)中文翻译 (48)1. 绪论1.1 游戏简介1.1.1 游戏背景连连看游戏是游戏中经典中的经典,曾经风靡网络,无论是单机版的还是网络对战的,它以简单,容易上手,图片新颖的特点获得了大量的粉丝,它是一款经久不衰的休闲小游戏,适合闲来无事的大众,以供消遣。

《连连看》算法c语言演示(自动连连看)

《连连看》算法c语言演示(自动连连看)

《连连看》算法c语⾔演⽰(⾃动连连看)(图⽚是游戏的⽰意图,来⾃互联⽹,与本⽂程序⽆关)看题⽬就知道是写给初学者的,没需要的就别看了,⾃⼰都觉得怪⽆聊的。

很多游戏的耐玩性都来⾃精巧的算法,特别是⼈⼯智能的⽔平。

⽐如前⼏天看了著名的Alpha GO的算法,⽤了复杂的⼈⼯智能⽹络。

⽽最简单的,可能就是连连看了,所以很多⽼师留作业,直接就是实现连连看。

连连看游戏的规则⾮常简单:1. 两个图⽚相同。

2. 两个图⽚之间,沿着相邻的格⼦画线,中间不能有障碍物。

3. 画线中间最多允许2个转折。

所以算法主要是这样⼏部分:1. ⽤数据结构描述图板。

很简单,⼀个2维的整数数组,数组的值就是图⽚的标志,相同的数字表⽰相同的图⽚。

有⼀个⼩的重点就是,有些连连看的地图中,允许在边界的两个图⽚,从地图外连线消除。

这种情况⼀般需要建⽴的图板尺⼨,⽐实际显⽰的图板,周边⼤⼀个格⼦,从⽽描述可以连线的空⽩外边界。

本例中只是简单的使⽤完整的图板,不允许利⽤边界外连线。

2. ⽣成图板。

通常⽤随机数产⽣图⽚ID来填充图板就好。

⽐较复杂的游戏,会有多种的布局⽅式,例如两个三⾓形。

这种⼀般要⼿⼯编辑图板模板,在允许填充的区域事先⽤某个特定的整数值来标注,随后的随机数填充只填充允许填充的区域。

本例中只是简单的随机填充。

3. 检查连线中的障碍物。

确定有障碍物的关键在于确定什么样的格⼦是空。

通常定义格⼦的值为0就算空。

要求所有的图⽚ID从1开始顺序编码。

复杂的游戏还会定义负数作为特定的标志,⽐如允许填充区之类的。

4. 检查直接连接:两张图⽚的坐标,必然x轴或者y轴有⼀项相同,表⽰两张图⽚在x轴或者y轴的同⼀条线上才可能出现直接连接。

随后循环检查两者之间是否有障碍物即可确定。

5. 检查⼀折连接:与检查直接连接相反,两个图⽚必须不在⼀条直线上,才可能出现⼀折连接,也就是x/y必须都不相同。

随后以两张图⽚坐标,可以形成⼀个矩阵,矩阵的⼀对对⾓是两张图⽚,假设是A/B两点。

【精品完整版】毕业设计(论文)报告连连看游戏的设计与实现

【精品完整版】毕业设计(论文)报告连连看游戏的设计与实现

毕业设计(论文)报告系别计算机科学技术专业计算机应用班级姓名学号设计(论文)题目连连看游戏的设计与实现指导教师起迄日期连连看游戏的设计与实现摘要本文用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 课程设计_连连看1

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  课程设计_连连看游戏

课程设计报告课程名称:面向对象程序设计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语言实现数字连连看

C语言实现数字连连看

C语⾔实现数字连连看本⽂实例为⼤家分享了C语⾔实现数字连连看的具体代码,供⼤家参考,具体内容如下要求连连看⼩游戏开发,使⽤⼆维数组来保存游戏地图的数据,实现连连看的核⼼功能。

欢乐连连看的功能有:主界⾯、开始游戏、消⼦、判断胜负、提⽰、重排、计时、游戏模式。

主界⾯游戏主界⾯就是进⾏各项操作的⼊⼝。

开始游戏玩家选择开始游戏模式,进⼊游戏后,选择开始游戏,系统根据设置随机⽣成数字,以供玩家点击消除。

消⼦对玩家选中的两张图⽚进⾏判断,判断是否符合消除规则。

只有符合以下规则的图⽚对才能被消除:⼀条直线连通两条直线连通三条直线连通如果可以消除,两个数字变为0。

如果不能消除,则保持原来的游戏地图。

判断胜负当游戏完成后,需要判断游戏胜负。

不同模式下判断胜负的规则不同。

基本模式时,如果在五分钟内将游戏地图的所有图⽚都消除,则提⽰玩家胜利。

休闲模式时,如果游戏地图中所有图⽚都被消除,则提⽰玩家获胜。

提⽰可以提⽰界⾯上能够消除的⼀对图⽚。

计时设定⼀定时间来辅助游戏是否结束。

游戏模式游戏模式有:基本模式、休闲模式和关卡模式三种,可以根据是否定时等规则进⾏设置。

代码#include <stdio.h>#include <stdlib.h>#include <time.h>#define WIDTH 10#define HEIGHT 12int datas[HEIGHT][WIDTH] = {0};int Choose_type ();void Creat_datas (int fol);bool IsHLinked(int x1,int y1,int x2,int y2);bool IsVLinked(int x1,int y1,int x2,int y2);bool IsZeroTurnLinked(int x1,int y1,int x2, int y2); //⼀条线bool IsOneTurnLinked(int x1, int y1, int x2,int y2); //⼆条线bool IsTwoTurnLinked(int x1,int y1,int x2,int y2); //三条线bool Judge_Answer (int x1,int y1,int x2,int y2); //判断是否可消去void Print_datas ();bool Play_Game (int Flo);bool Relax_Play ();//休闲bool Win_Play ();//闯关int main(){int Flo;Flo = Choose_type (); // choose the typeif (Flo == 0) return 0;srand(unsigned(time(NULL)));Creat_datas(Flo); //creat the graphPrint_datas ();bool ov;ov = Play_Game (Flo);if (ov == true){printf ("VICTORY");}else{printf ("FAILED");}return 0;}bool Basic_Play (){long int t1 ,t2 = 0 ;int op = 1;int x1,y1,x2,y2;bool ANS;printf ("五分钟计时开始\n");t1 = clock();while (t2 < 300000 && !Isblank() && op != 0 ){if (op == 1){Print_datas ();printf("请输⼊两者的坐标[x1 y1 x2 y2]:"); //从上到下,从左到右,先⾏后列 scanf("%d %d %d %d",&x1,&y1,&x2,&y2);if (Judge_Answer (x1, y1, x2,y2)){datas[x1][y1] = datas[x2][y2] = 0;Print_datas ();}else{printf("错误");}}if (op == 2){ANS = Help_ans ();Print_datas ();if (ANS == false){printf ("已没有可以消去的\n");return true;}}printf("是否继续游戏 1、YES 0、NO 2、HELP:");scanf ("%d",&op);t2 = clock() - t1;}if (t2 > 299){printf ("超时\n");return false;}if (Isblank()) return true;else return false;}bool Help_ans (){int k;for (int i = 1; i < 11;i++){if (datas[i][j] != 0){k = j+1;for (int m = i; m < 11;m++){for (int n = k; n < 9;n++){if (datas[i][j] == datas[m][n]){if (Judge_Answer(i,j,m,n)){printf ("(%d,%d) (%d,%d)\n",i,j,m,n);datas[i][j] = datas[m][n] = 0;return true;}}}k = 1;}}}}return false;}bool Relax_Play (){int op = 1;int x1,y1,x2,y2;bool ANS;while (!Isblank() && op != 0) //G isn't blank{if (op == 1){Print_datas ();printf("请输⼊两者的坐标[x1 y1 x2 y2]:");scanf("%d %d %d %d",&x1,&y1,&x2,&y2);if (Judge_Answer (x1, y1, x2,y2)){datas[x1][y1] = datas[x2][y2] = 0;Print_datas ();}else{printf("错误");}}if (op == 2){ANS = Help_ans ();Print_datas ();if (ANS == false){printf ("已没有可以消去的\n");return true;}}printf("是否继续游戏 1、YES 0、NO 2、HELP:"); scanf ("%d",&op);}if (!Isblank()) return false;else return true;}bool Win_Play (){int op = 1;int x1,y1,x2,y2;bool ANS;while (!Isblank() && op != 0) //G isn't blank{if (op == 1){Print_datas ();if (Judge_Answer (x1, y1, x2,y2)){datas[x1][y1] = datas[x2][y2] = 0;Print_datas ();}else{printf("错误");}}printf("是否继续游戏 1、YES 0、NO :");scanf ("%d",&op);}if (!Isblank() && Help_ans) return false;elsereturn true ;}bool Isblank (){for(int j=1; j < 10 ; j++){for (int i= 1; i< 8 ; i++){if (datas[j][i] != 0) return false;}}return true;}bool Play_Game (int Flo){bool Ans;if (Flo == 1) //the basic type{printf ("基本模式:\n");Ans = Basic_Play ();return Ans;}if (Flo == 2) //the relax type{printf ("休闲模式:\n");Ans = Relax_Play ();return Ans;}else //the win type{printf ("第%d关游戏:\n",Flo - 2);Ans = Win_Play ();return Ans;}}void Print_datas (){for(int j=1; j < 11 ; j++){printf("\t\t");for (int i= 1; i< 9 ; i++){printf("%d\t",datas[j][i]);}printf("\n");}}bool Judge_Answer (int x1,int y1,int x2,int y2){if (datas [x1][y1] != datas[x2][y2] || datas [x1][y1] == 0 || datas [x2][y2] == 0 ) return false; if (x1 == x2 && y1 == y2) return false;if (x1 > 11 || x2 > 11 || y1> 9 || y2 > 9) return false;if (x1 == x2 || y1 == y2){if (IsZeroTurnLinked(x1,y1,x2,y2) || IsTwoTurnLinked(x1,y1,x2,y2)) return true;}return false;}int Choose_type (){printf("请选择你要进⾏的操作:1,开始游戏 2,结束游戏\n");int op;scanf("%d",&op);if (op == 1){printf("\n请选择游戏模式:1、基本模式 2、休闲模式 3、关卡模式\n"); int ops;scanf ("%d",&ops);if (ops == 1) return 1;if (ops == 2) return 2;if (ops == 3){printf("\n请选择你选择的关卡3-16:");int opsd;scanf ("%d",&opsd);return opsd;}}if (op == 2) return 0;}void Creat_datas (int fol){int tmpDatas[80] = {0}; // 定义⼀个临时数组⽤于存放int PicNum[] = {3,4,5,1,2,7,9,6,8,44,78,12,90,33,34};int Count = 0,i, j, d = 0,Pic,tem,t;Pic = 8 * 10 / (fol + 9 );for(j=0; j < 80 ; j++){tmpDatas[j] = PicNum[d];Count++;if (Count == Pic ){d++;Count = 0;}}d = 80;for(j=1;j < HEIGHT - 1;j++)for (i = 1;i < WIDTH - 1; i++){t = rand() % d; //Fisher-Yates Shuffletem = tmpDatas[t];tmpDatas[t] = tmpDatas[d -1];tmpDatas[d - 1] = tem;datas[j][i] = tmpDatas[d -1];d--;}}bool IsHLinked(int x1,int y1,int x2,int y2) //横向是否连接{int minY,maxY;if (x1 != x2) return false;if (y1 < y2){minY = y1;maxY = y2;}else{minY = y2;maxY = y1;}if (maxY - minY == 1) return true;for ( int i = minY +1; i < maxY ; i++) //从左到右检查中间的点是不是空的 {if (datas[x1][i] != 0) return false;bool IsVLinked(int x1,int y1,int x2,int y2) //纵向是否连接{int minX,maxX;if (y1 != y2) return false;if (x1 < x2){minX = x1;maxX = x2;}else{minX = x2;maxX = x1;}if (maxX - minX == 1) return true;for ( int i = minX +1; i < maxX ; i++){if (datas[i][y1] != 0) return false;}return true;}bool IsZeroTurnLinked(int x1,int y1,int x2, int y2) //不转折时判断{if (IsHLinked(x1, y1, x2,y2)){return true ;}if (IsVLinked(x1, y1, x2, y2)){return true ;}return false;}bool IsOneTurnLinked(int x1, int y1, int x2,int y2) //转折⼀次{int tmpX[2] = { x1, x2 };int tmpY[2] = { y2, y1 };for (int i = 0; i < 2; i++){if (datas[tmpX[i]][tmpY[i]] != 0) continue;if (IsZeroTurnLinked( tmpX[i], tmpY[i], x1, y1) && IsZeroTurnLinked( tmpX[i], tmpY[i], x2,y2)){return true;}}return false;}bool IsTwoTurnLinked(int x1,int y1,int x2,int y2){int j, tmpX1,tmpY1,tmpX2,tmpY2;//纵向遍历所有点tmpX1 = x1;for ( j = 0; j < WIDTH; j++){tmpY1 = j;if (j == y1) continue;if (tmpX1 == x2 && tmpY1 == y2) continue; //重合tmpX2 = x2;tmpY2 = tmpY1;if (datas[tmpX1][tmpY1] != 0 || datas[tmpX2][tmpY2] != 0) continue;if (IsZeroTurnLinked(tmpX1, tmpY1, tmpX2, tmpY2) && IsZeroTurnLinked(tmpX1, tmpY1, x1, y1) && IsZeroTurnLinked(tmpX2, tmpY2, x2, y2)) return true;}//横向遍历所有点tmpY1 = y1;for ( j = 0; j < HEIGHT; j++)if (j == x1) continue;if (tmpY1 == y2 && tmpX1 == x2) continue; //重合tmpY2 = y2;tmpX2 = tmpX1;if (datas[tmpX1][tmpY1] != 0 || datas[tmpX2][tmpY2] != 0) continue;if (IsZeroTurnLinked(tmpX1, tmpY1, tmpX2, tmpY2) && IsZeroTurnLinked(tmpX1, tmpY1, x1, y1) && IsZeroTurnLinked(tmpX2, tmpY2, x2, y2)) {return true;}}return false;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告课程名称:面向对象程序设计C++设计题目:连连看专业:计算机科学与技术姓名:学号:指导教师:李晓虹2015 年 12 月 10 日摘要在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生活不可或缺的一部分,越来越多的人使用计算机办公、娱乐、购物等等。

游戏行业发展一日千里,该行业极大的影响和改变了人们的生活和娱乐方式,游戏为消费者提供丰富多彩的虚拟空间,使消费者可以自由自在的享受虚拟世界的乐趣,实现自己在现实生活着那个可能永远不能实现的梦想,满足了消费者的心理和精神需求。

连连看游戏是一款很流行的小游戏,有的是连水果图片,有的是连麻将牌,有的是连各种小图片的等等。

各种图片让人看得眼花缭乱,这也可以锻炼人的反应能力和眼力,所以这款小游戏受到了越来越多人的喜爱,尤其是小孩子的喜爱。

连连看游戏也是比较经典的一款小游戏,实现它的方法很多,可以用很多不同算法设计和语言实现,如C,C#,C++,VB,JAVA等。

在本课程设计中我是利用C++语言编写,开发平台是Microsoft Visual Studio 2010,功能较为简单,寓学于乐。

程序的功能是通过找出游戏中两个相同图案的小方块,然后分别点击两个小方块将其消除;可通过倒计时的方式控制游戏时间,游戏时间到或者没有匹配的图案时则游戏结束,需要重新开局,每一局开始倒计时都重新开始;能够响应鼠标事件。

论文首先介绍了进行该游戏课程设计的目的,然后是任务描述和设计的相关要求,最后是最重要的需求分析和设计方案。

重点介绍了在游戏过程中各种事件的处理,其中又以鼠标事件的处理最为最要,鼠标事件是利用鼠标所发出的信息了解用户的意图,进而做出相对应的动作,消除需要消除的小方块。

关键词:连连看游戏;算法设计;事件;C++,Microsoft Visual Studio 2010第一章系统需求分析1.1 功能分析每次用户选择两个相同的小方块,如果小方块满足一定条件(这两个小方块之间存在转弯少于3的路径),则两个小方块可以消掉,给定任意具有相同图案的两个小方块,用户需要寻找这两个小方块之间在转弯最少的情况下,如果这个最优路径的转弯数目小于3,则这两个小方块可以消掉。

所以,主要需要解决的问题就是怎么样得出相同小方块之间的最优路径,这个最优路径首先需要保证转弯数目最少。

游戏开始时,系统会在游戏区域中随机布下12*7个不同图案的小方块。

第一次使用鼠标点击游戏界面中的小方块,该小方块此时为"被选中"状态,再次用鼠标点击其他小方块,若该小方块与被选中的小方块图案相同,且把第一个小方块到第二个小方块连起来,连线的路径中间的直线不超过3根(最多两次转弯),则消掉这一对小方块,否则第一个小方块恢复成未被选中状态,而第二个小方块变成“被选中”状态。

每次消除一对小方块会增加一定的时间。

胜利条件:将游戏区域上的小方块全部消除掉且时间未消耗完。

失败条件:时间消耗完,或者剩下的小方块没有路径能够匹配(即界面上的小方块仍未全部消掉)。

1.2 功能需求(1)游戏界面大致分为两大区,左边为游戏操作区,右边是设置区;(2)本游戏功能较为简单,只具有连连看游戏的基本功能(计时器、积分器、暂停/重新开始、重列),默认的图案种类数是12种,重复数每种图案为7对;(3)游戏操作区是系统自动排列的默认的12*7个小方块,用户可以点击小方块来消除具有相同图案的小方块;(4)设置区中显示当前游戏的种类数、重复数、“开始游戏”按钮、“重列”按钮、“暂停/重新开始”按钮和得分情况;(5)在游戏操作区的下方显示有“剩余时间”的进度条,当进度条的时间耗完时,则游戏结束。

1.3 功能模块本游戏主要细分为以下几大模块:(1)游戏主界面以Microsoft Visual Studio 2010为开发平台设计主界面,主要控件有1个主窗体Form、1个groupbox、1个progressbar、4个button、7个label。

(2)随机排列小方块。

(3)鼠标事件。

(4)小方块消除判断。

(5)游戏难度设置本游戏没有用户自定义游戏难度选择,而是使用默认的图案种类数是12种,每种图案的重复数是7对,所以游戏的灵活性较差。

(6)游戏重列对本局游戏中剩下的小方块重新排列,计时器不会暂停。

此模块的主要作用就是在用户自身不能找到能够消掉的小方块的情况下,通过重列剩下的小方块来产生新的路径,使游戏能够继续玩下去。

(7)暂停/重新开始,点击“暂停”按钮能够使当前正在运行的游戏暂时停止,主要是使让时间停止,不再倒计时;游戏暂停时鼠标不能对游戏操作区域进行操作,此时“暂停”按钮变成“重新开始”按钮,用户只要点击“重新开始”按钮即可继续游戏操作。

(8)游戏胜利(游戏结束,需要重新开始游戏)。

(9)游戏失败(游戏结束,需要重新开始游戏)。

1.4 系统需求分析总结本系统的结构基本合理,系统功能也基本能够达到连连看游戏的要求,采用了最基本的最短路径优先的算法,使系统地运行效率达到最高。

本系统的输入边界是用户进行的鼠标事件操作和对游戏的复杂程度进行设置;输出边界是游戏结束,游戏胜利或者游戏失败。

通过对连连看游戏规则以及相关算法的分析,本系统总的数据量较小,规模不是很大,适合于在普通微机或小型机上运行。

第二章总体设计2.1 系统基本功能本系统与我们常玩的连连看游戏相比较为简单,只具有连连看游戏的基本功能,逻辑设计方面也只有简单的“开始游戏”、“重列”、图案“种类数”和“重复数”的设定、剩余时间和暂停/重新开始。

开始游戏:初始化游戏区域,随机排列小方块。

重列:对正在进行的游戏中剩余的小方块重新排列。

种类数:本游戏固定图案种类是12种。

重复数:每种图案的重复次数是7次,也就是7对。

剩余时间:计时器,通过显示时间进度的方式对游戏进行倒计时。

暂停/重新开始:暂停正在运行的游戏,游戏暂停后也可以重新开始(继续本局游戏)。

系统基本功能如图2-1所示图 2-1 系统基本功能图图2-1是连连看游戏的系统基本功能图,从图中可以看出系统主要分为六大功能,即开始游戏、重列、种类数、重复数、剩余时间和暂停/重新开始的设置。

2.2 系统流程系统流程是对系统进行大概分析后得出的系统各功能的流动情况以及各个操作之间的关系,上一步操作都与下一步操作有着紧密的联系,即下一步操作都是由上一步操作所决定的。

系统流程主要是对系统流程图的分析,系统流程图清晰的地反映出了系统的运行情况和走向。

(1)鼠标事件具体流程图如图2-2所示束。

图 2-2 鼠标事件具体流程图图2-2是鼠标事件的具体流程图,在连连看游戏中,鼠标事件是很重要的一部分,因为基本都是考鼠标去操作的,所以鼠标事件的控制就非常重要了;上图就是鼠标在游戏过程中的具体判断过程,主要是两个相同小方块之间路径的判断,分为一条直线(没有转弯)、两条直线(一个转弯)、三条直线(两个转弯)。

(2)系统详细运行流程如图2-3所示图 2-3 运行流程图图2-3是游戏详细的运行流程图,图中清晰地描述了系统的执行过程,即根据不同的事件,游戏状态的转换。

过程为:游戏开始,等待事件,发出鼠标事件,根据用户发出的鼠标命令,然后进行各种判断,系统分别作出不同的反应。

2.3 主要功能模块本游戏主要细分为以下几大模块:Private void Form1_MouseDown(object sender, MouseEventArgs e)//最重要的鼠标事件Private void ProcessCorner(Point p1, Point p2)//此方法做处理画线和消除Private void button1_Click_1(object sender, EventArgs e) //开始游戏按钮Private void button2_Click(object sender, EventArgs e) //重列按钮Private void button3_Click(object sender, EventArgs e) //暂停/重新开始按钮Private void pbtimer_Tick(object sender, EventArgs e) //计时器操作,判断游戏是否失败Public bool IsDirectLink(int x1, int y1, int x2, int y2) //判断两个小方块是否为直连关系,即判断两个小方块之间是否能用一条之间连接(没有转弯)Public bool IndirectLink(int x1, int y1, int x2, int y2)//处理直连以外的情况,即一个转弯和两个转弯的情况游戏)。

第三章详细设计3.1 详细设计总体设计是对整个系统的结构化和模块化设计,包括各功能模块的设计和各个功能函数的说明。

详细设计则是对各个类和功能函数进行具体的定义和实施。

下面是对系统中几个较为重要的函数进行描述。

在总体设计中提到过要想消掉两个小方块,可以分为三种情况,下面就是三种情况的详细解释。

3.2 规则设计1、两个相同的小方块相邻,则可以直接消掉。

2、若不相邻的先在第一个小方块的同一行中找一个空方块;1)找到后看第二个小方块横向到这个空方块所在的列是否有小方块;2)没有的话再看第一个小方块到与它同行的那个空方块之间是否有小方块;3)如果还是没有的话,再从与第一个小方块同行的那个空方块竖向到与第二个小方块的同行看是否有其他的小方块。

没有的话路经就是通了,则可以将两个小方块消掉。

3、若上述2失败后,再在第一个小方块的同列找一个空方块;1)找到后看第二个小方块竖向到这个空方块所在的行是否有小方块;2)没有的话,再看第一个小方块到与它同列的那个空方块之间是否有小方块;3)如果还是没有的话,再从与第一个小方块同列的那个空方块横向到与第二个小方块同列看是否有其他的小方块。

没有的话路经就是通了,则可以将两个小方块消掉。

如果以上三步都失败,说明这两个按钮不可以消掉。

两个小方块能够相连并消掉的所有情况如图3-1所示图 3-1 运行流程图(1)两个小方块相邻,可以直接消掉;(2)两个小方块在同一行上面且不相邻,但中间没有其他方块阻挡;(3)两个小方块在同一行上,但中间有其他图案的小方块阻隔;(4)两个小方块在同一列,但中间有其他图案的小方块阻隔;(5)两个小方块既不在同一行也不在同一列,用三条直线连接(因为第一个小方块的右边可能有其他小方块阻隔);(6)两个小方块既不在同一行也不在同一列,用两条直线连接(第一个小方块的某一方正好可以连接到第二个小方块);(7)两个小方块既不在同一行也不在同一列,用三条直线连接(系统自动检测,连线从第一个小方块的空闲的一面引出。

3.3 部分代码本游戏部分代码如下:(1).全局定义:HBITMAP hbmp;HBITMAP fullmap;HBITMAP animal;HDC mdc;int map[84];int x,y;int row=7,col=12;int begin=0;(2).void change(int num[ ] )函数,用于重新随机排列数组num[ ]中的数值void change(int num[]){int i,temp,p;for(i=0;i<21;i++){p=rand()%21;temp=num[i];num[i]=num[p];num[p]=temp;}(3).void StartGame(HDC hdc)函数,用于绘制界面void StartGame(HDC hdc){ int i,j,k=0,num[21],n=0;HDC buff;buff=CreateCompatibleDC(hdc);fullmap=CreateCompatibleBitmap(hdc,480,350);SelectObject(mdc,fullmap);hbmp=(HBITMAP)LoadImage(NULL,"3DFrames.bmp",IMAGE_BITMAP,46,392,LR_LOADFROMFILE) ;SelectObject(buff,hbmp);for( i=0;i<12;i++)for(j=0;j<7;j++){BitBlt(mdc,i*40,j*50,46,56,buff,0,56,SRCCOPY);}BitBlt(hdc,0,0,480,350,mdc,0,0,SRCCOPY);animal=(HBITMAP)LoadImage(NULL,"animal.bmp",IMAGE_BITMAP,78,1638,LR_LOADFROMFILE); SelectObject(mdc,animal);if(begin==0){for(i=0;i<21;i++){num[i]=rand()%42;}for(i=0;i<84;i++)map[i]=-1;for(i=0;i<7;i++)for(j=0;j<12;j++){if(k==21){change(num);k=0;}map[n]=num[k];n++;k++;}}k=0;for(i=0;i<7;i++)for(j=0;j<12;j++){BitBlt(hdc,j*40,i*50+5,39,39,mdc,39,map[k]*39,SRCAND);BitBlt(hdc,j*40,i*50+5,39,39,mdc,0,map[k]*39,SRCPAINT);k++;}}图 3-2 代码图第四章系统调试4.1 系统调试系统调试是对整个系统的相应程序问题进行调试,包括功能模块的调试和各个整体系统的调试。

相关文档
最新文档