C#连连看游戏设计报告_第1页
C#连连看游戏设计报告_第2页
C#连连看游戏设计报告_第3页
C#连连看游戏设计报告_第4页
C#连连看游戏设计报告_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

连连看游戏连连看游戏 一 课程设计题目一 课程设计题目 基于 C 的连连看设计 2 2 需求分析需求分析 生活在节奏越来越快的城市里 适量的游戏可以为我们舒缓疲劳 带来愉 悦的心情 不管你走到哪个游戏网站 连连看游戏总在排名的前 5 休闲 趣 味 益智是连连看玩不厌的精华 是一款适合大众的经典网络休闲小游戏 在 讨论后我们小组最后选定做连连看这个小游戏 本系统是一款简单的单机版游戏 只要将相同花色的两张牌用三根以内的 直线连在一起就可以消除 当游戏中已没有满足条件的图案时 点击重列可重 新排序 规则简单容易上手 游戏速度节奏快 画面清晰可爱 老少皆宜 因 此越来越受大众的欢迎 游戏规则如下 1 概要 玩家可以将 2 个相同图案的牌连接起来 连接线不多于 3 根直 线 就可以成功将两个牌消除 2 操作 第一次使用鼠标点击游戏界面中的牌 该牌此时为 被选中 以特殊方式显示 再次以鼠标点击其他牌 若该牌与被选中的牌图案相同 且 把第一个牌到第二个牌连接起来 中间的直线不超过 3 根 则消除这一对牌 否则第一个牌回复成未被选中状态 而第二个牌变成被选中状态 3 胜利条件 将游戏界面上的牌全部消除掉 4 失败条件 到规定时间 界面上的牌仍未全部消掉 3 3 概要设计概要设计 1 1 方案选择方案选择 在概要设计阶段 有两种方案可供选择 第一种方案是所有出现的图像的种类数和重复次数都是软件约定的 这样 就在无意中降低了玩家在游戏过程中乐趣 最后致使玩家不想继续玩下去 我 们参考了网络上的连连看游戏 考虑到游戏的娱乐性 所以参考网络上流行的 连连看游戏 设计出第二种方案 第二种方案 在同一区域中 图片出现的种类数和重复次数是可以由玩家 选择的 时间由软件约定 不过玩家选择的种类数和重复次数必须是偶数才可 以顺利完成游戏 否则游戏虽然可以正常运行 但无法完成游戏 2 2 系统设计系统设计 针对上面的需求分析 我们把整个软件分成两个模块 1 整体界面的设计和图 片的随机生成 2 图片路径判断函数 以下就是系统结构图 连连看系统结构图 3 3 基本思路基本思路 3 13 1 游戏画面问题游戏画面问题的思路的思路 画面 对于设计者来说 可以算是最简单的地方 但对于玩家 这却是最 重要的 一般玩家不会关心你是怎么实现的 他所关心的是画面的美观 漂亮 是否能让人赏心悦目 3 23 2 获取图片位置的思路获取图片位置的思路 通过数组从图片库随即获取规定个数得到图片 随机分布在画布上 图片 个数一定是偶数个 3 33 3 路径判断的思路路径判断的思路 连连看所要求的是 1 两个目标是相同的 2 两个目标之间连接线的折点不超过两个 连接线由 x 轴和 y 轴的平行线组 成 那么分析一下连接的情况可以看到 一般分三种情况 1 直线相连 2 一个折点 3 两个折点 可以发现 如果有折点 每个折点必定有且至少有一个坐标 x 或者 y 是 和其中一个目标点是相同的 也就是说 折点必定在两个目标点所在的 x 方向 或 y 方向的直线上 所以设计思路就是 连连看 界面设计和图片 的随机生成模块 模块 图片路径判断函 数 假设目标点 p1 p2 如果有两个折点分别为 z1 z2 那么 所要进行的 是 1 如果验证 p1 p2 直线连线 则连接成立 2 搜索以 p1 p2 的 x y 方向四条直线 可能某两条直线会重合 上的有限 点 每次取两点作为 z1 z2 验证 p1 到 z1 z1 到 z2 z2 到 p2 是否都能直线相 连 是则连接成立 4 4 详细设计详细设计 4 14 1 主界面的设计主界面的设计 由于这个程序的界面并不是很复杂 所以用到的控件也不多 主要核心内 容还是后台的代码设计 图片的随机生成主要是用到一个 random 函数将随机 数赋值给 flag 数组中的每个元素 然后根据数组元素值 来显示图片 4 1 1 界面的设计 程序主体界面 1 色彩上 总结人们的视觉习惯和色彩对眼睛的健康影响 决定对于画布 采用黑色背景 神秘而大方 右边的控制区采用天蓝色 配合左边纯黑 的背景 就像黑夜中的蓝天 纯洁而大气 2 功能上 背景就是窗体 右侧是一个 groupbox 控件 用来放置控制按 钮 下方是一个 progressbar 控件 用来显示时间条 4 24 2 图片的随机生成图片的随机生成 实现这个功能要分很多个步骤 1 程序运行时即载入游戏需要的 N 张图片 默认情况下图片种类数是 18 重复数是 4 重复数必须是偶数 并且可以选择是否重列 通过一个循 环 加载随即的选择 N 种图片 具体载入图片的代码如下 private void IniteBmp int maxnum g g this CreateGraphics for int i 0 i MAPWIDTH i for int j 0 j MAPHEIGHT j gmap i j 0 IniteRandomMap ref gmap maxnum AI new Kernal ref gmap for int i 0 i maxnum i ResourceManager rm new ResourceManager LLK data Assembly GetExecutingAssembly img i Image rm GetObject i ToString bmp img i Image Bitmap FromFile Images i 1 ToString bmp for int i 0 i 6 i bombimg i Image Bitmap FromFile Images B i 1 ToString bmp 2 当确认游戏开始时 通过画图过程完成图片生成 画图的过程代码如下 private bool CheckWin ref int map bool Win true for int i 0 i MAPWIDTH i for int j 0 j 0 for int i 0 i multipic i int xrandom r Next 19 int yrandom r Next 11 if map xrandom yrandom 0 map xrandom yrandom num Else i num private void FreshMap ref int map Random r new Random for int i 0 i MAPWIDTH i for int j 0 j MAPHEIGHT j if gmap i j 0 int x r Next 19 int y r Next 11 int temp gmap x y gmap x y gmap i j gmap i j temp TransportMap ref gmap private void TransportMap ref int map for int i 0 i MAPWIDTH i for int j 0 j MAPHEIGHT j AI GiveMapValue i j map i j 在指定位置画指定图 private void Draw Graphics g Image scrImg int PicX int PicY g DrawImage scrImg new Point PicX PicY private void Form1 Paint object sender PaintEventArgs e g g DrawLine new Pen new SolidBrush Color DeepSkyBlue 5 0 11 34 5 19 34 11 34 5 if bStart for int i 0 i MAPWIDTH i for int j 0 j 209 MessageBox Show 游戏区域内最多只有 209 个空 您选的 数据太多 请重新选择 textBox1 Text 18 textBox2 Text 4 return IniteBmp picnum if bStart MessageBox Show 游戏已在运行 return else bStart true this Invalidate music Play Sounds bg 03 mid 重列实现代码如下 private void RefreshMap ref int map if bStart for int i 0 i MAPWIDTH i for int j 0 j MAPHEIGHT j if gmap i j 0 Draw g g img gmap i j 1 i PICWIDTH j PICHEIGHT private void button2 Click object sender EventArgs e refreshplayer Play Thread Sleep 100 bombplayer Play FreshMap ref gmap this Invalidate 4 44 4 得分设置得分设置 本游戏 我们小组讨论后决定采用全新计分方式 对于不同的路径会得到 不同的分数 使人们在寻找相同图片的同时还要注意路径的选择 更增加了游 戏的趣味性 具体规则 直连得 10 分 一个拐点得 20 两个拐点得 40 用一 个 Label 控件存储得分 实现代码 switch corner 2 X case 1 score 20 一个拐点加 20 g g DrawLine pen new Point p1 X 31 15 p1 Y 34 17 new Point corner 0 X 31 15 corner 0 Y 34 17 g g DrawLine pen new Point p2 X 31 15 p2 Y 34 17 new Point corner 0 X 31 15 corner 0 Y 34 17 Thread Sleep 100 EraseBlock g g p1 p2 g g DrawLine bkpen new Point p1 X 31 15 p1 Y 34 17 new Point corner 0 X 31 15 corner 0 Y 34 17 g g DrawLine bkpen new Point p2 X 31 15 p2 Y 34 17 new Point corner 0 X 31 15 corner 0 Y 34 17 break case 2 score 40 两个拐点加 40 Point ps new Point p1 X 31 15 p1 Y 34 17 new Point corner 1 X 31 15 corner 1 Y 34 17 new Point corner 0 X 31 15 corner 0 Y 34 17 new Point p2 X 31 15 p2 Y 34 17 g g DrawLines pen ps Thread Sleep 100 EraseBlock g g p1 p2 g g DrawLines bkpen ps foreach Point mp in ps MessageBox Show mp X ToString mp Y ToString break case 0 score 10 直连加 10 g g DrawLine pen new Point p1 X 31 15 p1 Y 34 17 new Point p2 X 31 15 p2 Y 34 17 Thread Sleep 100 EraseBlock g g p1 p2 g g DrawLine bkpen new Point p1 X 31 15 p1 Y 34 17 new Point p2 X 31 15 p2 Y 34 17 break default break RefreshMap ref gmap label5 Text score ToString 4 54 5 过关设置过关设置 把界面上全部图片都消去即为通过此关 进入下一关 种类数加 1 private bool CheckWin ref int map bool Win true for int i 0 i MAPWIDTH i for int j 0 j 100 pbvalue 100 if pbvalue 0 pbtimer Stop MessageBox Show Failed return else progressBar1 Value pbvalue 5 35 3 图片是否可消除的判断图片是否可消除的判断 实现的思路前面已经说了 具体实现代码如下 using System using System Collections Generic using System ComponentModel using System Data using System Drawing using System Text using System Windows Forms using System Media using System Runtime InteropServices namespace LLK class Kernal private const int M 19 private const int N 11 private const int BLANK 0 private static int map new int M N Point arr1 new Point 209 int arr1Len arr2Len Point arr2 new Point 209 static Point corner new Point 2 用来存储两个拐点 static int co 0 用来标识几个拐点 public Kernal ref int mmap for int i 0 i M i for int j 0 j N j map i j mmap i j corner 0 new Point 0 0 corner 1 new Point 0 0 public Point GetPoints Point p new Point 3 p 0 corner 0 p 1 corner 1 p 2 new Point co 0 return p public bool IsShare ref Point a1 int a1Len ref Point a2 int a2Len bool result false for int i 0 i a1Len i for int j 0 j y2 y1 y2 int smaller y1 y2 y2 y1 int miny smaller 1 while map x1 miny BLANK miny if miny N break if miny bigger return true else return false if y1 y2 int bigger x1 x2 x1 x2 int smaller x1 x2 x2 x1 int minx smaller 1 while map minx y1 BLANK minx if minx M break if minx bigger return true else return false return false public int FindEmpty int x int y ref Point arr int count 0 int pos x 1 while 0 pos arr count Y y pos count pos x 1 while 0 pos arr count Y y pos count pos y 1 while 0 pos arr count Y pos pos count pos y 1 while 0 pos arr count Y pos pos count return count public bool IndirectLink int x1 int y1 int x2 int y2 int pos 0 Point ar1 new Point 209 int ar1Len 0 Point ar2 new Point 209 int ar2Len 0 pos y1 1 while 0 pos ar2Len FindEmpty x2 y2 ref ar2 if IsShare ref ar1 ar1Len ref ar2 ar2Len co 2 corner 1 new Point x1 pos return true pos pos y1 1 while 0 pos ar2Len FindEmpty x2 y2 ref ar2 if IsShare ref ar1 ar1Len ref ar2 ar2Len co 2 corner 1 new Point x1 pos return true pos 如果两点是左右且非直连关系 pos x1 1 while 0 pos ar2Len FindEmpty x2 y2 ref ar2 if IsShare ref ar1 ar1Len ref ar2 ar2Len co 2 corner 1 new Point pos y1 return true pos pos x1 1 while 0 pos ar2Len FindEmpty x2 y2 ref ar2 if IsShare ref ar1 ar1Len ref ar2 ar2Len co 2 corner 1 new Point pos y1 return true pos 如果非上下非左右 即构成矩阵的关系 return false p

温馨提示

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

评论

0/150

提交评论