4*4拼图从来都没有爱过这么深拆过,怎么会无解呢?

和我成为微信好友吧!
4岁的孩子可以拼多少块的拼图了?
女宝13岁8个月9天
主题回复精华
浏览数: 14242
回复数: 23
&SCRIPT LANGUAGE="JavaScript1.1"&
var browVersion = parseInt(navigator.appVersion);
if (navigator.appName=="Netscape" && browVersion&=4) document.write("&SCR"+"IPT LANGUAGE=\"Javascript1.1\" SRC=\" http://adpub.yaolan.com/afp/door/;ap=623;ct=pu=4c451ece10ff899d0001;/?\" charset="utf-8"&&\/SCR"+"IPT&");
我家点昨天可以拼80块的拼图了。
我真的好高兴啊。
姐妹的孩子4岁时可以拼多少块的呀?
男宝13岁9个月14天
主题回复精华
回复:4岁的孩子可以拼多少块的拼图了?
我们2岁时拼80块的,需要10分钟。
现在四周岁的,可以拼200块的。
牛牛不识字不识数,唯一厉害的,就是拼图了。
但是视力下降,禁止他拼了。
男宝9岁4个月23天
主题回复精华
回复:4岁的孩子可以拼多少块的拼图了?
我家朵朵2岁半,拼4块,还要勉强。
他总是受不听使唤,对不齐。
男宝13岁9个月14天
主题回复精华
回复:4岁的孩子可以拼多少块的拼图了?
& && && && &以下是引用月牙儿弯弯在9:38:28的发言:
& && && && &楼上2个孩子注意力、集中力、耐力很是了得!
& && && && &比我强,真的,我大学时拼200块经常半途而费
& && && && &
我一块也不爱拼。牛牛拼图是四姑奶在家里教的。我没有那个耐心啊
男宝14岁16天
主题回复精华
回复:4岁的孩子可以拼多少块的拼图了?
跳跳最多好像就拼过中国地图,每次买玩具,我都带他去,对拼图兴趣不大。他就是耐心不够,转个魔方,转了好长时间只转出一面,然后气的就把魔方扔了。
我妹妹家的孩子现在三岁十个月,特别爱拼图,家里特别多的拼图,一张新拼图一会就拼出来,五一回家看他拼一张特别零碎的新拼图,一会就完成了,我没注意是多少块的。
女宝13岁5个月14天
主题回复精华
回复:4岁的孩子可以拼多少块的拼图了?
两岁多拼90块的。自己独立完成。
男宝13岁7个月17天
主题回复精华
回复:4岁的孩子可以拼多少块的拼图了?
还没给他买过80块的拼图,所有拼图的结局都是被弄得到处都是不想买更大的了~~
不过中国地图世界地图已经没问题了~
女宝13岁8个月9天
主题回复精华
回复:4岁的孩子可以拼多少块的拼图了?
你们家的孩子都很不得了啊,我还以为80块很多了呢.原来还有更小的孩子可以拼更多的的。
不着急啊,孩子的兴趣可能不一样的,我家点以前也是不怎么感兴趣,这一个月突然很感兴趣,拼的也很好了。
我也不感兴趣拼图的,以前很雄心买了个1000块的夜光拼图,想自己拼好了挂起来,结果也没那个耐心,后来也被孩子弄的不知道到哪里去了。
主题回复精华
回复:4岁的孩子可以拼多少块的拼图了?
我女儿22个月开始对拼图感兴趣,8块以下的那种,三二天下来就得心应手,现在没多大兴趣了,因为我没有买更多的回来。
主题回复精华
回复:4岁的孩子可以拼多少块的拼图了?
两岁多到现在,一直拼48块的.现在三岁八个月, 只喜欢拼立体的恐龙拼图了,
> 4岁的孩子可以拼多少块的拼图了?
北京世纪摇篮网络技术有限公司版权所有,所有内容未经授权,不得转载或做其他使用
京ICP证010534号
客服信箱: & 电话:前言:在&&程序设计 之 C#实现《拼图游戏》(上),上传了各模块代码,而在本文中将详细剖析原理,使读者更容易理解并学习,程序有诸多问题,欢迎指出,共同学习成长!
拼图是一个非常经典的游戏,基本每个人都知道他的玩法,他的开始,运行,结束。那么,当我们想要做拼图的时候如何入手呢?答案是:从现实出发,去描述需求(尽量描述为文档),当我们拥有了全面的需求,就能够提供可靠的策略,从而在代码中实现,最终成为作品!
(一)需求:(这个需求书写较为潦草,为广大小白定制,按照最最最普通人的思维来,按照参与游戏的流程来)
   1.图片:我们玩拼图 最起码有个图
   2.切割:拼图不是一个图,我们需要把一个整图它切割成N*N的小图
   3.打乱:把这N*N的小图打乱顺序,但是要保证通过游戏规则行走能还原回来
   4.判断:判拼图成功
   5.交互:我们使用哪一种交互方式,这里我选择鼠标点击
   & 6.展示原图片完整的缩略图
   &以上为基本功能,以下为扩展功能
   & 7.记录步数:记录完成需要多少步
   & 8.更换图片:一个图片玩久了我们是不是可以换一换啊 哈哈
