文章目录

  • 一、项目分析
    • 1、用户需求分析
    • 2、系统设计思路
    • 3、系统模块划分
  • 二、项目设计
    • 1、各个子模块的设计方法
      • 板块一:注册用户并进行登录。
      • 板块二:导入图片。
      • 板块三:设置关卡所能选的难度。
      • 版块四:拼图是否完成的判断。
      • 板块五:切割图片。
      • 板块六:打乱拼图。
      • 板块七:重排图片,反映现在拼图的状况。
      • 板块八:切成图后的小图片移动。
    • 2、设计核心技术
  • 三、项目测试
  • 四、结论
  • 五、项目链接

一、项目分析

项目分析简要说明项目主要用户需求、设计思路及模块划分。

1、用户需求分析

在当今社会,人们的生活压力越来越大,也没有太多时间去玩大型的游戏,所以需要一些简单的小游戏来缓解大家的工作和学习压力。而连连看是一款简单,容易理解,大多数人都会玩的小游戏,耗费时间也不是太长,所以特意设计此款游戏来满足用户放松心情的需求。

2、系统设计思路

(1)进行游戏用户的注册以及登录;
(2)先导入图片,并进行切割
(3)随机丢弃一张小切图,并打乱顺序
(3)窗体基本的功能选择栏需实现;
(4)可以判定游戏确定输赢,当拼成时提示成功;
(5)点击图片要能进行移动;
(6)右侧要有重排后的显示框便于玩家游戏的完成。

3、系统模块划分

板块一:注册用户并进行登录。
板块二:导入图片。
板块三:设置关卡所能选的难度。
拼图游戏应该有关卡选择33型,44型,5*5型等等。设置多个关卡可以让用户体验游戏更具挑战性。
版块四:拼图是否完成的判断。
通过判断图片对应结构体的数字是否完全顺序排列来判断游戏是否胜利。
板块五:切割图片。
板块六:打乱拼图。
板块七:重排图片,反映现在拼图的状况。
板块八:切成图后的小图片移动。
该过程是整个游戏的核心过程,是最重要的一个过程,用户通过点击图片来移动图片,如果图片临近白块,则图片移动到白块位置;反之则不移动。

二、项目设计

详细介绍项目各个子模块的设计方法及设计核心技术。

1、各个子模块的设计方法

板块一:注册用户并进行登录。

通过两个窗体来完成注册登录的步骤。注册主要用到文件读取的方法:

StreamReader reader = new StreamReader("name.txt");

并通过写入函数讲用户注册名写入:

StreamWriter writer = new StreamWriter("name.txt", true);
writer.WriteLine(textBox1.Text);
MessageBox.Show("用户注册成功,请进行登录!");
writer.Dispose();

登录道理相同。

板块二:导入图片。

导入图片用到

OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.ShowDialog();//打开文件夹选择图片
pictureBox1.Image = Image.FromFile(openFileDialog1.FileName).GetThumbnailImage(250, 250,new Image.GetThumbnailImageAbort(delegate { return false; }),IntPtr.Zero);//使所选图片的尺寸符合所需大小

打开图片文件之后并初始其尺寸大小,便于后期切图以及用户体验。

板块三:设置关卡所能选的难度。

讲难度设置加到combox中

comboBox1.Items.Add("1");
comboBox1.Items.Add("2");
comboBox1.Items.Add("3");
comboBox1.Items.Add("4");

然后用switch对应各个难度

int Diffcult = int.Parse(comboBox1.Text);
// 根据对应难度初始化数组并给n赋值
switch (Diffcult)
{case 1:node = new Node[3, 3];n = 3;break;case 2:node = new Node[4, 4];n = 4;break;case 3:node = new Node[5, 5];n = 5;break;case 4:node = new Node[9, 9];n = 9;break;
}

版块四:拼图是否完成的判断。

通过判断函数来确定对照各个图片的结构体的数字记录来判断是否拼成

public bool JudgePicture()
{int count = 0;for (int x = 0; x < n; x++){for (int y = 0; y < n; y++){if (this.node[x, y].num != count)return false;count++;}}return true;
}

板块五:切割图片。

// 传入图片;单个图片宽,高;拼图界面的x,y长度
public Image Cutpicture(Image fImage,int width,int height,int spacex,int spacey)
{// 创建新图片的位图Bitmap bitmap = new Bitmap(width, height);// 创建绘制区域Graphics graphics = Graphics.FromImage(bitmap);// 截取所需原图对应区域写入作图区域graphics.DrawImage(fImage, 0, 0, new Rectangle(spacex, spacey, width, height), GraphicsUnit.Pixel);// 从作图区域生成新图Image fgImage = Image.FromHbitmap(bitmap.GetHbitmap());return fgImage;   // 返回分割后的图片
}

