丝绸之路游戏里面的安卓美女拼图图怎么玩的?我怎么弄不出…

丝绸之路无敌版
类型:|大小:4M|语言:中文|已经有
丝绸之路无敌版游戏简介:
丝绸之路无敌版,在丝绸之路正式版的基础上发展而来,无敌版中,镖师、魔法师、祭祀三大职业的生命、魔法大大提升,可以无限施放法术技能。邪恶的魔物不断的侵袭、威胁着三大古国——中国、波斯、罗马。三大古国都陷入混乱的局面,导致亚洲和欧洲文化经济的交流中枢——丝绸之路危险重重,遭受魔物袭击。在广阔无边的丝绸之路上,时常会出现络绎不绝的商队;还有掠夺财物为目的的恶党,当然这其间也活跃着热衷于除恶扬善的镖师,各个势力为了其所属集团的利益明争暗斗,为丝绸之路注入了无限的生命力。在中国的一个小村庄出现一位握有希望之钥匙的镖师,而高级祭祀们与魔法师知道了他的出现并开始寻找这位少年,试图统治世界的邪恶势力也开始行动起来。在丝绸之路上,镖师与祭祀、魔法师一起帮商人们完成护送任务,消除路上的妖魔鬼怪,为人们开辟一条安全可靠的新丝路。
据说10个人进来就有8个人记住了1122小游戏的网址
直接在浏览器输入
或百度搜下
1122小游戏 又能玩啦!
丝绸之路无敌版游戏目标:
完成丝绸之路护送任务。
如何开始:
点击【新游戏】--选择人物--【进入游戏】--选择关卡开始游戏。
丝绸之路无敌版攻略玩法:
单人:lr移动up跳跃JKL三种技能;双人::AD移动W跳跃UIO三种技能:lr移动up跳跃123三种技能
丝绸之路无敌版相关游戏推荐
玩过丝绸之路无敌版的还喜欢
最新发布小游戏
1[冒险]2[冒险]3[冒险]4[冒险]5[冒险]6[冒险]7[冒险]8[冒险]9[冒险]10[冒险]11[冒险]12[冒险]13[冒险]14[冒险]15[冒险]1617181920
小游戏专题推荐18489人阅读
【Android 原生开发游戏】(2)
【Android 自定义控件实战】(28)
【android 进阶之路】(66)
转载请标明出处:,本文出自:1、概述继2048之后,今天给大家带来一个拼图游戏,当然了不是很传统那个缺一块的拼图,那游戏我不会玩~~所有我们换个方式玩拼图,怎么玩呢,把图片且成很多份,点击交换拼成一张完整的;这样关卡也很容易设计,3*3;4*4;5*5;6*6;...一直下去....博客产生的原因是,没事在网上逛看到一个图片切片的辅助类,类很简单,上面说了一句,如果做拼图游戏的话可以用到,然后,我们就用到了~~至于效果是这样的:加了个切换动画,效果还是不错的~~其实游戏就是自定义了一个控件,下面我们开始自定义之旅~~2、游戏的设计首先我们分析下如何设计这款游戏:1、我们需要一个容器,可以放这些图片的块块,为了方便,我们准备使用RelativeLayout配合addRule实现2、每个图片的块块,我们准备使用ImageView3、点击交换,我们准备使用传统的TranslationAnimation来实现有了初步的设计,感觉这游戏so easy~3、游戏布局的实现首先,我们准备实现能够把一张图片,切成n*n份,放在指定的位置;我们只需要设置n这个数字,然后根据布局的宽或者高其中的小值,除以n,减去一些边距就可以得到我们ImageView的宽和高了~~1、构造方法:/**
* 设置Item的数量n*n;默认为3
private int mColumn = 3;
* 布局的宽度
private int mW
* 布局的padding
private int mP
* 存放所有的Item
private ImageView[] mGamePintuI
* Item的宽度
private int mItemW
* Item横向与纵向的边距
private int mMargin = 3;
* 拼图的图片
private Bitmap mB
* 存放切完以后的图片bean
private List&ImagePiece& mItemB
public GamePintuLayout(Context context)
this(context, null);
public GamePintuLayout(Context context, AttributeSet attrs)
this(context, attrs, 0);
public GamePintuLayout(Context context, AttributeSet attrs, int defStyle)
super(context, attrs, defStyle);
mMargin = (int) TypedValue.PLEX_UNIT_DIP,
mMargin, getResources().getDisplayMetrics());
// 设置Layout的内边距,四边一致,设置为四内边距中的最小值
mPadding = min(getPaddingLeft(), getPaddingTop(), getPaddingRight(),
getPaddingBottom());
}构造方法里面,我们得到把设置的margin值转化为dp;获得布局的padding值;整体是个正方形,所以我们取padding四个方向中的最小值;至于margin,作为Item之间的横向与纵向的间距,你喜欢的话可以抽取为自定义属性~~2、onMeasure@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// 获得游戏布局的边长
mWidth = Math.min(getMeasuredHeight(), getMeasuredWidth());
if (!once)
initBitmap();
initItem();
setMeasuredDimension(mWidth, mWidth);
}onMeasure里面主要就是获得到布局的宽度,然后进行图片的准备,以及初始化我们的Item,为Item设置宽度和高度initBitmap自然就是准备图片了:private void initBitmap()
if (mBitmap == null)
mBitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.aa);
mItemBitmaps = ImageSplitter.split(mBitmap, mColumn);
Collections.sort(mItemBitmaps, new Comparator&ImagePiece&()
public int compare(ImagePiece lhs, ImagePiece rhs)
return Math.random() & 0.5 ? 1 : -1;
}我们这里如果没有设置mBitmap就准备一张备用图片,然后调用ImageSplitter.split将图片切成n * n 返回一个List&ImagePiece&切完以后,我们需要将顺序打乱,所以我们调用了sort方法,至于比较器,我们使用random随机比较大小~~这样我们就完成了我们的乱序操作,赞不赞~~public class ImageSplitter
* 将图片切成 , piece *piece
* @param bitmap
* @param piece
public static List&ImagePiece& split(Bitmap bitmap, int piece)
List&ImagePiece& pieces = new ArrayList&ImagePiece&(piece * piece);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Log.e(&TAG&, &bitmap Width = & + width + & , height = & + height);
int pieceWidth = Math.min(width, height) /
for (int i = 0; i & i++)
for (int j = 0; j & j++)
ImagePiece imagePiece = new ImagePiece();
imagePiece.index = j + i *
int xValue = j * pieceW
int yValue = i * pieceW
imagePiece.bitmap = Bitmap.createBitmap(bitmap, xValue, yValue,
pieceWidth, pieceWidth);
pieces.add(imagePiece);
}public class ImagePiece
public int index = 0;
public Bitmap bitmap =
}没撒说的就是一个根据宽度高度,和n,来切图保存的过程~~ImagePiece保存的图片以及索引~~话说这两个类还是我无意中在网上发现的~~图片到此就准备好了,现在看Item的生成已经设置宽高,即initItemsprivate void initItem()
// 获得Item的宽度
int childWidth = (mWidth - mPadding * 2 - mMargin * (mColumn - 1))
mItemWidth = childW
mGamePintuItems = new ImageView[mColumn * mColumn];
// 放置Item
for (int i = 0; i & mGamePintuItems. i++)
ImageView item = new ImageView(getContext());
item.setOnClickListener(this);
item.setImageBitmap(mItemBitmaps.get(i).bitmap);
mGamePintuItems[i] =
item.setId(i + 1);
item.setTag(i + &_& + mItemBitmaps.get(i).index);
RelativeLayout.LayoutParams lp = new LayoutParams(mItemWidth,
mItemWidth);
// 设置横向边距,不是最后一列
if ((i + 1) % mColumn != 0)
lp.rightMargin = mM
// 如果不是第一列
if (i % mColumn != 0)
lp.addRule(RelativeLayout.RIGHT_OF,//
mGamePintuItems[i - 1].getId());
// 如果不是第一行,//设置纵向边距,非最后一行
if ((i + 1) & mColumn)
lp.topMargin = mM
lp.addRule(RelativeLayout.BELOW,//
mGamePintuItems[i - mColumn].getId());
addView(item, lp);
}可以看到我们的Item宽的计算:childWidth = (mWidth - mPadding * 2 - mMargin * (mColumn - 1) )&/ mC容器的宽度,除去自己的内边距,除去Item间的间距,然后除以Item一行的个数就得到了Item的宽~~接下来,就是遍历生成Item,根据他们的位置设置Rule,自己仔细看下注释~~注意两点:我们为Item设置了setOnClickListener,这个当然,因为我们的游戏就是点Item么~还有我们为Item设置了Tag:item.setTag(i + &_& + mItemBitmaps.get(i).index); &tag里面存放了index,也就是正确的位置;还有i,i 可以帮助我们在mItemBitmaps找到当前的Item的图片:(mItemBitmaps.get(i).bitmap)到此,我们游戏的布局的代码就结束了~~~然后我们在布局文件里面声明下:&RelativeLayout xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent& &
&com.zhy.gamePintu.view.GamePintuLayout
android:id=&@+id/id_gameview&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:layout_centerInParent=&true&
android:padding=&5dp& &
&/com.zhy.gamePintu.view.GamePintuLayout&
&/RelativeLayout&Activity里面记得设置这个布局~~现在的效果是:换了个风景图,感觉好清爽啊~~我们的切图,布局已经完成了,是不是很简单;而且感觉我们的游戏已经完成了一大半了呀~~~剩下无非就是Item的click的处理。4、游戏的切换效果1、初步的切换还记得我们都给Item添加了onClick的监听么~~现在我们需要实现,点击两个Item,他们的图片能够发生交换~那么,我们需要两个成员变量来存储这两个Item,然后再去交换 private ImageView mF
private ImageView mS
public void onClick(View v)
* 如果两次点击是同一个
if (mFirst == v)
mFirst.setColorFilter(null);
//点击第一个Item
if (mFirst == null)
mFirst = (ImageView)
mFirst.setColorFilter(Color.parseColor(&#55FF0000&));
} else//点击第二个Item
mSecond = (ImageView)
exchangeView();
}点击第一个,通过setColorFilter设置下选中效果,再次点击另一个,那我们就准备调用exchangeView进行交换图片了,当然这个方法我们还没写,先放着~如果两次点击同一个,去除选中效果,我们就当什么都没发生。接下来,我们来实现exchangeView:/**
* 交换两个Item的图片
private void exchangeView()
mFirst.setColorFilter(null);
String firstTag = (String) mFirst.getTag();
String secondTag = (String) mSecond.getTag();
//得到在list中索引位置
String[] firstImageIndex = firstTag.split(&_&);
String[] secondImageIndex = secondTag.split(&_&);
mFirst.setImageBitmap(mItemBitmaps.get(Integer
.parseInt(secondImageIndex[0])).bitmap);
mSecond.setImageBitmap(mItemBitmaps.get(Integer
.parseInt(firstImageIndex[0])).bitmap);
mFirst.setTag(secondTag);
mSecond.setTag(firstTag);
mFirst = mSecond =
}应该还记得我们之前的setTag吧,忘了,返回去看看,我们还说注意来着~通过getTag,拿到在List中是索引,然后得到bitmap进行交换设置,最后交换tag;到此我们的交换效果写完了,我们的游戏可以完了~~效果是这样的:可以看到我们已经可以玩了~~~至于为什么不用清爽的风景图,是因为,实在是看不出来那块对那块,还是妹子直观~大家肯定会吐槽,我擦,动画切换呢,明明不是两个飞过去交换位置么,尼玛这算什么~~~也是,对与程序我们要有追求,下面我们来添加动画切换效果~~2、无缝的动画切换我们先聊聊怎么添加,我准备使用TranslationAnimation,然后两个Item的top,left也很容器获取;但是,要明白,我们实际上,Item只是setImage发生了变化,Item的位置没有变;我们现在需要动画移动效果,比如A移动到B,没问题,移动完成以后,Item得回去吧,但是图片并没有发生变化,我们还是需要手动setImage这样造成了一个现象,动画切换效果有了,但是最后还是会有一闪,是我们切换图片造成的;为了避免上述现象,能够完美的做到切换效果,这里我们引入一个动画图层,专门做动画效果,有点类似ps的图层,下面看我们怎么做;/**
* 动画运行的标志位
private boolean isA
private RelativeLayout mAnimL
* 交换两个Item的图片
private void exchangeView()
mFirst.setColorFilter(null);
setUpAnimLayout();
// 添加FirstView
ImageView first = new ImageView(getContext());
first.setImageBitmap(mItemBitmaps
.get(getImageIndexByTag((String) mFirst.getTag())).bitmap);
LayoutParams lp = new LayoutParams(mItemWidth, mItemWidth);
lp.leftMargin = mFirst.getLeft() - mP
lp.topMargin = mFirst.getTop() - mP
first.setLayoutParams(lp);
mAnimLayout.addView(first);
// 添加SecondView
ImageView second = new ImageView(getContext());
second.setImageBitmap(mItemBitmaps
.get(getImageIndexByTag((String) mSecond.getTag())).bitmap);
LayoutParams lp2 = new LayoutParams(mItemWidth, mItemWidth);
lp2.leftMargin = mSecond.getLeft() - mP
lp2.topMargin = mSecond.getTop() - mP
second.setLayoutParams(lp2);
mAnimLayout.addView(second);
// 设置动画
TranslateAnimation anim = new TranslateAnimation(0, mSecond.getLeft()
- mFirst.getLeft(), 0, mSecond.getTop() - mFirst.getTop());
anim.setDuration(300);
anim.setFillAfter(true);
first.startAnimation(anim);
TranslateAnimation animSecond = new TranslateAnimation(0,
mFirst.getLeft() - mSecond.getLeft(), 0, mFirst.getTop()
- mSecond.getTop());
animSecond.setDuration(300);
animSecond.setFillAfter(true);
second.startAnimation(animSecond);
// 添加动画监听
anim.setAnimationListener(new AnimationListener()
public void onAnimationStart(Animation animation)
isAniming =
mFirst.setVisibility(INVISIBLE);
mSecond.setVisibility(INVISIBLE);
public void onAnimationRepeat(Animation animation)
public void onAnimationEnd(Animation animation)
String firstTag = (String) mFirst.getTag();
String secondTag = (String) mSecond.getTag();
String[] firstParams = firstTag.split(&_&);
String[] secondParams = secondTag.split(&_&);
mFirst.setImageBitmap(mItemBitmaps.get(Integer
.parseInt(secondParams[0])).bitmap);
mSecond.setImageBitmap(mItemBitmaps.get(Integer
.parseInt(firstParams[0])).bitmap);
mFirst.setTag(secondTag);
mSecond.setTag(firstTag);
mFirst.setVisibility(VISIBLE);
mSecond.setVisibility(VISIBLE);
mFirst = mSecond =
mAnimLayout.removeAllViews();
//checkSuccess();
isAniming =
* 创建动画层
private void setUpAnimLayout()
if (mAnimLayout == null)
mAnimLayout = new RelativeLayout(getContext());
addView(mAnimLayout);
private int getImageIndexByTag(String tag)
String[] split = tag.split(&_&);
return Integer.parseInt(split[0]);
}开始交换时,我们创建一个动画层,然后在这一层上添加上两个一模一样的Item,把原来的Item隐藏了,然后尽情的进行动画切换,setFillAfter为true~动画完毕,我们已经悄悄的把Item的图片交换了,直接显示出来。这样就完美的切换了:大致过程:1、A ,B隐藏&2、 A副本动画移动到B的位置;B副本移动到A的位置3、A把图片设置为B,把B副本移除,A显示,这样就完美切合了,用户感觉是B移动过去的。4、B同上现在我们的效果:现在效果满意了把~~为了防止用户狂点,在onClick里面添加一句:@Override
public void onClick(View v)
// 如果正在执行动画,则屏蔽
if (isAniming)
到此我们的动画的切换,已经完美结束了~~切换时,我们是不是应该判断是否成功了~~5、游戏胜利的判断我们在切换完成,进行checkSuccess();的判断;好在我们把图片的正确的顺序存在tag里面~~/**
* 判断游戏是否成功
private void checkSuccess()
boolean isSuccess =
for (int i = 0; i & mGamePintuItems. i++)
ImageView first = mGamePintuItems[i];
Log.e(&TAG&, getIndexByTag((String) first.getTag()) + &&);
if (getIndexByTag((String) first.getTag()) != i)
isSuccess =
if (isSuccess)
Toast.makeText(getContext(), &Success , Level Up !&,
Toast.LENGTH_LONG).show();
// nextLevel();
* 获得图片的真正索引
* @param tag
private int getIndexByTag(String tag)
String[] split = tag.split(&_&);
return Integer.parseInt(split[1]);
}很简单,遍历所有的Item,根据Tag拿到真正的索引和当然顺序比较,完全一致则胜利~~胜利以后进入下一关。至于下一关的代码:public void nextLevel()
this.removeAllViews();
mAnimLayout =
mColumn++;
initBitmap();
initItem();
}ok,到此我们的游戏结束了,我来带大家闯个关:特意留了一步,让我 level up ~~希望大家不管是游戏还是技术都可以level up !!!由于篇幅原因,时间的限制及显示,就不带大家做了,大家觉得有必要就自己添加下~~----------------------------------------------------------------------------------------------------------博主部分视频已经上线,如果你不喜欢枯燥的文本,请猛戳(初录,期待您的支持):
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
积分:41877
积分:41877
排名:第61名
原创:190篇
评论:11977条
长期为您推荐优秀博文、开源项目、视频等,进入还有好玩的等着你,欢迎扫一扫。
请勿重复加群,Thx
文章:11篇
阅读:145873
文章:10篇
阅读:87498
文章:67篇
阅读:4399562橙光游戏三妻四妾里面的拼图怎么过?_百度知道女朋友让我陪她玩玩拼图游戏什么意思?说不弄完不让我走不让吃饭_百度知道后使用快捷导航没有帐号?
查看: 7097|回复: 11
教你怎么玩唐门密室的拼图游戏
帖子威望金砖
LV.1, 积分 4, 距离下一级还需 27 积分
& &这两天一直想发点有价值的帖子的,因为一般早上我会打开Ipad,在床上看看多玩的文章,和178论坛的文章。有的作者真的非常认真的打了很多字,文笔也很顺畅,看得出他们的用心。 仅举两例,蔷薇之花错写的XX们怎么去打竞技场的文章。那个时候,我还在策马江湖区的,恰恰过不久合区到蝶恋花,我就带着崇敬的心加了她为好友,在扬州的护城河的桥上,第一次见到这个拿着轻离的XX。文章题目叫《剑3云裳七秀竞技场保命及辅助进攻指南》,地址为:大家有时间看看!
& && &&&第二个例子,文章叫《末日成殇:综合心得 再看PVE离经万花的种种》,用非常不错的语言写了份详细的感悟和心得,文章很细很长,比金山官方的职业介绍要更有价值十倍百倍。它值得所有打算玩万花的新手看看,也适合那些对游戏职业一知半解的,玩不出犀利职业的人看看。
& && &&&自7月份策马江湖开区来,我也玩了7个月了。朋友A的A散的散,有时一个人骑着马在城里发呆,打本也累了,PVP也倦了,攻防要排队也不想去了。去了的时候,也是个个为了刷那所谓的战阶,莫名其妙的冲,小心翼翼的保命,只听着阵营指挥喊着抱团,喊着藏剑刮风车,和尚扔悬钟,剑纯爆气场。我自己就是剑纯,在攻防里都屏蔽气场了,真的不知道自己往前聂云一步过去,扔个人剑合一,我还能做什么。这真的不是我们想象中的武侠江湖。
& && &&&于是,我就来谢谢文章。先从唐门密室说起吧。
& && &&&发现有很多可爱的女生不会玩拼图,希望我的讲解能让你立即成为过关高手。(如果看不到照片,请用YY账号登录)
& && &&&原图照片如下:
& && & 图片很简单,我先给他标记个位置,方便叙述。第一排为A1,A2,A3,第二排为B1,B2,B3,如下:
& &&&如果你想把A1的格子,挪到A2的位置,那么,先左键点一下A1,再点一下A2,就可以了。其实就相当于,这2个格子的位置交换了。
& &&&那么,如果记住这几个格子的特征,挪动起来就再简单不过了。假设图片被打乱后,按以下特征和顺序来找图片格子:
& & 先把第一排3个格子正确的格子找到,A1格子右下角有个小尖,A3格子左下角有个小尖,A2格子则是塔的顶盖,特征很好认的。
& &找到这3个特征的格子后,点它一下,再在它上面的格子上点一下,就把它往上移动了一行。依次把这3个格子排在第一行,位置正确。就好了。
& &同样的道理,按如下特征,从剩下的6个格子里(全部分布在第二行和第三行),把B1,B2,B3找出来。原来在第二行的就不用管,原来在第三行的,就向上移动一行。然后把B1放到最左边一列,B2和B3,就只剩下这2个了。如果它们位置不对,就点2下,交换一下就OK。
& &B1右边有塔的图案,B3左边有塔的图案。就这么简单。
& & 最后剩下的3个格子,记得把中间的那个摆对。如果C1(第三列我就不在图片里写标记C1了)恰恰就是在最左边,那么,系统立即提示你完成了任务。
& & 如果系统没有提示拼图已完成,那说明C1和C3的位置,需要交换一下,就是把最左边的,和最右边的交换一下。
& & 很简单,直接点C1一下,再点一下C2,就把C1移到中间了。再点一下中间格子,然后点一下最右边的格子,就把C1移到最右边了。
& & 最后需要点2下鼠标,把你此时的最左边、中间这2个格子,交换一下。拼图完成。
& & 感谢和怀念那些离开的朋友们。蝶恋花:鱼尺素(剑纯)——棠晓星(小唐门)
帖子威望金砖
字多……好累…………
这种事情还是让给队友来吧~
~。~&&农夫山泉, a little sweet~
残暴的已A,得闲饮茶,LOL来2把,不要太想我哟~
帖子威望金砖
帖子威望金砖
这个好帖,要顶!!
帖子威望金砖
请不要跟我搭话。我讨厌你。
帖子威望金砖
其实重点是那个网址么党员上?
那些战场挂机的你们坑25人就行了,非得鞠躬尽瘁死而后已的坑完所有战场吗?
神农三国也就算了,云湖天池每个星期才一两次就不能歇歇么?
明明知道每天会被人骂无数遍卧槽还坚持日日全勤昂首挺胸迎接口水您上辈子一定是一只折翼的痰盂!
落雁峰/忆盈楼/三星望月
离经?&&冰心?&&太虚?
帖子威望金砖
现在改得这么简单还要教啊?
不过我就是不去开 别人去开我就能来看看论坛了
复制比较效率
帖子威望金砖
〓◆【妇联主任】◆〓
何以飘零去,何以少团栾,何以别离久,何以不得安?
这个论坛OL唯一正常的人,默默的注视着你们。
帖子威望金砖
看过你这贴的都不会想去拼图了
&&怀念最初的剑网3?那就点图吧!带你溯游而上。&&
帖子威望金砖
这么麻烦的事情 交给队友吧
悲剧的小明教
相爱一生(活动勋章)
逍遥社区专用
缘定剑侠贰
剑二/剑贰外传
社区到听图说专用
爱的礼物(活动勋章)
逍遥社区专用
剑网三图文
九天神话专用
九天神话三宫六院专用
九天神话专用
剑网3七夕缘
末日屠龙专用
九天粉丝勋章
九天神话专用
就我最得瑟
九天神话专用
卖萌不可耻
九天神话专用
九天神话专用
Powered by
Copyright & 2014 .All rights reserved.

我要回帖

更多关于 安卓美女拼图 的文章

 

随机推荐