&   &9.选择难度:太简单?不要!3*3搞定了有5*5,5*5搞定了有9*9,舍友挑战最高难度 3000多步,心疼我的鼠标TAT
(二)分析:
   有了需求,我们就可以分析如何去实现它(把现实需求映射在计算机中),其中包括:
& & & & & &1.开发平台:这里选择C#语言
    1.存储:其中包括我们要存什么?我们用什么结构存?我们反观需求,会发现,有一些需要存储的资源
      图片:使用 Image 对象存储
      单元(原图片切割后的子图像集合):自定义结构体&struct Node ,其中包括Image对象用来存储单元小图片,和用整形存储的编号(切割以后,每个小单元都弄个编号,利于检验游戏是否完成)。
      各单元(原图片切割后的子图像集合):使用二维数组(像拼图,五子棋,消消乐,连连看,俄罗斯方块等平面点阵游戏都可以用他来存储,为什么?因为长得像嘛!)来存储
      难度:使用自定义的枚举类型(简单and普通and困难)存储
      步数:整形变量 int Num存储 
  有了存储,我们就可以去思考模块的划分(正确的逻辑划分已于扩展,也可以使通信变得更加清晰)并搭建,并实现各模块涉及到的具体算法
& & & 首先程序的模块分为四个:
  逻辑型:
    1.拼图类:用于描述拼图
    2.配置类:存储配置变量
  交互型:
    3.游戏菜单窗口:进行菜单选项
    4.游戏运行窗口:游戏的主要界面
  1.通过游戏菜单可以操纵配置,如难度或图片。
  2.运行窗口可以访问并获得游戏配置,并利用其对应构造拼图对象。
  3.用户通过运行窗口进行交互,间接使拼图对象调用移动方法,获得图案方法
  看代码的同学,我觉得最有问题的地方,不合理的地方就是把 难度的枚举类型写在了拼图类中,应该写在配置类中,或单独成类,读者们自行更改
public enum Diff
//游戏难度
simple,//简单
ordinary,//普通
difficulty//困难
我们可以认为,配置类就像数据存储,而拼图类呢作为逻辑处理,菜单和运行窗口作为表现用于交互,我承认这种设计不是很合理,但是在问题规模不够大的时候,过分的考虑设计,会不会使程序变得臃肿?我想一定是有一个度,具体是多少,我不得而知,但我感觉,针对这个程序,实现就好,沉迷设计(套路型),有时得不偿失。(个人不成熟的小观点)
(三)代码实现:
  说明:本块重点描述&Puzzle(拼图)类与游戏运行类的具体实现及实体通讯:
拼图的构造方法:
  & 1.赋值 :
public Puzzle(Image Img,int Width, Diff GameDif)// 拼图的图片,宽度(解释:正方形的边长,单位是像素,名字有歧义,抱歉),游戏的难度
 游戏的难度决定你分割的程度,分割的程度,决定你存储的数组的大小,如简单对应3行3列,普通对应5行5列,困难对应9行9列
