毕业设计_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;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

连连看c课程设计

连连看c课程设计

连连看 c课程设计一、教学目标本课程的教学目标是使学生掌握连连看游戏的设计与实现,包括算法分析、界面设计、编程实现等。

知识目标要求学生了解连连看游戏的规则,掌握常用的算法,如深度优先搜索、广度优先搜索等。

技能目标要求学生能够使用编程语言实现连连看游戏,提高编程能力和问题解决能力。

情感态度价值观目标在于培养学生的团队合作意识和创新精神,通过小组合作完成游戏设计,提高沟通协作能力。

二、教学内容本课程的教学内容主要包括连连看游戏规则介绍、算法分析、界面设计、编程实现和团队协作。

具体包括以下几个部分:1.连连看游戏规则介绍:介绍连连看游戏的规则,让学生了解游戏的基本玩法。

2.算法分析:讲解如何使用深度优先搜索、广度优先搜索等算法解决连连看游戏中的问题。

3.界面设计:教授如何设计连连看游戏的界面,包括游戏区域、提示框、菜单等。

4.编程实现:指导学生使用编程语言实现连连看游戏,包括算法实现、界面绘制等。

5.团队协作:讲解如何进行小组合作,分工完成游戏设计,提高团队合作能力。

三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性。

包括:1.讲授法:讲解连连看游戏规则、算法分析、界面设计等理论知识。

2.案例分析法:分析经典连连看游戏案例,引导学生思考并解决问题。

3.实验法:让学生动手实践,编写代码实现连连看游戏。

4.讨论法:学生进行小组讨论,分享设计思路,互相学习。

四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将提供以下教学资源:1.教材:提供专门的教材,介绍连连看游戏的设计与实现方法。

2.参考书:推荐学生阅读相关编程书籍,加深对编程语言和算法的理解。

3.多媒体资料:制作PPT、视频等多媒体资料,帮助学生更好地理解课程内容。

4.实验设备:提供计算机、编程环境等实验设备,让学生能够动手实践。

五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分,以全面反映学生的学习成果。

平时表现占30%,主要评估学生在课堂上的参与度、提问回答和小组讨论等;作业占30%,主要评估学生的编程实践能力;考试占40%,包括理论知识考试和实际编程考试,以评估学生对课程内容的掌握程度。

毕业设计_c 连连看游戏1

毕业设计_c  连连看游戏1

课程设计报告课程名称:面向对象程序设计C++设计题目:连连看游戏专业:计算机科学与技术姓名:学号:指导教师:李晓虹2016 年 1 月7 日第一章系统需求分析相信大多数玩过QQ游戏的人对这款游戏都不陌生。

这款游戏不止操作简单,规则也不难,再加上游戏速度的控制机制得宜,让整个游戏在操作过程中充满了快乐与紧张的气氛。

除了游乐当中能带给使用者快乐之外,游戏的设计内容无形中也不断训练使用者的逻辑思考能力,对于依靠高度脑力工作的现代人,都可以通过这个游戏,不时的检验一下自己,所以我们不难发现,在各种可携带的电子产品上都有这款游戏的踪影。

第二章总体设计本游戏主要给用户提供的是游戏的娱乐功能,所以怎么提高游戏的娱乐性成为问题的关键,那么娱乐性主要体现在那些方面呢?1,用户界面,具有良好的用户界面能吸引人去玩;2,游戏的娱乐功能,具有良好的娱乐功能是游戏具有持久魅力的基础,需要设计游戏的不同级别以充分调动用户积极性;3,具有友好的提示功能,满足不同游戏级别的人的不同需要,增加必要的音乐效果,使用户玩起来不觉得单调乏味。

鉴于上面分析,本次设计设置不同的游戏级别主要是缩短时间的进行速度,因为图标是随机列换的,所以通过控制产生随机数的难度显得不现实。

通过菜单和快捷键的操作可以适时做出游戏的提示功能,满足提示要求,如果用户对某次产生的图标分布效果不满意可以对现在有的图表资源进行有限次的重排,以满足用户的需要。

关于算法问题,这是游戏设计的核心问题,算法的选择好坏涉及到游戏的质量,采用的产生的二维随机数索引分别和对应图标对应形成游戏界面。

算法需要计算两个相同图标的连通性,计算连通性需要分别判断多次,所以算法的根本在于如何判断区域连通。

第三章详细设计3.1 连连看的要求1,要连接的两点上的图形是相同的。

2,两点间存在一条没有“障碍”的并且折点不超过两个的路线。

那么分析一下可以看到,一般分为三种情况。

图例说明:假设以一个2维数组来表示一张连连看的地图,数组中元素值为0的代表游戏界面中的空格子,值大于0的代表游戏中的各种连接对象。

连连看设计报告

连连看设计报告

连连看学号姓名指导教师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语言解决实际问题,提高学生的创新能力和实践能力。

此外,通过课程的学习,培养学生对计算机科学的兴趣和热情,培养学生良好的编程习惯和团队协作精神。

