flash连连看游戏设计视频教程

全屏观看地址:

视频1地址

视频2地址

视频3地址

 

源文件及 PPT 下载:

http://www.fs2you.com/files/76b3bea8-41d3-11dd-ba6f-001143e7b41c/

 

代码公布(数字版):

Card.as:

package {
 import flash.display.Sprite;
 import flash.text.TextField;
 import flash.text.TextFormat;
 import flash.filters.*;
 import flash.events.MouseEvent;

 public class Card extends Sprite {
  public var id:int;
  public var W:Number = 30;
  public var H:Number = 40;
  public var i:int;
  public var j:int;
  public var TargetCard:Card;
  private var color:uint = 0xcccccc;
  public var Path:Array = new Array();
  private var pressed:Boolean = false;
  
  public var line:Sprite = new Sprite();
  public function Card(id:int) {
   this.id = id;
   init();
  }

  function init():void {
   graphics.beginFill(color);
   graphics.drawRect(0,0,W,H);
   graphics.endFill();
   var Text:TextField = new TextField();
   Text.text = String(id);
   Text.selectable = false;
   Text.autoSize = "left";

   var tf:TextFormat = new TextFormat(null,25);
   // tf.size = 25;

   Text.setTextFormat(tf);
   addChild(Text);
   
   addEventListener(MouseEvent.MOUSE_OVER, MouseOver);
   addEventListener(MouseEvent.MOUSE_OUT, MouseOut);
  }

  function setIndex(a:int, b:int):void {
   i = a;
   j = b;
  }
  function Pressed():void {
   pressed = true;
  }
  function UnPressed():void {
   pressed = false;
   this.filters = null;
  }
  function MouseOver(evt:MouseEvent):void {
   var blur:BevelFilter = new BevelFilter();
   var shadow:DropShadowFilter = new DropShadowFilter(10);
   var f:Array = new Array();
   f.push(blur);
   f.push(shadow);
   this.filters = f;
  }
  function MouseOut(evt:MouseEvent):void {
   if (pressed == false) {
    this.filters = null;
   }
  }

 }
}

============================================

Main.as