switch(this._gameDif)
case Diff.simple:    //简单则单元格数组保存为3*3的二维数组
this.N = 3;
node=new Node[3,3];
case Diff.ordinary:  
//一般则为5*5
this.N = 5;
node = new Node[5, 5];
case Diff.difficulty:  //困难则为9*9
this.N = 9;
node = new Node[9, 9];
2.分割图片
//分割图片形成各单元保存在数组中
int Count = 0;
for (int x = 0; x & this.N; x++)
for (int y = 0; y & this.N; y++)
node[x, y].Img = CaptureImage(this._img, this.Width / this.N, this.Width / this.N, x * (this.Width / this.N), y * (this.Width / this.N));
node[x, y].Num = C
&其实对单元数组进行赋值的过程,使用双层for循环对二维数组进行遍历操作,然后按序赋值编号node[x,y].N
然后对node[x,y].Img,也就是单元的小图片赋值,赋值的方法是,C#的图像的类库,写一个截图方法,使用这个方法,将大图中对应对位置的对应大小的小图截取下来,并保存在node[x,y].Img中;
width/N是什么?是边长除以行数,也就是间隔嘛,间隔也就是每个单元的边长嘛!然后起始坐标(X,Y)起始就是在说,隔了几个单元后,我的位置,
即 :(x,y)=(单元边长*距离起始X轴相距单元数,单元边长*距离起始点Y轴相距单元数);
关于此类问题,希望读者能够多画画图,然后自然就明白了;
Image CaptureImage(Image fromImage, int width, int height, int spaceX, int spaceY)
主要逻辑:利用DrawImage方法:
//创建新图位图
Bitmap bitmap = new Bitmap(width, height);
//创建作图区域
Graphics graphic = Graphics.FromImage(bitmap);
//截取原图相应区域写入作图区
graphic.DrawImage(fromImage, 0, 0, new Rectangle(x, y, width, height), GraphicsUnit.Pixel);
//从作图区生成新图
Image saveImage = Image.FromHbitmap(bitmap.GetHbitmap());
分割了以后,我们要做一个特殊处理,因为我们知道,总有那么一个位置是白的吧?我们默认为最后一个位置,即node[N-1,N-1];
就是写改成了个白色的图片,然后四周的边线都给画成红色,已于被人发现,显著一些,之前的其他单元我也画了边线,但是是白色,也是为了在拼图的观赏性上得到区分。该代码不做介绍。
3.打乱图片:
其实就是将二维数组打乱,我们可以采取一些排序打乱方法,但是请注意!不是每一种打乱都能够复原的!
那么如何做到可行呢?方法理解起来很简单,就是让我们的电脑在开局之前,将完整的有序的单元按照规则中提供的行走方式进行无规则,大次数的行走!也就是说这种方法一定能走回去!
先理解,具体打乱方法,在后面讲解。
移动方法(Move):
拼图游戏中方格的移动,其实就是两个相邻单元的交换,而这两个单元中,必定存在一个白色单元(即上面提到的node[N-1,N-1]单元,他的编号为N*N-1,建议自己动笔算一算)
所以我们的判断条件是,如果移动一个方块,他的上下左右四个方向中,一旦有一个相邻的是白色单元,即N*N-1号单元,则与其交换。这是基本逻辑,但不包括约束条件,当我们的数组达到边界的时候,我们就不能对越界数据进行访问,如当单元为node[0,0]时,你就不能对他上面和右面的数据进行访问,因为Node[-1,0]&Node[0,-1]都会越界,发生异常
移动成功,返回TRUE&
移动失败,返回FALSE
/// &summary&
/// 移动坐标(x,y)拼图单元
/// &/summary&
/// &param name="x"&拼图单元x坐标&/param&
/// &param name="y"&拼图单元y坐标&/param&
public bool Move(int x,int y)
//MessageBox.Show(" " + node[2, 2].Num);
if (x + 1 != N && node[x + 1, y].Num ==
N * N - 1)
Swap(new Point(x + 1, y), new Point(x, y));
if (y + 1 != N && node[x, y + 1].Num ==
N * N - 1)
Swap(new Point(x, y + 1), new Point(x, y));
if (x - 1 != -1 && node[x - 1, y].Num == N * N - 1)
Swap(new Point(x - 1, y), new Point(x, y));
if (y - 1 != -1 && node[x, y - 1].Num == N * N - 1)
Swap(new Point(x, y - 1), new Point(x, y));
  交换方法(Swap):交换数组中两个元素的位置,该方法不应该被类外访问,顾设置为private私有权限
