• 工作闲暇之余去逛了逛CodeProject,刚好现有项目主要用到就是winform,浏览了下照片,找到上周带着蛋挞打疫苗回家的照片,于是新生一记,如何把这些图片玩起来~
  • 80后应该都有印象,小时候有种玩具,叫做拼图魔方,90后00后的世界这种玩具应该早已灭绝了。一个塑料小板,上面分隔了很多小图框,通过移动这些小图框,最后拼接成完整的图片
  • 话不多说开始吧~ 先上一张原图

  

  • 代码也很简单,主要就是通过BitMap分隔现有(后面有时间可以优化下,让玩家自动上传图片,应该会更有意思)图片,然后Random随机打乱分割后图片的顺序,通过点击小方格来完成图片的拼图,为了更方便玩家,每个小方格添加了序号,玩家也可以不参考原图,按照小方格上的序号进行拼图

  

  序号功能实现主要是类MyButton集成父类Button实现:

  

 public class MyButton : Button
{
private int number;
public int Number
{
get
{
return this.number;
}
set
{
this.Text = value.ToString();
this.number = value;
}
}
public MyButton()
{
}
}

  随机分隔

  

 Random r = new Random();
int[] a = new int[];
int i = ;
int b;
bool exist;
while (i != a.Length)
{
exist = false;
b = (r.Next() + );
for (int j = ; j < a.Length; j++)
if (a[j] == b) exist = true;
if (!exist) a[i++] = b;
}
for (int j = ; j < a.Length; j++)
ButtonArray[j].Number = a[j];
// set picture pieces as the background image
int Number;
int Row, Column;
for (int k = ; k < ; k++)
{
for (int j = ; j < ; j++)
{
if (k == )
if (j == ) break;
Number = ButtonArray[k * + j].Number; //Get The Number Of Button
Row = (Number - ) / ;
Column = (Number - ) - (Row * );
ButtonArray[k * + j].Image = CurrentBitmapImage.Clone(new Rectangle(new Point(Column * , Row * ), new Size(, )), System.Drawing.Imaging.PixelFormat.DontCare);
}
}

  点击小方格,通过改变当前点击的小方格X,Y坐标来更新小方格的位置

  

    private void myButton_LocationChanged(object sender, EventArgs e)
{
MyButton A = sender as MyButton;
YouWin = true;
int ButtonNumber;
this.NumberOfMoves++;
if (ButtonArray == null)
{
this.FrmMain_Load(sender, e);
}
for (int i = ; i < ; i++)
{
if (YouWin == false)
break;
else for (int j = ; j < ; j++)
{
ButtonNumber = i * + j;
if (i == && j == )
break;
else if (GetNumber(ButtonArray[ButtonNumber].Location.X, ButtonArray[ButtonNumber].Location.Y) == ButtonArray[ButtonNumber].Number)
continue;
else
{
YouWin = false;
break;
}
}
}
if (YouWin)
{ if (MessageBox.Show("You Win This Game in " + this.NumberOfMoves.ToString() + " Moves\n\rDo You Want To Play Another Game ?", "Congratulation", MessageBoxButtons.YesNo) == DialogResult.Yes)
this.LoadNewGame();
else
this.Close();
}
}

  

private void myButton_LocationChanged(object sender, EventArgs e)
{
MyButton A = sender as MyButton;
YouWin = true;
int ButtonNumber;
this.NumberOfMoves++;
if (ButtonArray == null)
{
this.FrmMain_Load(sender, e);
}
for (int i = ; i < ; i++)
{
if (YouWin == false)
break;
else for (int j = ; j < ; j++)
{
ButtonNumber = i * + j;
if (i == && j == )
break;
else if (GetNumber(ButtonArray[ButtonNumber].Location.X, ButtonArray[ButtonNumber].Location.Y) == ButtonArray[ButtonNumber].Number)
continue;
else
{
YouWin = false;
break;
}
}
}
if (YouWin)
{ if (MessageBox.Show("You Win This Game in " + this.NumberOfMoves.ToString() + " Moves\n\rDo You Want To Play Another Game ?", "Congratulation", MessageBoxButtons.YesNo) == DialogResult.Yes)
this.LoadNewGame();
else
this.Close();
}
}

  具体效果如下:

  

  代码有很多已知的可以优化的地方,后面有闲暇时间会处理,如果大家有更好的建议,不妨在下方评论区告知,在此感谢~

  【点击下载源码

  【打个小广告】最近申请了个微信公众号,主要用于个人随笔记录,工作/生活中项目中用到的技术或娱乐的小游戏,俗话说得好好记性不如烂键盘!后续娱乐的小游戏源码也会分享到公众号中(部分会同步到博客园)。

  又有俗话说了, 您的支持就是我写作的动力,公众号点个关注什么的也是举手之劳,还请您高抬贵手~