通过创建绘制区域,来截取所需的小图块,然后通过调用切图函数将切后的图片全部传入结构体图片数组中。

板块六:打乱拼图。

// 定义随机数用于打乱切后的图
Random lx = new Random();
Random ly = new Random();
int x = lx.Next(0, n);
int y = ly.Next(0, n);

再调用交换函数进行来进行两图片交换,进行400000次达到打乱的目的

板块七:重排图片,反映现在拼图的状况。

每次图片的点击移动事件都会进行pictureBox2.Image = BackImage();语句来存储移动后的图片,当点击button3时就会调用这个函数

// 按钮重排后再picturebox3中显示
private void button3_Click(object sender, EventArgs e)
{// 在pictureBox3中显示被移动后的拼图pictureBox3.Image = BackImage();
}

是的picturebox3的图片显示现在图片的状态

板块八:切成图后的小图片移动。

先读取鼠标点击的位置,用于判断点击的图片位置

int X = e.X / (width / n);  // 鼠标x位置整型只能取 1到n-1
int Y = e.Y / (width / n);

一共九种情况:图片在中间,四角,四边,分别判断来确定是否移动:如下面是在中间点击图片的运行代码,其他情况类似:

if (node[X + 1, Y].num == index_m)
{Swap(new Point(X + 1, Y), new Point(X, Y));
}
else if (node[X - 1, Y].num == index_m)
{Swap(new Point(X - 1, Y), new Point(X, Y));
}
else if (node[X, Y + 1].num == index_m)
{Swap(new Point(X, Y + 1), new Point(X, Y));
}
else if (node[X, Y - 1].num == index_m)
{Swap(new Point(X, Y - 1), new Point(X, Y));
}

2、设计核心技术

  • 用文件流的方法设置登录注册界面,并保存用户名信息
  • 使用GDI+的方法对图片进行切割
  • 打乱图片的时候运用大量随机数
  • 每个图片有自己的对应结构体数字,为了判断是否拼图成功
  • 当所点击图片与空白图片交换时,分九种情况:四角,四边,中间,按情况来写入交换方法
  • 当拼成功时,按照图片对应的结构体数字并调用判断函数判断

三、项目测试

简要介绍采用的测试方法和测试要点。

点击图中按钮后选择一个图片文件,将图片显示到窗口的左边

然后将图片切为指定的数目(如 3x3)的小图片,从生成的小图片中随机选择一张丢弃,将小图片按照一定规律打乱,并将显示到窗口的中间。
用户可以用鼠标点击空白方块周围的图片,被点击的图片移动到原来空白的位置,被点击图片的位置变为空白。

另设登录,注册界面

四、结论

简要总结项目的主要工作、主要结果、心得感受主要发现以及下一步应当开展的主要工作等。

  • 主要工作:设计了一款拼图游戏
  • 主要结果:让用户有一种较好的游戏体验,并制作完成三级项目
  • 心得感受:大部分是老师上课讲过的,还有一些运用得不是很好,以及一些自己通过网络,书籍来获取的知识,当然更多的知识是陌生的,需要自己去查找,去学习,来达到学以致用的目的。
  • 下一步工作:程序仍然存在缺陷,缺少背景音乐与华丽的界面,这些问题待解决

五、项目链接

这个文档描述的版本是这个
https://download.csdn.net/download/weixin_45525272/46298952
还有下面这个是我闲着没事用一种极其简单的思想做的:
https://download.csdn.net/download/weixin_45525272/46299299

