论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash AS编程教程
Tag:2.0,3.0菜鸟,游戏,,cs,技巧,源码,,文本,文字,函数,音乐,随机,拖拽,asp,access,xml,mc,视频教程

类似俄罗斯式拼方块游戏

文章类别:Flash AS编程 | 发表日期:2008-10-6 17:35:44


基本原理和俄罗斯方块一样简单,维持2维数组碰撞。成形后消除。

拼成如下图形后消失。


============核心源码===========
function 变量初始() {
    场景高格数 = 12;
    场景宽格数 = 12;
    单元格高宽 = 30;
    移动时间 = 1000;
    游戏结束 = false;
    场景数组 = new Array();
    //生成2维数组
    for (var i = 0; i<场景高格数; i++) {
        场景数组[i] = new Array();
        for (var j = 0; j<场景宽格数; j++) {
            场景数组[i][j] = 0;
            //动态生出测试文本
            this.createTextField("文本"+i+"@"+j, (i*场景高格数+j)*10, i*单元格高宽, j*单元格高宽, 100, 100);
            this["文本"+i+"@"+j].color = 0xff0000;
            this["文本"+i+"@"+j].text = 0;
        }
    }
    //
    出现位置 = [5, 0];
    方块数量 = 0;
    生成方块();
    //在原点上的增加位 2维增加位 [1,1],[0,0]  前2位为第1行,后2位为第2行
    形状数组 = [["无需数据"], [1, 0], [0, 1], [-1, 0], [0, -1]];
}
变量初始();
//
function 生成方块() {
    trace("ss");
    if (!游戏结束) {
        方块数量++;
        attachMovie("方块", "方块"+方块数量, 方块数量);
        形状 = int(random(4))+1;
        当前操作方块 = this["方块"+方块数量];
        this["方块"+方块数量].形状 = 形状;
        this["方块"+方块数量].gotoAndStop(形状);
        this["方块"+方块数量].运行 = 运行;
        this["方块"+方块数量].移动 = 移动;
        this["方块"+方块数量].计算可否移动 = 计算可否移动;
        this["方块"+方块数量]._x = 出现位置[0]*单元格高宽+15;
        this["方块"+方块数量]._y = 出现位置[1]*单元格高宽+15;
        this["方块"+方块数量].运行(移动时间, 形状);
    }
}
function 运行(移动时间, 形状) {
    this.移动间隔 = setInterval(移动, 移动时间, this);
}
function 移动($this) {
    //trace("移动 "+$this);
    $this._y += 30;
    //计算可否移动
    计算可否移动($this, $this._x, $this._y, $this.形状);
}
function 横向移动($this, 方向) {
    var 二维坐标 = [int($this._x/单元格高宽), int($this._y/单元格高宽)];
    //trace(二维坐标)
    if (方向 == "左" && (场景数组[二维坐标[0]-1][二维坐标[1]] == 0 && 场景数组[二维坐标[0]+形状数组[$this.形状][0]-1][二维坐标[1]+形状数组[$this.形状][1]] == 0)) {
        $this._x -= 30;
    } else if (方向 == "右" && (场景数组[二维坐标[0]+1][二维坐标[1]] == 0 && 场景数组[二维坐标[0]+形状数组[$this.形状][0]+1][二维坐标[1]+形状数组[$this.形状][1]] == 0)) {
        $this._x += 30;
    }
}
function 计算可否移动($this, X, Y, 形状) {
    当前2维坐标 = [int(X/单元格高宽), int(Y/单元格高宽)];
    //trace(当前2维坐标)
    //trace(场景数组[当前2维坐标[0]][当前2维坐标[1]+1]);
    //判断游戏是否结束
    //判断是否碰到阻碍
    if (场景数组[当前2维坐标[0]][当前2维坐标[1]+1] != 0 || 场景数组[当前2维坐标[0]+形状数组[$this.形状][0]][当前2维坐标[1]+形状数组[$this.形状][1]+1] != 0) {
        //trace("形状="+$this.形状);
        //trace("形状数组="+形状数组[$this.形状]);
        场景数组[当前2维坐标[0]][当前2维坐标[1]] = 1;
        this["文本"+当前2维坐标[0]+"@"+当前2维坐标[1]].text = 1;
        场景数组[当前2维坐标[0]+形状数组[形状][0]][当前2维坐标[1]+形状数组[$this.形状][1]] = 2;
        this["文本"+(当前2维坐标[0]+形状数组[$this.形状][0])+"@"+(当前2维坐标[1]+形状数组[$this.形状][1])].text = 1;
        //trace(this["文本"+(当前2维坐标[0]+形状数组[$this.形状][0])+"@"+(当前2维坐标[1]+形状数组[$this.形状][1])]);
        var temp形状 = $this.形状;
        clearInterval($this.移动间隔);
        $this.removeMovieClip();
        //trace(this["方块"+当前2维坐标[0]+"@"+当前2维坐标[1]]);
        //
        是否清除 = 判断可否消除();
        if (是否清除) {
        } else {
            //同位置生成
            attachMovie("方块", "方块"+当前2维坐标[0]+"@"+当前2维坐标[1], 方块数量);
            this["方块"+当前2维坐标[0]+"@"+当前2维坐标[1]]._x = 当前2维坐标[0]*单元格高宽+15;
            this["方块"+当前2维坐标[0]+"@"+当前2维坐标[1]]._y = 当前2维坐标[1]*单元格高宽+15;
            this["方块"+当前2维坐标[0]+"@"+当前2维坐标[1]].形状 = temp形状;
            this["方块"+当前2维坐标[0]+"@"+当前2维坐标[1]].gotoAndStop(temp形状);
        }
        if (当前2维坐标[1]-1 == 0 || (当前2维坐标[1]+形状数组[$this.形状][1])-1 == 0) {
            trace("======游戏结束=======");
            游戏结束 = true;
            return;
        } else {
            生成方块();
        }
    }
}
function 判断可否消除() {
    for (var i = 1; i<场景高格数-1; i++) {
        for (var j = 1; j<场景宽格数-1; j++) {
            if (场景数组[i-1][j-1] == 1 && 场景数组[i][j-1] == 2 && 场景数组[i+1][j-1] == 1 && 场景数组[i-1][j] == 2 && 场景数组[i+1][j] ==2 && 场景数组[i-1][j+1] == 1 && 场景数组[i][j+1] == 2 && 场景数组[i+1][j+1] == 1) {
                trace("拼成一个 "+i+"@"+j);
                this["文本"+(i-1)+"@"+(j-1)].text = 0;
                this["文本"+(i)+"@"+(j-1)].text = 0;
                this["文本"+(i+1)+"@"+(j-1)].text = 0;
                this["文本"+(i-1)+"@"+(j)].text = 0;
                this["文本"+(i+1)+"@"+(j)].text = 0;
                this["文本"+(i-1)+"@"+(j+1)].text = 0;
                this["文本"+(i)+"@"+(j+1)].text = 0;
                this["文本"+(i+1)+"@"+(j+1)].text = 0;
                //                
                this["方块"+(i-1)+"@"+(j-1)].removeMovieClip();
                this["方块"+(i+1)+"@"+(j-1)].removeMovieClip();
                this["方块"+(i-1)+"@"+(j+1)].removeMovieClip();
                this["方块"+(i+1)+"@"+(j+1)].removeMovieClip();
                //
                场景数组[i-1][j-1] = 0;
                场景数组[i][j-1] = 0;
                场景数组[i+1][j-1] = 0;
                场景数组[i-1][j] = 0;
                场景数组[i+1][j] = 0;
                场景数组[i-1][j+1] = 0;
                场景数组[i][j+1] = 0;
                场景数组[i+1][j+1] = 0;
                return true;
            }
        }
    }
    return false;
}
//热键
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
    //trace(Key.getCode());
    //空格键
    if (Key.isDown(32) || Key.isDown(38)) {
        当前操作方块.形状++;
        if (当前操作方块.形状>4) {
            当前操作方块.形状 = 1;
        }
        当前操作方块.gotoAndStop(当前操作方块.形状);
    }
    //向下键                                      
    if (Key.isDown(40)) {
        if (!游戏结束) {
            移动(当前操作方块);
        }
    }
    if (Key.isDown(37)) {
        横向移动(当前操作方块, "左");
    }
    if (Key.isDown(39)) {
        横向移动(当前操作方块, "右");
    }
};
Key.addListener(keyListener);




源码下载:
下载文件 点击下载此文件
视频教程列表
文章教程搜索
 
Flash AS推荐教程
Flash AS热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058