package {
 import flash.display.Sprite;
 import flash.events.MouseEvent;
 import flash.events.Event;
 public class Main extends Sprite {
  var Row:uint = 4;
  var Colum:uint = 5;
  var MarginLeft:Number = 180;
  var MarginTop:Number = 100;

  var oldCard:Card;
  var map:Array;

  public function Main() {
   init();
  }
  
  function init():void {
   map = new Array(Row + 2);

   var numArray:Array = new Array();
   for (var i:uint = 0; i < Row; i++) {
    numArray[i] = new Array();
    var num:uint = 0;
    for (var j:uint = 0; j < Colum; j++) {
     numArray[i][j] = ++num;
    }
   }
   for (i = 0; i < Row; i++) {
    for (j = 0; j < Colum; j++) {
     var Rani:uint = Math.floor(Math.random() * Row);
     var Ranj:uint = Math.floor(Math.random() * Colum);

     var temp:uint = numArray[i][j];
     numArray[i][j] = numArray[Rani][Ranj];
     numArray[Rani][Ranj] = temp;
    }
   }

   for (i = 0; i < Row + 2; i++) {
    map[i] = new Array(Colum + 2);
    for (j = 0; j < Colum + 2; j++) {
     if (i ==0 j ==0 i == Row + 1 j == Colum + 1) {
      map[i][j] = 0;
     } else {
      map[i][j] = 1;
     }
    }
   }
   
   for (i = 0; i < Row; i++) {
    for (j = 0; j < Colum; j++) {
     var card:Card = new Card(numArray[i][j]);
     addChild(card);
     card.x = MarginLeft + j * (card.W + 2);
     card.y = MarginTop + i * (card.H + 2);
     card.setIndex(i + 1, j + 1);
     card.addEventListener(MouseEvent.CLICK, onClick);
    }
   }
  }
  function onClick(evt:MouseEvent):void {
   try {
    var currentCard:Card = Card(evt.target.parent);
   } catch (error:Error) {
    currentCard = Card(evt.target);
   }
   if (oldCard == null) {
    oldCard = currentCard;
    oldCard.Pressed();
   } else {

    oldCard.TargetCard = currentCard;
    // successfully matched!
    if (isMatched()) {
     addChild(oldCard.line)
     oldCard.line.graphics.clear();
     oldCard.line.graphics.lineStyle(2);
     
     var node:Object = oldCard.Path.shift();
     oldCard.line.graphics.moveTo(MarginLeft + node.y * oldCard.W - oldCard.W / 2, MarginTop + node.x * oldCard.H - oldCard.H / 2);
     
     oldCard.addEventListener(Event.ENTER_FRAME, ToLink);
     oldCard = null;

    } else {
     // Can not Match!
     oldCard.UnPressed();
     oldCard = null;
    }
   }
  }

  function ToLink(evt:Event):void {
   var card:Card = Card(evt.target);
   if (card.Path.length > 0) {
    var node:Object = card.Path.shift();
    card.line.graphics.lineTo(MarginLeft + node.y * card.W - card.W / 2, MarginTop + node.x * card.H - card.H / 2);
   } else {
    
    map[card.i][card.j] = 0;
    map[card.TargetCard.i][card.TargetCard.j] = 0;
    card.removeEventListener(Event.ENTER_FRAME, ToLink);
    removeChild(card);
    removeChild(card.line);
    removeChild(card.TargetCard);
   }
  }
  
  function isMatched():Boolean {
   if (oldCard == oldCard.TargetCard oldCard.id != oldCard.TargetCard.id) {
    return false;
   }
   
   var x1:uint = oldCard.i;
   var y1:uint = oldCard.j;
   var x2:uint = oldCard.TargetCard.i;
   var y2:uint = oldCard.TargetCard.j;
   
   var node:Object = new Object();
   var tempPath:Array = new Array();
   
   for (var i:uint = 0; i < Colum + 2; i++) {
    var count:uint = 0;
    tempPath.splice(0);
    
    var step:int = (y1 > i) ? -1 : 1;
    for (var j = y1; j != i; j += step) {
     count += map[x1][j];
     node = {x:x1,y:j};
     tempPath.push(node);
    }

    step = (x1 > x2) ? -1 : 1;
    for (j = x1; j != x2; j += step) {
     count += map[j][i];
     node = {x:j,y:i};
     tempPath.push(node);
    }

    step = (i < y2) ? 1 : -1;
    for (j = i; j != y2; j+= step) {
     count += map[x2][j];
     node = {x:x2,y:j};
     tempPath.push(node);
    }

    if (count == 1) {
     if (oldCard.Path.length == 0 tempPath.length < oldCard.Path.length) {
      oldCard.Path = tempPath.slice();
     }
    }
   }

   for (i = 0; i < Row + 2; i++) {
    count = 0;
    tempPath.splice(0);

    step = (i < x1) ? -1 : 1;
    for (j = x1; j != i; j += step) {
     count += map[j][y1];
     node = {x:j,y:y1};
     tempPath.push(node);
    }
    step = (y2 > y1) ? 1 : -1;
    for (j = y1; j != y2; j += step) {
     count += map[i][j];
     node = {x:i,y:j};
     tempPath.push(node);
    }
    step = (x2 > i) ? 1 : -1;
    for (j = i; j != x2; j += step) {
     count += map[j][y2];
     node = {x:j,y:y2};
     tempPath.push(node);
    }
    if (count == 1) {
     if (oldCard.Path.length == 0 tempPath.length < oldCard.Path.length) {
      oldCard.Path = tempPath.slice();
     }
    }
   }
   
   if (oldCard.Path.length > 0) {
    node = {x:x1, y:y1};
    oldCard.Path.unshift(node);
    node = {x:x2, y:y2};
    oldCard.Path.push(node);
    return true;
   }
   return false;
  }
 }
}

详细地址

http://blog.sina.com.cn/s/blog_3ecb9b110100a1wk.html

时间: 2024-12-23 09:15:47

flash连连看游戏设计视频教程的相关文章

Flash小游戏-连连看算法大揭密

算法 个题目有些夸张了,因为这个游戏本来是个比较简单的游戏. 不过,这个简单游戏的技术问题是一类游戏如俄罗斯方块,纸牌游戏等制作的基础.通过对这个游戏算法的分析,特别是对检查连线的探讨,大家可以基本掌握这类游戏算法的基本思维方法. 连连看游戏规则很简单,就是点中两个互相匹配并且可以通过不多于两个折点的折线连在一起的方块后,这两个方块就可以消掉.所以,下图的三种情况可以把方块消掉.笔者的游戏中,配对规则是两数相加等于100. 配对的检查比较简单,只要用一个if语句,条件a+b==100就可以检验了

《游戏机制——高级游戏设计技术》一1.4 原型制作技术