//交换两个单元格
void Swap(Point a, Point b)
Node temp = new Node();
temp = this.node[a.X, a.Y];
this.node[a.X, a.Y] = this.node[b.X, b.Y];
this.node[b.X, b.Y] =
打乱方法:
&前面提到,其实就是让电脑帮着乱走一通,说白了就是大量的调用Move(int X,int y)方法,也就是对空白位置的上下左右四个相邻的方块中随机抽取一个,并把它的坐标传递给Move使其进行移动,同样要进行越界考虑,这样的操作大量重复!代码自己看吧 ,利用随机数。
/// &summary&
/// 打乱拼图
/// &/summary&
public void Upset()
int sum = 100000;
if (this._gameDif == Diff.simple) sum = 10000;
//if (this._gameDif == Diff.ordinary) sum = 100000;
Random ran = new Random();
for (int i = 0, x = N - 1, y = N - 1; i & i++)
long tick = DateTime.Now.T
ran = new Random((int)(tick & 0xffffffffL) | (int)(tick && 32)|ran.Next());
switch (ran.Next(0, 4))
if (x + 1 != N)
Move(x + 1, y);
x = x + 1;
if (y + 1 != N)
Move(x, y + 1);
y = y + 1;
if (x - 1 != -1)
Move(x - 1, y);
x = x - 1;
if (y - 1 != -1)
Move(x, y - 1);
y = y - 1;
返回图片的方法:
当时怎么起了个这样的鬼名字。。。DisPlay。。。
这个方法与分割方法刚好相背,这个方法其实就是遍历数组,并将其进行组合,组合的方法很简单,就是将他们一个一个的按位置画在一张与原图相等大小的空白图纸上!最后提交图纸,也就是return一个I
public Image Display()
Bitmap bitmap = new Bitmap(this.Width, this.Width);
//创建作图区域
Graphics newGra = Graphics.FromImage(bitmap);
for (int x = 0; x & this.N; x++)
for (int y = 0; y & this.N; y++)
newGra.DrawImage(node[x, y].Img, new Point(x * this.Width / this.N, y * this.Width / this.N));
同样利用的是DrawImage方法,知道如何分割,这个应该很容易理解,自己算一算,在纸上比划比划就明白了;
判断方法:
该方法很容易理解,就是按序按序!遍历所有单元,如果他们的结果中有一个单元的编号
node[x, y].Num 不等于遍历的序号,那么说明,该单元不在原有位置上,即整个图片还没有完成,我们就可以直接返回假值false如果所有遍历结果都正确,我们可认为,图片已复原,此时返回真值true
public bool Judge()
int count=0;
for (int x = 0; x & this.N; x++)
for (int y = 0; y & this.N; y++)
if (this.node[x, y].Num != count)
游戏运行窗口:即游戏玩耍时用于交互的窗口
这里只讲一个方法:即当接受用户鼠标点击事件时我们应该怎么处理并作出什么样反应
其实说白了就这句难懂:
puzzle.Move(e.X / (puzzle.Width / puzzle.N), e.Y / (puzzle.Width / puzzle.N))调用了移动方法,移动方块横坐标为:e.X / (puzzle.Width / puzzle.N)
纵坐标为:e.Y / (puzzle.Width / puzzle.N)我们编程中的整数除法和数学里的除法是不一样的!比如10/4数学上等于2余2或者2.5,计算机里直接就是等于2了,只取整数部分
行数=行坐标 / 方块边长
列数=列坐标 / 方块边长
我们看P1,P2这两点
P1:40/30*30=1P2:50/30*30=1
我们会发现同在一个单元格中,无论点击哪个位置,通过这个算法都能转化为同一个坐标。
(e.x,e.y)为鼠标点击事件点击坐标
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
if (puzzle.Move(e.X / (puzzle.Width / puzzle.N), e.Y / (puzzle.Width / puzzle.N)))
pictureBox1.Image = puzzle.Display();
if (puzzle.Judge())
if (MessageBox.Show("恭喜过关", "是否重新玩一把", MessageBoxButtons.OKCancel) == DialogResult.OK)
puzzle.Upset();
pictureBox1.Image = puzzle.Display();
closefather();
this.Close();
NumLabel.Text = Num.ToString();
&好,那么大体的逻辑,程序中最需要思考的算法已经讲完了,还有不太懂的地方,欢迎交流~么么哒~
加了点小功能 音乐历史成绩&
[Ctrl+Enter快捷键提交]
最新IT新闻:&&&&&&&&&&&&
最新知识库文章:
&&&&&&&&&&
阅读(...) 评论()
随笔 - 16519
评论 - 1550为什么电脑不能看视频了,还出现拼图一样的图案。_百度知道
为什么电脑不能看视频了,还出现拼图一样的图案。
我有更好的答案
应该你电脑里装了chorme或者基于chorme内核(比如360极速)的浏览器,它本身自带有flash播放器与第三方插件冲突了,你在浏览器中输入chrome://plugins/,在下面能找到Flash (2 files) - 版本: 11,1,102,63,你应该也能注意到2
files,点击右上角的详细信息在Flash (2 files) - 版本: 11,1,102,63,选择停用一个,希望能帮到你
采纳率:62%
先更换一个播放器试试,,如果是在线观看的可能需要更新一些插件。。。如果还是不行的话应该是显卡的问题了,,,刚开机的时候可能问题不明显,,如果长时间看问题越来越严重的话明显是因为显卡散热问题引起的。
我是在线看的,暂停了很久,然后就不能看了,试了其他视频网站,有些可以看,有些不能,不能看的网页上还出现了“无法加载shockwave flash”。刚刚试了一下,没问题,可以看了。
本回答被提问者采纳
原因:网速问题。(如网络不稳定,网速低)视频播放源存在问题。插件异常。(Adode Flash Player未正确安装)显卡驱动异常。(显卡驱动未正确安装或未安装)解决方案:通过关闭无用程序或使用安全软件中的限制网速的方法提高网速确保视频播放源能达到播放要求。下载最新版Adode Flash Player并安装。下载驱动精灵,安装最新版驱动。(驱动精灵下载地址。注:安装时如无特别需求下载标准版即可)
你显卡有问题了!
显卡有问题要怎么办。。。而且我发现某些网站的视频还是可以看的,刚刚不能看的视频是我暂停了很久的。之前也出现过类似的问题,过了一会儿又可以看了,还是显卡的问题吗。。。我说了那么多你能懂我的意思吗?
嗯,是呀,显卡的问题
无法加载shockwave flash,这是什么意思。。。
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
看视频的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。帖子很冷清,卤煮很失落!求安慰
手机签到经验翻倍!快来扫一扫!
没有广角怎么办?拼图,小白照4张拼1张
3618浏览 / 18回复
器材:&[]&&:Canon EF70-200mm f/2.8L USM时间: 18:17:39&&快门:1/500&&光圈:F/2.8&&焦距:70毫米&&感光度:100&&P1器材:&[]&&镜头:Canon EF70-200mm f/2.8L USM时间: 18:17:40&&快门:1/500&&光圈:F/2.8&&焦距:70毫米&&感光度:100&&P2器材:&[]&&镜头:Canon EF70-200mm f/2.8L USM时间: 18:17:42&&快门:1/500&&光圈:F/2.8&&焦距:70毫米&&感光度:100&&P3器材:&[]&&镜头:Canon EF70-200mm f/2.8L USM时间: 18:17:45&&快门:1/500&&光圈:F/2.8&&焦距:70毫米&&感光度:100&&P4P1+P2+P3+P4
对 楼主 爱摄哥 说:=========================欣赏支持好友的小白精华之作!
对 第1楼 行天下摄 说:=========================谢谢点评支持哈。。
还在熟悉这个镜头中哦。。
强大,欣赏支持好友佳作。
拼接得真自然,请问是什么软件??
对 第4楼 chen 说:=========================佳能的自带软件哈。。
嘿嘿,佳能的软件我试了一下感觉有点别扭就没用,请问好用吗???
接缝太明显了
对 楼主 爱摄哥 说:=========================挺好的,支持。
还是可以隐约看出接缝处,如果用佳能的种植带软件出相片,在PS上接,效果一流。
效果不错哦,接缝有点明显
用心良作。
接缝处真的很明显
镜头有暗角吗 怎么感觉拼接的地方发黑呢
欣赏,学习
清晰漂亮,精彩拍摄,欣赏支持好友
全景图用PS感觉好一点
楼主片子接的好过度自然,欣赏学习
用户名/注册邮箱/注册手机号
其他第三方号登录(Darkandshrewd)
(Darkandshrewd)
(骆驼眯眯眼)
(望穿流年的双眼)
(Darkandshrewd)
第三方登录:

我要回帖

更多关于 从来都没有忘记过 的文章

 

随机推荐