二、教学内容教学内容主要包括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语言的基础知识,使学生能够理解并运用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语言课程设计

连连看c语言课程设计

连连看c语言课程设计一、课程目标知识目标:1. 学生能理解C语言中结构体的概念和使用方法,掌握结构体数组的相关操作。

2. 学生能运用指针和结构体相关知识实现连连看游戏的逻辑设计。

3. 学生了解并掌握C语言中的文件操作,实现对连连看游戏数据的保存和读取。

技能目标:1. 学生能独立设计并编写C语言程序,完成连连看游戏的框架和基本功能。

2. 学生通过课程学习,培养逻辑思维能力和问题解决能力,学会运用所学知识解决实际问题。

3. 学生能运用调试工具对程序进行调试和优化,提高程序性能。

情感态度价值观目标:1. 学生通过参与课程学习,培养对编程的兴趣和热情,提高主动学习的积极性。

2. 学生在团队协作中,学会沟通与交流,培养合作精神和团队意识。

3. 学生在课程实践中,体验编程的乐趣,增强自信心和成就感,培养克服困难的意志。

本课程针对高年级学生,结合C语言学科特点,注重理论知识与实践操作的结合。

课程以连连看游戏为载体,引导学生运用所学知识,培养编程能力和逻辑思维能力。

同时,关注学生的情感态度,激发学习兴趣,提高合作意识,为学生的终身发展奠定基础。

通过本课程的学习,期望学生能够达到以上所述的具体学习成果。

二、教学内容1. 结构体和结构体数组:讲解结构体的定义和用法,结构体数组的创建与初始化,以及结构体变量的访问和操作。

2. 指针与结构体:介绍指针与结构体的结合使用,包括结构体指针的定义、访问结构体成员,以及结构体指针数组的应用。

3. 文件操作:讲解C语言中文件的基本操作,包括文件的打开、关闭、读取和写入,重点掌握文件读写结构体数据的方法。

4. 游戏逻辑设计:分析连连看游戏的规则和逻辑,引导学生运用结构体、指针和文件操作等知识,设计游戏的数据结构和算法。

5. 编程实践:结合教材实例,指导学生编写连连看游戏的代码,实现游戏的基本功能,包括游戏界面的显示、数据的保存与读取、游戏逻辑判断等。

教学内容参照教材相关章节,按照以下进度安排:第一课时:结构体和结构体数组;第二课时:指针与结构体;第三课时:文件操作;第四课时:游戏逻辑设计;第五课时:编程实践与调试优化。

c课课程设计(连连看)

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教室。

教学进度将根据课程内容和学生的实际情况进行调整,确保在有限的时间内完成教学任务。

连连看毕业设计论文

连连看毕业设计论文

连连看毕业设计论文目录1 绪论 (1)1.1 开发背景 (1)1.2 目的和要求 (1)1.3 国内外研究现状 (2)1.4 可行性分析 (3)1.5 分析结论 (4)1.6 方案论证 (4)2 开发技术及开发环境 (6)2.1 Visual Studio 6.0简介 (6)2.2 Visual C++开发工具的特点 (6)2.3 运行环境 (7)3 系统需求分析及设计 (8)3.1 系统功能需求 (8)3.2 概要设计 (10)3.2.1 总体设计 (10)3.2.2 游戏菜单结构的设计 (11)3.3 连连看游戏的详细设计 (11)3.3.1 游戏各功能的设计描述 (11)3.4 相关技术与重点难点 (13)3.4.1 相关技术 (13)3.4.2 系统的重点难点 (14)3.5 游戏各功能流程图 (15)3.6 主对话框的设计与实现 (19)3.6.1 主对话框的设计 (19)3.6.2 主对话框的实现 (19)3.7 棋子类的设计与实现 (20)3.7.1 棋子类的设计 (20)3.7.2 棋子类的实现 (21)3.8 人机界面设计 (23)4 连连看游戏的调试 (25)4.1 主界面和界面显示功能调试 (25)4.2 消除相同棋子的功能调试 (26)4.3 游戏升级功能的调试 (27)4.4 消除提示功能调试 (28)4.5 棋子换盘功能的调试 (29)4.6 消除提示功能的调试 (30)结论 (31)致谢 (33)参考文献 (34)附录A 英语原文 (35)附录B 汉语翻译 (37)1 绪论1.1 开发背景连连看的主要游戏规则来源于“四川麻将”,是给一堆图案中的相同图案进行配对的简单游戏。

网络小游戏制作的目的是满足了人们休闲的需要,在紧张工作之余休闲类的小游戏能够给人带来最大程度的放松,也可以增进人们之间的交流,沟通,通过游戏还可以认识更多的朋友,也可以到达跨省、跨市,甚至跨国间人们互相娱乐的目的。

  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 系统调试系统调试是对整个系统的相应程序问题进行调试,包括功能模块的调试和各个整体系统的调试。

相关文档
最新文档