拼图游戏 v1.1
我一直对拼图游戏比较有兴趣,市面上卖的所谓“1000块拼图”也玩过不少,不过玩那个太占地方,后来也不再买了,同时也就萌生了在电脑上玩拼图的想法。
现在虽然有很多拼图游戏,但能大多数只能支持几十或几百块拼图,很少能支持上千块拼图的游戏。
后来,我就利用 Direct2D 自己实现了一个拼图游戏,可以流畅的支持最高 1200 块的拼图(更高其实也可以支持,但是感觉已经足够了),拼图碎片之间也可以自动吸附,还可以设置吸附到背景。游戏界面如图 1 所示。

图 1 游戏界面
一、系统要求
拼图游戏是使用 C# 编写的,使用 SharpDX 类库实现游戏界面。
最低系统要求是 Windows 7,需要 .Net Framework 4.5 的支持。一些游戏特效需要 DirectX 11.1 的支持,但不影响游戏过程。
二、游戏介绍
游戏的工具栏如图 2 所示。

图 2 工具栏
基本的游戏操作是:
- Ctrl + 鼠标左键单击,可以将拼图放到最底层(不会遮挡其它拼图)
- 鼠标右键单击,顺时针旋转拼图(如果允许的话)
- Shift + 鼠标右键单击,逆时针旋转拼图
- 鼠标滚轮,上下滚动界面
- Shift + 鼠标滚轮,左右滚动界面
- Ctrl + 鼠标滚轮,缩放界面
2.1 新建、打开和保存游戏
点击“新建游戏”按钮,会弹出“创建新游戏”窗口,如图 3 所示。

图 3 创建新游戏
通过“浏览”按钮选择一幅图片,该图片就将被作为拼图的图片使用。
通过拖动“游戏难度”滑块,可以更改拼图碎片的数目。游戏难度被分为了四个级别,分别是:
- 普通,拼图碎片数从 2 到 200。
- 噩梦,拼图碎片数从 201 到 400。
- 地狱,拼图碎片数从 401 到 800。
- 炼狱,拼图碎片数从 801 到 1200。
在挑战高难度拼图游戏时,请尽量使用高分辨率的图片,否则每块拼图碎片过小,会难以分辨。
拖动“随机程度”滑块,可以改变拼图碎片的随机程度。随机程度越大,会导致拼图碎片的形状更加不规则,图 4 以“四边形”展示了不同的随机程度下,拼图碎片的形状。

图 4 不同的随机程度
勾选“允许拼图旋转”,会将拼图碎片随机旋转 90、180 或 270 度,在拼图过程中就可以利用鼠标右键旋转拼图碎片。
勾选“吸附到正确位置”,那么如果将拼图碎片正确的摆放到与背景对应的位置,就会自动固定下来,不会再被拖动。
最后是拼图形状下拉框,目前有四种拼图形状,如图 5 所示,可以依个人喜好自由选择。

图 5 四种拼图形状
当随机程度较大时,某些拼图形状可能产生一些问题,如图 6 所示。这仅仅是显示的问题,不会影响到游戏。

图 6 随机度较大时可能产生的问题
游戏存档会保存为 *.jig 格式,拼图游戏的所有相关信息都会被保存下来,不必担心打乱拼图碎片的位置。
2.2 游戏辅助
游戏缩略图窗口如图 7 所示,其中显示了完整的图片。在缩略图窗口中,可以鼠标右键拖动缩放缩略图,鼠标左键拖动缩略图。

图 7 游戏缩略图
背景图片指的是图 1 中拼图后面的图片虚影,它提示了每个拼图碎片的正确位置。如果在创建新游戏的时候勾选了“吸附到正确位置”,那么将拼图碎片拖动到对应的背景图片位置时,就会自动吸附。背景图片的透明度和背景颜色可以在游戏设置中更改。
游戏中可以切换只显示边框拼图碎片(隐藏中心位置的图片),以及在 10% 至 400% 间任意缩放游戏界面。工具栏右边会提示当前的游戏用时和游戏完成度。
2.3 游戏样式
在设置中,可以更改拼图游戏的样式,目前包含两个样式:简单和特效,如图 8 所示。

图 8 游戏样式
两种样式可以在设置中任意切换。简单样式比较节约资源;特效样式要消耗更多的资源,同时需要电脑支持 DirectX 11.1,某些电脑可能无法开启特效样式。
关于特效样式的实现,可以参见《C# 使用 Direct2D 实现斜角效果》。
三、游戏下载
游戏本身是绿色的,解压即可。
最新版本下载:JigsawGame-1.1

