浏览模式 : 普通 | 列表
1 | 2 | >

通过上一篇的画图篇,我们就可以使拼图在游戏舞台上随意的铺放了,但是到目前为止还不会吸附,也就是当两张图案正确的相邻两个拼图拼在一起的时候不会吸在一起.

我们先来回顾一下上一节中所定义的碎片类Piece

package net.conanlwl
{
    import flash.display.Sprite;
   
    public class Piece extends Sprite
    {
        private var m_row...


游戏试玩

想要制作非正规矩形的凹凸拼图,第一步就得先画好每一个小拼图的轮廓.然后再通过位图填充,从而制作出每一个小拼图碎片.小碎片的轮廓示意图如下图所示:


图1

如图1所示,为拼图中左上角的一个碎片,所以该碎片只要画右边与下边的轮廓,其它边都为直线.

每一边的轮廓都由一个圆弧(BCD)以及圆弧两个端点(B点,D点)与矩形的两个角(A点与E点)相连的两条直线(AB与DE)组成.所以一整个碎片轮廓就是由这一系列的直线与弧线组成的.

为了不使每一个碎片的外形都一样,所以加了一小些随机的因素.例如圆弧的凹与凸,以及圆心的位置.

当圆弧随机为凸时,圆心的位置在图中的直线OP上的随意一点.相反,为凹时,则为O'P上的随意一点.其中P为AE的中点.当然,我们也可以在AE中取一小段线段作为P的随机点也行.

在本实例中,为了不让四条边的圆弧都为凹时出现相交的情况,所以圆弧的半径为碎片矩形长宽中最短一边的1/6.且圆弧的圆心角都为270度.当然在保证四条边的弧线都为凹时不相交的情况下,半径以及圆心角也都可以加上一些随机的因素的.

至此,我们只要用一个数组来存储四条边上的这些圆弧以及端点角点的信息,然后通过一个连线的函数来进行画图,就可以画出一个封闭的拼图碎片轮廓了.

其它碎片,我们要计算的也只是右边与下边,左边与上边都是沿着上一个碎片的信息画的.如第二列的左边,其实就与第一列的右边是一样的.第二行的上边其实就是第一行的下边.

另外需要注意的是,AS3中对于封闭区域轮廓的要求必须是头尾顺笔连接而成..如图中的右边.画图的顺序必须是:A连到B,然后两从B顺时针画圆弧BCD,再D连到E.不能先连直线AB与DE,然后再画一个圆弧BCD,而且还不分顺画或逆画,这样子就算外形看是一个封闭的曲线,但当填充时就会出现意想不到的效果.

以下是计算某一边的信息的函数,通过参数pos来决定要画右边或下边

...

花了几天的时间,终于完成了这个拼图游戏.当两张相邻的拼图拼并正确的时候.程序和自动地将其吸附..另.可使用鼠标的滚轮在拼图上滚动以旋转拼图,增加了游戏的难度.

游戏源码过段时间整理完成再说吧...报了个驾校,要考法规了.

[全屏试玩]

多添加了在拼图上按键盘空格键即可旋转拼图的功能(10.27)

游戏设计思路与源码(10.28)

经典红白机游戏音乐

[ 2009-4-15 0:28:48 | 作者 : Conanlwl ]

 

我想只有我们这些八零后的人玩FC玩得最多吧.90后的几乎都玩16位或者PS游戏去了,我只有我们才会时不时地去缅怀一下这些经典的红白机游戏吧.

在上面的这个FLASH里的收集的音乐,很多都不是游戏原声音乐,都是重奏版,这些音乐虽是出于FC游戏时代,但其音乐旋律绝不逊于当今的一些游戏.

 

最新DEMO--上海麻将

[ 2009-3-28 11:09:23 | 作者 : Conanlwl ]

以前玩FC游戏的时候,玩过一个上海II,所以就想把它"移植"到FLASH里面来.游戏的名字有些也叫做麻将连连看.但其实规则还是跟连连看不一样的.

游戏规则:
        游戏采用45度伪3D俯视视角,游戏里一共有144个麻将,通过排叠有层次的放于游戏里,规则也是通过点击两个相同的麻将(春夏秋冬可以互消,梅兰菊竹可以互消)将其从游戏里面消除,直到将所有的麻将都消除完为止.但是一开始并不是所有的麻将都是可点击的,只有活子才能点击.所谓的活子,就是左右两边必须至少有一边是没有相邻的麻将的,卡一半也不行,并且没有被上一层的麻将所压到.被压到一个角也不行. 


FC上的麻将II


在FLASH里的上海麻将

游戏点击试玩

最后一个主角比较叼.一次开两枪的....剩下最后一枪时...呵呵...死神就站在你后面了.

大家来找茬设计思路与源码

[ 2009-2-25 10:41:20 | 作者 : Conanlwl ]

大家来找茬(也叫找不同)这个游戏我想各位应该都玩过,就是在限定的时间里找出两张图片中的不同之处.当然今天在这里不是教你如何玩游戏,如何成为"黄金眼",而是讨论一下这个游戏是如何设计出来的....

游戏的设计可以分为入门级以及进阶级吧.

入门级的设计思路很简单(如图1).这个是我在2002年的时候,刚刚学FLASH5的时候,所做的一个很烂的找碴游戏.(点击试玩大家来找碴之柯南剧场版),在游戏里我们可以看到,每张图都有五个不同之处,而且是固定的五个地方,也就是说你第一次玩过以后,第二次再玩就没有难度了,直接就可以点中不同处了.所以这种游戏的设计很简单,就是事先做好两张有五个不同之处的图片,然后把它做成两个大按钮.然后再在这两张图片的上面的五个不同点放上五个大小刚好与不同处一样大的透明按钮,那么只要用户点中这五个按钮,那就算过关了,而如果点不中五个按钮,就肯定会点到后面的两张图片的大按钮,这时就可以做扣分或者扣时间处分了.所以这种游戏的设计很简单,玩全可以不用代码来实现,直接就在FLASH的舞台里摆放图片和按钮就行了,但是可以说,这种游戏的可再玩性为0,也就是说,当玩家通关以后,他可能就不想再玩这个游戏了,因为他已经没有了挑战性了.


图1 入门级的找碴游戏

那么进阶级的游戏又是如何的呢?点击试玩先看一下图2与图3吧.


图2

...


【游戏封面】

游戏名称:命令与征服之红色警戒3
英文名称:Command & Conquer Red Alert 3
游戏制作:EA LA   
游戏发行:Electronic Arts  
游戏语种:繁体中文 \ 英文
游戏类型:Sci-Fi Real-Time Strategy  
游戏容量:6.21G
官方网站:http://www.ea.com/redalert/


游戏安装指南及版本说明:
*该版本为破解版。
*解压缩游戏包,推荐用Daemon Tool最新版载入镜像安装游戏
*安装完成后到镜像里的CRACK文件夹复制破解到你的游戏目录即可进入游戏
*如果提示升级建议请不要升级,因为破解对应1.0原版。。。
*最后导入本注册表进入游戏即可:http://patch.ali213.net/showpatch/5889.html



【游戏简介】
     暌违七年的知名即时战略游戏续作《红色警戒 3》明(28)日正式登台,美商艺电今日解密三大阵营指标性单位,带领玩家一窥新作中各阵营的特殊之处。
      EA举办《红色警戒 3》记者会,展示《红色警戒》系列作品,并且由乌克兰 Show Girl 扮演娜塔莎来展示游戏
  《红色警戒 3》故事描述强大的苏俄军队节节败退,盟军準备一举攻入克里姆林宫,库可夫将军以及查丹科上校决心孤注一掷,使用了未经测试的秘密武器:俄军时空机器;结果,他们改写了歷史,在总理查丹科的领导下,让盟军濒临战败边缘,但他们却意外发现,旭日帝国悄悄地坐大,天皇选择在此时刻发动攻击。当天皇的帝国军队带来了巨大威胁,準备将俄军和盟军从地球上消灭殆尽……从这一刻起,世界的发展全然掌握在玩家的手裡,当盟军、俄军与昇阳帝国三大阵营在玩家眼前,...


红色警戒3

[ 2008-9-3 15:38:06 | 作者 : Conanlwl ]

没事上游侠逛逛才发现..原来中学时常玩的红警2终于也出第3代了.<Command & Conquer: Red Alert 3>[命令与征服: 红色警报3],估计10月份就会上市了.现在是Beta版的测试...看了一下游戏的截图..画面很美很壮观.给人感觉就是很爽很想玩..

先看几张截图吧:

盟军vs.苏联

两栖部队在这时发挥了极大的作用

夜战,漂亮的光束效果

小规模的海战,磁暴线圈的闪电效果不错

对对碰游戏,相信大家也并陌生了.游戏规则也很简单,就是随意转换地图中的相邻的两个图案,只要转换后,能够使得某一种图形在横排或竖排相邻并且个数超过三个,即可消除这几个图形.不过今天研究的不是怎样玩游戏,而是如何来写游戏.先试玩一下就游戏先吧 点击试玩  源码下载

根据流程,我们就可以一步一步的来完成游戏的编写了.在连连看设计思路与源码那里我已经介绍了一些基本的前期工作,例如,生成地图,显示,还有地图的一些操作如洗牌等的一些讲解,所以这里就略过了介绍,主要讲一下几个主要算法.

第一个,就是遍历整个地图,寻找符合消除条件的所有方块.

由于消除条件是有横排跟竖排之分,所以我们也必须对这两种情形,进行检测.

首先判断相连的三个图形(例如第1,2,3个)是否相同,不是则右移一位再判断另三个图形(此时应是第2,.3,4个)是否相同,如果第1,2,3个图形相同,则继续尝试判断第4个,第5个....是否也相同,直到找到不相同的为止.然后下次另找一对进行比较时就不用再从2,3,4开始了,而是从可消除的方块之后开始判断了,如前次1,2,3,4,5图形相同,则本次判断就从,6,7,8三个开始判断,再判断成功后,我们用一个数组cancelArray来存放这些可消除的方块的位置,..然后一直遍历整个地图..以下是该算法的代码:

//检测地图中的可消除元素并存于数组cancelArray里面.
        public ...


源代码下载

地图有了,算法也有了.那么现在就是如何把这些给结合起来并显示出来了.

我们游戏中的每一个图案,我们可以把他抽象为一个方块类 Block类.因为他是可以被点击的,所以我们可以直接用一个SimpleButton来实现,SimpleButton它有四个属性可以设置按钮各种状态的显示对象.

我们的算法在什么时候调用呢?什么每点一次Block就得调用一次呢?其实是没有必要的,必须得上次已经有点过一次图案了,那么再点击另外一个图案时才需要调用算法来进行寻路检测,因此我们必须要记录上一次到底是点了哪一个按钮,以及本次到底点了哪个按钮?我在程序里分别使用了两个数组来记录这两个数据,上一次按下的记录为lastClick:Array,本次按的为nowClick:Array,如果游戏刚开始还没有点击过任何一个图案或者刚消完一对图案,那么此时的上一个点击就为空了,所以就设为[-1,-1],所以只要判断上一次点击的不是[-1,-1],而且现在按的不跟上一次按的一样,就是调用算法的时候了.

本人对数组有种特别的感情,因为数组有一个好处,就是他的副本跟他本身在内存中指的都是同一个地址,这有点类似于C++中的指针,所以,我们只需要修改其中的一个,就可以全部都修改到,所以我们在实例化一个Block实例的时候,传了一个nowClick的副本给他,然后在每一次点击图案的时候,对副本进行改值,此时,nowClick本身的值也跟着给改了.

以下是Block类的全代码.

/*
Author: Alan.Lin
Blog:http://www.conanlwl.net
连连...


在第一节中,我们已经知道了如何生成一个初始地图,那么接下来就是必须对此地图中对被点击到的两个图案进行连接测试,当然,首先必须要求两个点击的图案必须一样,否则就无需做连接测试了

那么连接的情况就有:

  • 直线相连
  • 一个折点的相连
  • 二个折点的相连

那么我们先来实现直线相连测试的算法.直线相连,分为两种情总,一种是两个目标图案处于同一行,另一种就是处于同一列.

以下是判断的代码:

c为列,r为行,所以c1,r1为第一个图案的坐标,c2,r2为第二个图案的坐标.我们将他抽像为一个点吧.那么第一个图案设为点P,第二个图案设为点Q

//判断同一直线上的两个点是否通畅
        private function lineCheck(c1:uint,r1:uint,c2:uint,r2:...


1 | 2 | >