C# 拼图游戏(超详细)相关推荐

  1. 飞机大战小游戏(超详细)

    偷学Python之最后的项目二:飞机大战小游戏(超详细) 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志.--苏轼 甜甜先说 这次用Python中的pygame模块来完成一个飞机大战的小游戏:基本思 ...

  2. python飞机游戏视频教程_10分钟教你用Python做个打飞机小游戏超详细教程

    01 前言 这次还是用python的pygame库来做的游戏.关于这个库的内容,读者可以上网了解一下.本文只讲解用到的知识.代码参考自网上,自己也做了一点代码简化.尽量把最核心的方面用最简单的方式呈现 ...

  3. 教你用Python做个打飞机小游戏超详细教程

    01 前言 这次还是用python的pygame库来做的游戏.关于这个库的内容,读者可以上网了解一下.本文只讲解用到的知识.代码参考自网上,自己也做了一点代码简化.尽量把最核心的方面用最简单的方式呈现 ...

  4. 用Python做个打飞机小游戏超详细教程

    我知道你们一定想先看效果如何 00 目录 整体框架 开始之前-精灵类Sprite 子弹类class Bullet 玩家飞机类class Player 敌机类class Enemy 游戏主体循环以及帧率 ...

  5. C语言青蛙过河游戏超详细教程【附源码】

    今天给大家带来一个青蛙过河小游戏代码,先看看效果吧! 开始界面: 游戏界面 : 游戏中界面:  胜利界面: 死亡界面: 代码我们分了几个模块来写,这样不容易写乱,也方便后续修改 木板模块: #incl ...

  6. LeetCode 45.跳跃游戏② (超详细)

    给你一个非负整数数组 nums ,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组的最后一个位置. 假设你总是可以到达数组的最后一 ...

  7. C语言实现三子棋小游戏---超详细讲解

    实现步骤 第1步---打印一个菜单提示选择是否进入游戏 第2步---创建棋盘 第3步---初始化棋盘 第4步---打印棋盘 第5步---下棋,并判断输赢 第6步---将上述函数做成项目 完整代码 第1 ...

  8. Python实现烧脑猜数字小游戏——超详细注解

    文章目录 一.需求分析 二.编程思路 三.完整代码 引用源自   本例是我在中国MOOC学习基础语法时做到的小例子,这里加上我的理解和一些注释分享给大家希望能够对大家有所帮助~ 一.需求分析 案例:烧 ...

  9. C语言实现扫雷游戏(超详细讲解+全部源码)

    电子信息 工科男 一点一点努力! 文章目录 前言 一.游戏介绍 二.游戏设计思路 二.具体步骤 1.创建test.c和game.c源文件以及 game.h头文件 2.创建菜单 3.创建雷盘 4.初始化 ...

  10. JS实现飞机大战小游戏 超详细 附源码和原图

    目录 效果展示 源码 HTML CSS JS 原图 效果展示 HTML+CSS+JS做打飞机小游戏 开始界面 选择你喜欢的飞机开始游戏 按下空格键 开始/暂停  有三种敌机 可以设置飞机生命值,生命值 ...

最新文章

  1. 小说站 章节内容 ajax,第17章 作业分析与异步编程原理——2019年5月14日22:00
  2. 2020年这10大ML、NLP研究最具影响力:为什么?接下来如何发展?
  3. oracle 11g dataguard安装出现的错误
  4. common.logging和log4j比较
  5. linux网卡驱动离线安装_新装Linux系统没有网卡驱动的解决办法和步骤
  6. linux下系统安全常见问题2
  7. 【无码专区10】第K大查询(双向链表 /主席树+st表)
  8. 动态规划再理解(53、121、174)
  9. 爬虫:突破有道翻译js加密(最新)
  10. mysql分区管理 - hash分区
  11. DOS下文件操作命令
  12. ExamDiff Pro(电脑文件对比工具)官方正式版V12.0.1.8 | 最好用的文件对比工具之一文件内容对比工具下载
  13. 百科知识 kux文件如何打开
  14. 资源环境承载力和国土空间开发适宜性之水环境容量评价
  15. 计算机图形人机交互实验报告,用户界面设计-人机交互实验报告
  16. 国际信用卡VISA/MasterCard/AE/DC/JCB 卡号结构
  17. 什么是Winsock WSAData ?
  18. Blastp/PSI-BLAST/PHI-BLAST
  19. python测试自动化封装_python接口自动化学习笔记(封装获取测试数据方法)
  20. 磁盘分区命令fdisk、parted和gdisk

热门文章

  1. stats | 概率分布与随机数生成(二)——均匀分布、指数分布、正态分布、对数正态分布、卡方分布、t分布、F分布和增长分布
  2. linux 清除swap 数据,linux清除swap
  3. 初学太极拳须知--吴公仪
  4. win7无法自动检测修复计算机,无法启动,启动修复正在检查系统问题
  5. Redis中什么是热Key问题?如何解决热Key问题?
  6. python条形码识别_使用Python和OpenCV在视频中实时监测条形码
  7. docker 入门优质文章
  8. 测试三极管的口诀[转]
  9. 自律给我自由 2017.8.9   心情很好   天气很好
  10. 高绩效团队-VUCA时代的五个管理策略《一》—全书回顾