JigsawGame 由 CYJB 创作,采用 知识共享 Attribution-NonCommercial-NoDerivatives 4.0 国际 许可协议进行许可。
游戏的完整源代码可见这里,仅供个人学习使用。
四、版本日志
version 1.1
2013.10.01 发布
- 大幅提升了特效模式下,新建和打开游戏的效率
- 减少了界面卡死问题
- BUG 修复
version 1.0.0.1
2013.09.20 发布
- 修复了一个小的界面问题
version 1.0
2013.09.20 首次发布
拼图游戏 v1.1的更多相关文章
- 利用Vue.js实现拼图游戏
之前写过一篇<基于Vue.js的表格分页组件>的文章,主要介绍了Vue组件的编写方法,有兴趣的可以访问这里进行阅读:http://www.cnblogs.com/luozhihao/p/5 ...
- JavaScript拼图游戏
今天是2016年最后一天上班了.最近几天都比较休闲,有时间空闲下来写写文档之类的. 2016过得真是快.感觉没做什么就过去了.想到之前想坚持每个月写一写博客都没坚持到.希望2017年可以吧. 无聊之余 ...
- SDL制作拼图游戏
看完教程第三集后,好像自己能用这个来写一个简单的拼图游戏,第一次写出个带界面的游戏,好有成就感. 图片是自己慢慢截左上部分8个脸. #include <stdio.h> #include ...
- 【原创Android游戏】--猜数字游戏V1.1 --数据存储,Intent,SimpleAdapter的学习与应用
--------------------------------------------------------------- V0.1版本 上次做完第一个版本后,发现还有一些漏洞,并且还有一些可以添 ...
- 拼图游戏(js,C#,java三种语言)
<html> <head> <meta charset="utf-8"> <style type="text/css" ...
- JavaScript写一个拼图游戏
拼图游戏的代码400行, 有点多了, 在线DEMO的地址是:打开: 因为使用canvas,所以某些浏览器是不支持的: you know: 为什么要用canvas(⊙o⊙)? 因为图片是一整张jpg或 ...
- atitit.html5 拼图游戏的解决之道.
atitit.html5 拼图游戏的解决之道. 1. 拼图游戏的操作(点击法and 拖动法) 1 1. 支持键盘上.下.左.右键移动: 1 2. 支持点击空白模块中的上下左右箭头移动: 1 3. 支持 ...
- [CareerCup] 8.6 Jigsaw Puzzle 拼图游戏
8.6 Implement a jigsaw puzzle. Design the data structures and explain an algorithm to solve the puzz ...
- Android拼图游戏
效果如下 游戏的设计 首先我们分析下如何设计这款游戏: 1.我们需要一个容器,可以放这些图片的块块,为了方便,我们准备使用RelativeLayout配合addRule实现 2.每个图片的块块,我们准 ...
随机推荐
- (7)UI(基础对象)
1.地图控件: 地图控件可支持导入Tiled地图编辑器导出的tmx格式文件,地图是制作游戏关卡地形图的控件,对于即时战略类型游戏的制作,为了使玩家流畅的切换游戏画面,经常会使用超过屏幕尺寸的地图. ...
- 在Android的webview中定做js的alert,confirm和prompt对话框的方法
在Android的webview中定制js的alert,confirm和prompt对话框的方法 http://618119.com/archives/2010/12/20/199.html 1.首先 ...
- HDFS深入浅析
导读 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式文件系统 ...
- 将mysql的查询结果导出为csv
要将mysql的查询结果导出为csv,一般会使用php连接mysql执行查询,将返回的查询结果使用php生成csv格式再导出. 但这样比较麻烦,需要服务器安装php才可以实现. 直接使用mysql导出 ...
- struts/Servlet,action转到jsp后,路径问题(struts2,jsp路径,action路径,action跳转,相对路径,绝对路径)
问题:使用struts2,如何处理action的路径?还有,在action转到的jsp中,如何写js,css,图 片的路径?(例如访问 http://localhost/project/listUse ...
- kettle job通过javascript进行循环控制
任何一种编程语言都少不了循环,kettle中的job也一样.那么kettle中的job是怎么通过JavaScript来达到类似于编程语言中的for循环呢? var max = parent_job.g ...
- CHM文档打开空白的解决
网上打包的CHM格式的文档,有时候打开无论点击目录哪一章节都会出现一片空白或者显示已取消到该网页的导航 这个情况的原因就是CHM文件在Windows的HTFS文件系统中会默认被阻止显示,解决方法就是在 ...
- canvas实践小实例二 —— 扇形
俗话说:发图不留种,菊花万人捅!我这里想延伸一下:教学不给例,说你是傻逼!哎呀,还挺押韵,嘻嘻,开个玩笑! 我们都讲了四期API的知识了,估计大家看的也是枯燥的很啊,前面的小实例也是太简单,简直不解渴 ...
- Java for LeetCode 188 Best Time to Buy and Sell Stock IV【HARD】
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- CentOS 5.8/6.7若干优化
CentOS系统安装之后并不能立即投入生产环境使用,往往需要先经过我们运维人员的优化才行.在此讲解几点关于Linux系统安装后的基础优化操作.注意:本次优化都是基于CentOS(5.8/6.7). 下 ...