1.4 原型制作技术 游戏机制--高级游戏设计技术 原型是产品或工序的一个模型,它通常是预备性的.不完整的.它的作用是在产品实际制造出来之前测试产品的可用性.由于原型不像最终产品那样需要仔细润饰和打磨,因此它构建和修改起来更为快速且廉价.游戏设计师制作原型来测试游戏的机制和可玩性.游戏设计师经常使用的原型技术有软件原型(software prototype).纸面原型(paper prototype)和物理原型(physical prototype). 1.4.1 一些术语 多年以来,软件开发者

《游戏机制——高级游戏设计技术》一导读

前 言 游戏机制--高级游戏设计技术 这是一本涉及游戏最深层次的书.一个游戏无论看上去多么棒,如果其机制乏味或失衡,那么它玩起来就不会有趣.游戏机制产生可玩性,要创造出优秀的游戏,你必须懂得这件事之中的道理. 本书将告诉你如何设计.测试及调整游戏的核心机制.这些理论适用于任何游戏-从庞大的角色扮演游戏(RPG,role-playing game)到手机休闲游戏,再到传统的桌上游戏(board game).在学习过程中,我们会使用大量你可能已经耳熟能详的实际游戏作品作为案例,包括<吃豆人>(Pa

跟我学Java Swing之游戏设计(1)_Java编程

文章来源:电脑爱好者 作者:张剑 谁知道通天的巴比伦塔耗费了多少沙石?又有谁知道罗马的建成经历了多少个日夜?我们惟一知道的是,没有一块块砖石的垒砌,就没有蜿蜒万里的长城;没有巨石和黏土的堆集,就没有亘古不变的金字塔.由此可见,基础知识的准备对于我们学习任何事物都至关重要,那么,就让我们从认识Swing的一些基础功能开始,启动我们建造罗马的伟大工程吧! 前言 Java咖啡馆已经开张不少时日了,如果你已经喜欢上了Java这杯咖啡的味道,那么记得常来哦.这一次,我们为大家准备了一大杯香浓的咖啡--将以

使用非html5实现js板连连看游戏示例代码_javascript技巧

向大家分享一款如何实现js版连连看游戏,如下图所示: 首先看一下html的布局方式在index.html文件中: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http

Flash移植游戏《重力怪鸭》试玩攻略

<重力怪鸭>试玩攻略以重力(Gravity)为主题的游戏不算少,而且通常都考验着玩家的抗眩晕能力,例如<重力眩晕>.这款<重力怪鸭>(GravityDuck)看名字就知道接下来玩家要面对的是什么,虽然它的画面是2D的,但是制造眩晕的能力并不比传统的3D差,再加上兼顾解谜要素以及开发商大恐龙一贯的难度至上原则,玩着玩着就让你晕了. 游戏名称:<重力怪鸭>价格:6元发布日期:2013年2月28日大小:6.0 MB在这款Flash移植游戏中,简洁的菜单设计.像素级

聊聊游戏设计行业新人最关心的3个问题

  游戏原画和游戏UI的区别是什么?工资待遇如何? 游戏原画在项目中主要是负责角色.场景设计,还有游戏的宣传海报和过场界面等完成度高的宣传画,原画更加看重设计和绘画表现力,在交互方面需求很少,沟通也较少,基本和三维.主美沟通就够了,下面我放了一些我们项目中需要设计的原画稿,方便大家了解原画工作内容. UI 行业我理解主要包括: 游戏UI App UI 网站UI 中国游戏产业在发展了近20年后,现在每年近千亿的产值已经远远将老牌文化产业的电影行业抛在身后,并成为中国文化产业出口的领头羊,中国游戏产

算法设计-猜猜我是谁游戏设计编程思想

问题描述 猜猜我是谁游戏设计编程思想 像微软小冰的读心术类似通过程序给出的几个问题选择是否来推出所猜的人,这要用什么数据结构 解决方案 这个是根据语义匹配等算法实现的.

IOS游戏设计认知度提升方法和免费游戏的盈利

文章描述:要制作iOS游戏,那么在你开始工作之前,你应当知道哪些内容呢?我们在2011年发布了两款iOS游戏:<Garage Inc.>(1月份)和<KULA BLOX >(9月份).近期,我们花了大量时间思考这些经历,从中寻找可借鉴之处,这样下次就会做得更好.以下便是我们总结出的经验. 如果你已经决定要制作iOS游戏,那么在你开始工作之前,你应当知道哪些内容呢?我们在2011年发布了两款iOS游戏:<Garage Inc.>(1月份)和<KULA BLOX &g