C# 小游戏-拼图魔方【Game Puzzle】的更多相关文章

  1. 速度挑战 - 2小时完成HTML5拼图小游戏

    概述 我用lufylegend.js开发了第一个HTML5小游戏——拼图游戏,还写了篇博文来炫耀一下:HTML5小游戏<智力大拼图>发布,挑战你的思维风暴. 详细 代码下载:http:// ...

  2. 拼图小游戏之计算后样式与CSS动画的冲突

    先说结论: 前几天写了几个非常简单的移动端小游戏,其中一个拼图游戏让我郁闷了一段时间.因为要获取每张图片的位置,用`<style>`标签写的样式,直接获取计算后样式再用来交换位置,结果就悲 ...

  3. JavaScript版拼图小游戏

    慕课网上准备开个新的jQuery教程,花了3天空闲时间写了一个Javascript版的拼图小游戏,作为新教程配套的分析案例 拼图游戏网上有不少的实现案例了,但是此源码是我自己的实现,所以不做太多的比较 ...

  4. [deviceone开发]-拼图小游戏

    一.简介 九宫格小游戏,可从本地图库载入一张图片,填充到9个ImageView,另涉及Timer计时.图库控件. 每个格子都是相同的控件,动态添加到首页中的,在初始化后,响应touch事件,之后通过多 ...

  5. canvas drag 实现拖拽拼图小游戏

    博主一直心心念念想做一个小游戏-  前端时间终于做了一个小游戏,直到现在才来总结,哈哈- 以后要勤奋点更新博客! 实现原理 1.如何切图? 用之前的方法就是使用photoshop将图片切成相应大小的图 ...

  6. JS小游戏-蓝色拼图

    // a[href=#viewSource]"); //查看源代码标签 viewSourceArr.attr("title", "查看源代码"); v ...

  7. 使用NGUI实现拖拽功能(拼图小游戏)

    上一次用UGUI实现了拼图小游戏,这次,我们来用NGUI来实现 实现原理 NGUI中提供了拖拽的基类UIDragDropItem,所以我们要做的就是在要拖拽的图片上加一个继承于该类的脚本,并实现其中的 ...

  8. jQuery实现拼图小游戏

    小熊维尼拼图                                                                                    2017-07-23 ...

  9. jQuery拼图小游戏

    jQuery拼图小游戏 最后样式 核心代码部分 <script type="text/javascript" > $(function () { $("td& ...

随机推荐

  1. Flask登录认证

    login函数 @app.route('/login/', methods=['GET', 'POST']) def login(): if request.method == 'GET': retu ...

  2. 从源码上理解Netty并发工具-Promise

    前提 最近一直在看Netty相关的内容,也在编写一个轻量级的RPC框架来练手,途中发现了Netty的源码有很多亮点,某些实现甚至可以用苛刻来形容.另外,Netty提供的工具类也是相当优秀,可以开箱即用 ...

  3. latex一些有用的写法

    编辑博文的时候总是忘语法,然后到网上查-- 干脆记一下! 1.编辑漂亮的函数上下标 \(\sum\limits_{i=1}^n\) 对于原有的函数:$\sum\limits_{i=1}^n$ \(\m ...

  4. SpringBoot初级知识总结,太难了,未完待续.......

    idea如何打包发布springboot 1.1.环境准备window系统,jdk8环境,springboot项目,maven3.5.4环境 1.2.进行打包发布 打开idea编辑器,打开一个写好的d ...

  5. mui html5 plus

    mui: mod:框架 mhe:头文件 mbody:内容 mta:底部 msl:轮播图 mg:九宫格 ml:图文列表 mu.post   : ajax dga:  绑定事件 mui.toast :来实 ...

  6. Distance Dependent Infinite Latent Feature Model 阅读笔记1

    阅读文献:Distance Dependent Infinite Latent Feature Model 作者:Samuel J.Gershman ,Peter I.Frazier ,and Dav ...

  7. OGG主从表结构不同步,出现OGG-01296错误

    一.Cause ogg的err日志出现以下报错 2019-09-10 16:36:55 WARNING OGG-01003 Oracle GoldenGate Delivery for Oracle, ...

  8. Centos7 下搭建STF平台

    STF,全名Smartphone Test Farm---智能手机测试平台,可以提供远程真机调试的功能,目前仅支持Android设备. 环境准备 1.Node.js 8 安装Node.js $ cur ...

  9. P4语言环境安装(一)前端编译器p4c、后端编译器p4c-bm2-ss

    这个P4安装环境是在2020-2-8安装的,安装环境卡了我好几天,把遇到的问题记录下来,有需要的同学可以参考一下,要是说错了或者有问题的话,评论或mail:guidoahead@163.com联系我都 ...

  10. python中更人性化的一个单元测试框架:nose2

    如果你学过 python 进行自动化测试,你一定使用过 unittest.今天我们要讲的 nose2 是一个高级版本的 unittest.他比 unittest 更容易理解,用起来也更加方便一些. 快 ...