- 浏览: 85221 次
- 性别:
- 来自: 北京
最新评论
-
gglhappy:
410631059@qq.com 楼主能给一下源码么
【原创】连连看Flex版设计与实现 -
gglhappy:
楼主能给一下源码么 邮箱:410631059@qq.com
【原创】连连看Flex版设计与实现 -
chen024:
求源码:我的邮箱chenfang65811395#126。co ...
【原创】连连看Flex版设计与实现 -
ml5271169588:
用不了,有源码吗 发QQ1543150073
【原创】Away3D图片墙 -
magensky:
齐齐兽好久没发技术和心得了
卖龙虾笔记
前一阵子为了练手,写了一个连连看的小游戏,主要的设计为棋盘类,位置类,棋子类,核心算法包,一些自定义事件和资源类。我称连连看中被点击的按钮为棋子,下面那个看不见的布局要用的东西我成为棋盘。这样设计一个小游戏主要也是为了降低耦合性,每个部分可以比较独立的变化而不影响其他的部分。比如,棋子随意变,棋盘也可以变为圆形,甚至五角星的,只要改变一个字段就可以方便的更改棋子的皮肤或者音乐。
核心算法主要写了一个随机分配的算法,就是保证每次玩的时候最后都要正好能全部消灭。连连看的死局这里暂时没有考虑。还有一个就是把判断两个棋子是否可以消除,我没有用网上介绍的递归算法,我用的“十字通路法”,我自己起的名字哈。我想这样来解释会清楚一些:
十字通路:
每个棋子拥有一个十字通路,就是它可以到达的上下左右,可以到达的意思就是路过的位置是空的或者是不可见的,类似一个十字一样。当然也可能不是“十”字,或者是个"T",总之就是遍历上下左右,碰壁为止,并整理记录下来X轴通路和Y轴通路。
判断两个棋子是否可以消除的条件:
1.两个棋子的图案必须要相同。
2.两个棋子最多通过两次“拐弯”可以到达。理解成我所谓的十字通路就是两个棋子的X(Y)轴通路可以直线相连。
以下是我用来测试的代码
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" layout="vertical" width="100%" height="100%" backgroundGradientAlphas="[0.8, 0.9]" backgroundGradientColors="[#736D6D, #070707]" xmlns:ns1="*" xmlns:ns2="com.chess.*" xmlns:ns3="com.board.*"> <mx:Style source="myCSS.css"/> <mx:Script> <![CDATA[ import mx.events.CloseEvent; import mx.core.UIComponent; import mx.controls.Alert; import com.coreAlg.CheckBoard; import com.coreAlg.connect.Connect; import com.coreAlg.connect.GetCross; import embed.embedImage.EtImage; import com.board.Board; import com.chess.Chess; import mx.containers.HBox; import MyEvent.MyClickEvent; import com.position.Position; import mx.containers.Canvas; import embed.embedSound.HappySound; //private var position:Position; private var board:Board=new Board(); public var eee:EtImage=EtImage.getInstance(); //图片资源类 //程序里有个缓冲区 private var firstImageSource:Class=null; //上一个棋子的图片源 private var firstX:int=-1; //上一个棋子的X坐标 private var firstY:int=-1; //上一个棋子的Y坐标 private var tempImageSource:Class=null; //储存刚刚点击棋子的图片源 private var tempX:int=-1; //储存刚刚点击棋子的X坐标 private var tempY:int=-1; //储存刚刚点击棋子的Y坐标 private var getc:GetCross=GetCross.getInstance(); private var conn:Connect=Connect.getInstance(); private var check:CheckBoard=CheckBoard.getInstance(); private var pan:UIComponent=new UIComponent(); //画路径的画笔 private var sound:HappySound=HappySound.getInstance(); private var pathArray:Array; private var pathPan:UIComponent=new UIComponent(); private var pathTimer:Timer=new Timer(50); private var myTimer:Timer=new Timer(1000); private var totalTime:int=0; private var xN:int = 6; private var yN:int = 5; //private var board:Board; private function init():void { board.xNum=xN; //宽 board.yNum=yN; //高 board.nkind=5; //图案种数 board.x=0; board.y=0; myCanvas.addChild(board); myCanvas.addChild(pan); MyClickEvent.dispatcher.addEventListener(MyClickEvent.CLICK_IMAGE, clickHandler); this.addEventListener(MyClickEvent.CLICK_IMAGE, clickHandler); myTimer.start(); myTimer.addEventListener(TimerEvent.TIMER, onTimer); } private function onTimer(event:TimerEvent):void { totalTime++; } private function alertClickHandler(event:CloseEvent):Boolean { if (event.detail == Alert.OK) { xN += 2; yN += 2; if(xN > 10) { Alert.show('thank u 4 play~!'); return false; } myTimer.stop(); myTimer.start(); myCanvas.removeChild(board); board=new Board(); trace('board.chessCompleted:'+board.chessCompleted); board.xNum=xN; //宽 board.yNum=yN; //高 board.nkind=xN; //图案种数 board.x=0; board.y=0; myCanvas.addChild(board); return true; } return true; } private function clickHandler(event:MyClickEvent):void { tempX=event.x; tempY=event.y; var firPosition:Position=new Position(firstX, firstY); var secPosition:Position=new Position(tempX, tempY); //查看当前点击的通路数组 /* trace('xCross:'); var tttArray:Array=(getc.getCross((board.chessArray[event.y][event.x] as Chess), board)).getItemAt(0) as Array; for (var ttt:int=0; ttt < tttArray.length; ttt++) { trace((tttArray[ttt] as Position).xPosition + ' ' + (tttArray[ttt] as Position).yPosition); } tttArray=(getc.getCross((board.chessArray[event.y][event.x] as Chess), board)).getItemAt(1) as Array; trace('yCross:'); for (ttt=0; ttt < tttArray.length; ttt++) { trace((tttArray[ttt] as Position).xPosition + ' ' + (tttArray[ttt] as Position).yPosition); } */ tempImageSource=(board.chessArray[event.y][event.x] as Chess).imageSource; //如果缓存ID不为空 且 缓存ID和点击的目标不是同一个 且 缓存ID和目标ID有通路 if ((isValidPosition(firstX, firstY)) && (!equalPosition(tempX, tempY, firstX, firstY)) && (conn.connect(board, firPosition, secPosition))) { //画出路径,并消除那两个棋子,再清空路径数组 clearIcons.play([this]); (board.chessArray[tempY][tempX] as Chess).disAppearState(); (board.chessArray[firstY][firstX] as Chess).disAppearState(); board.chessCompleted += 2; drawPath(); //清空缓存 firstX=-1; firstY=-1; firstImageSource=null; board.pathArray=new Array(); //清空path if (check.checkComplete(board)) { mx.controls.Alert.show("congratulations~,难度"+xN+'乘以'+yN+" 一共用时" + totalTime+'秒', '', Alert.OK, this, alertClickHandler); } } else { //trace('最终匹配不成功'); //trace('*************************************************'); //没有匹配成功刷新缓存 if (firstX != -1 && !equalPosition(tempX, tempY, firstX, firstY)) { (board.chessArray[firstY][firstX] as Chess).normalState(); } firstImageSource=tempImageSource; firstX=tempX; firstY=tempY; // } } } private function equalImageSource(tm:Class, fir:Class):Boolean { if (tm == fir) { //trace('图片相等'); return true; } //trace('图片不相等'); return false; } private function isValidPosition(tx:int, ty:int):Boolean { if (tx >= 0 && ty >= 0) { //trace('横纵坐标都大于0'); return true; } //trace('坐标小于0'); //trace('firstX:'+firstX+' '+'firstY:'+firstY); return false; } private function equalPosition(tx:int, ty:int, firx:int, firy:int):Boolean { if (tx == firx && ty == firy) { //trace('坐标相等'); return true; } //trace('坐标不相等'); return false; } private function drawPath():void { trace('board.pathArray.length:' + board.pathArray.length); pathTimer.start(); pathArray=board.pathArray; board.pathArray=null; var step:Position=pathArray.shift() as Position; trace('path.length:' + pathArray.length); myCanvas.addChild(pathPan); pathPan.graphics.clear(); pathPan.graphics.lineStyle(2, 0xFF0000); pathPan.graphics.moveTo(board.x + board.leftGap + (step.xPosition + 1) * (board.chessWidth + 2) - board.chessWidth / 2, board.y + board.topGap + (step.yPosition + 1) * (board.chessHeight + 2) - board.chessHeight / 2); pathTimer.addEventListener(TimerEvent.TIMER, drawLine) //pathPan.addEventListener(Event.ENTER_FRAME,drawLine); } private function drawLine(event:Event):void { if (pathArray.length > 0) { var step:Position=pathArray.shift() as Position; pathPan.graphics.lineTo(board.x + board.leftGap + (step.xPosition + 1) * (board.chessWidth + 2) - board.chessWidth / 2, board.y + board.topGap + (step.yPosition + 1) * (board.chessHeight + 2) - board.chessHeight / 2); } else { pathTimer.stop(); //pathPan.removeEventListener(Event.ENTER_FRAME,drawLine); myCanvas.removeChild(pathPan); } } ]]> </mx:Script> <mx:Canvas id="myCanvas" width="100%" height="100%"> </mx:Canvas> <mx:SoundEffect id="clearIcons" duration="2000" source="{sound.clearSound}"/> </mx:Application>
附件是测试对应的.swf,资源都内嵌了
- LLKtest.rar (2.1 MB)
- 下载次数: 275
评论
7 楼
gglhappy
2014-08-22
410631059@qq.com 楼主能给一下源码么
6 楼
gglhappy
2014-08-22
楼主能给一下源码么 邮箱:410631059@qq.com
5 楼
chen024
2014-06-27
求源码:我的邮箱chenfang65811395#126。com,(#=@ && 。=.)
4 楼
htmldai
2012-06-21
是我的邮箱。打错了。但是确实是无毒的。
3 楼
htmldai
2012-06-21
求代码!!!楼主好人!!!无毒邮箱:395193253@qq.com
2 楼
qiqishou
2010-11-02
QQ联系 649723623
1 楼
guowei422
2010-10-28
你好,可以把这个连连看的源码发给我不?我现在有急用!谢谢! 邮箱是:guowei422@163.com
发表评论
-
【原创】Flash的垃圾回收机制和内存泄露
2011-05-27 10:53 2768ActionScript3.0垃圾回收器使用两种方法定位无引 ... -
【原创】Flash小游戏开发流程
2011-04-11 13:37 1385这是2010年给北京某家创业型公司做培训的资料,分享一下吧,根 ... -
【原创】价值200万英镑的研究成果
2010-12-15 09:56 1086请看附件,哈哈 -
【原创】制作Flash图像渐变倒影
2010-12-09 11:25 1360private function createRef(p_so ... -
【原创】Flex操作颜色值及图像颜色变换
2010-12-03 16:38 4105根据色彩值分离出单色值的方法 Fl ... -
【原创】Away3D图片墙
2010-11-02 11:41 3377以前看过用pv3D写的一个图片墙,感觉挺不错的,最近把Away ... -
AS3、Flex图像解码器(JPG格式)
2010-09-08 17:18 2788主要用在把图片信息(客户端通常是BitmapData)编码 ... -
【原创】Flex中A-star寻路算法
2010-09-06 15:38 2073A*寻路算法是最常用的寻路算法了,下面介绍一些概念,及Flex ... -
【原创】Box2DFlash学习笔记
2010-09-06 15:11 2649最近一直没写东西,今天分享学习Box2D的学习吧。看的是官方上 ... -
【原创】自定义的Flex加载Flash元件库工具,共享一下
2010-06-30 14:49 1366总是加载东西觉得 ... -
【原创】Flex图片上传、预览、裁剪、拖拽
2010-05-14 11:39 6087最近很多人遇到这些问 ... -
【原创】利用二进制加载绕开安全沙箱
2010-04-15 13:32 1366不废话了,直接上思路: 1.首先声明一个URLLo ... -
【原创】Using_Flex_4翻译——自定义组件第一小节
2010-04-05 15:35 1376下午刚翻译的,新鲜 ... -
【原创】flex的动态链接库和静态链接库
2010-03-23 14:18 1963flex可以有两种库,一种是动态链接库(R ... -
Flex编程实用技巧
2010-03-19 11:28 889有时细小的调整会造成很大的不同。下面是一小部分能够改善你的程序 ... -
【原创】解决本地安全沙箱问题(无法访问本地资源)
2010-03-01 12:27 2760开发flex的时候经常会出现安全沙箱问题,说白了,其实就是访问 ... -
【原创】flex控制flash元件
2010-02-24 16:58 3414最近跟后台研究的hessian协议,通信技术和接口已经基本差不 ... -
【原创】5分钟学会Flex自定义事件
2010-02-03 12:22 1950网上介绍flex自定义事 ... -
【原创】Flex通过Hessian与Java通信
2010-02-02 17:04 1734hessian在Java端相对已经很成熟了,flex端资料 ... -
flex RPC错误小结
2010-02-02 16:43 1664一、Flex Remoting 1.Channel defi ...
相关推荐
【Java毕业设计】基于Java的连连看游戏设计与实现(论文+答辩PPT+源代码+讲解视频).zip 【Java毕业设计】基于Java的连连看游戏设计与实现(论文+答辩PPT+源代码+讲解视频).zip 【Java毕业设计】基于Java的连连看...
基于java的连连看游戏设计与实现的部分文档和部分代码
基于JAVA的连连看游戏设计与实现.pdf
连连看游戏的设计与实现.pdf连连看游戏的设计与实现.pdf连连看游戏的设计与实现.pdf连连看游戏的设计与实现.pdf连连看游戏的设计与实现.pdf连连看游戏的设计与实现.pdf连连看游戏的设计与实现.pdf连连看游戏的设计与...
连连看游戏分析设计与实现.pdf连连看游戏分析设计与实现.pdf连连看游戏分析设计与实现.pdf连连看游戏分析设计与实现.pdf连连看游戏分析设计与实现.pdf连连看游戏分析设计与实现.pdf连连看游戏分析设计与实现.pdf...
基于Java的连连看游戏系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+演示录像).zip 基于Java的连连看游戏系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+演示录像).zip 基于Java的连连看游戏系统设计与...
java毕业设计——基于Java的连连看游戏设计与实现(论文+答辩PPT+源代码+讲解视频).zip java毕业设计——基于Java的连连看游戏设计与实现(论文+答辩PPT+源代码+讲解视频).zip java毕业设计——基于Java的连连看...
C#课件:连连看游戏的设计与实现.ppt
java毕业设计——基于java的连连看游戏设计与实现(论文+答辩PPT+源代码+数据库).zip java毕业设计——基于java的连连看游戏设计与实现(论文+答辩PPT+源代码+数据库).zip java毕业设计——基于java的连连看游戏设计与...
连连看游戏的设计与实现.doc
基于Android连连看的设计与实现.docx基于Android连连看的设计与实现.docx基于Android连连看的设计与实现.docx基于Android连连看的设计与实现.docx基于Android连连看的设计与实现.docx基于Android连连看的设计与实现....
基于Android连连看的设计与实现.doc
连连看小游戏,采用Flex,即Flash Buidler开发,SDK 3.0
基于Java的连连看游戏设计与实现毕业设计论文文档+软件源码+视频说明,基于java的连连看游戏设计和实现,基本功能包括:消除模块,重新开始模块,刷新模块,选择难度模块,计时模块。本系统结构如下: (1)消除...
基于Java的连连看游戏设计与实现.上传的项目源码配置好环境和数据库均可以运行,为了方便大家对于java的学习,作为毕业设计的参考也是非常合适的,欢迎大家交流!
C#课件:连连看游戏的设计与实现 (2).ppt
基于java的连连看游戏设计与实现.docx基于java的连连看游戏设计与实现.docx基于java的连连看游戏设计与实现.docx基于java的连连看游戏设计与实现.docx基于java的连连看游戏设计与实现.docx基于java的连连看游戏设计...