标题: 用flash做点小游戏, 一,简单flash代码实现连连看,二,是男人就下100层
性别:未知-离线 lufy


Rank: 5Rank: 5
组别 校尉
级别 裨将军
功绩 13
帖子 310
编号 347822
注册 2009-11-21


用flash做点小游戏

无聊中用flash做点小游戏,有兴趣的一起玩玩
貌似这里大家对flash不太感冒阿

一,简单flash代码实现连连看 #1

二,是男人就下100层 #8

[ 本帖最后由 lufy 于 2011-2-15 12:47 编辑 ]


顶部
性别:未知-离线 lufy


Rank: 5Rank: 5
组别 校尉
级别 裨将军
功绩 13
帖子 310
编号 347822
注册 2009-11-21


一,简单flash代码实现连连看

不做不知道,连连看原来如此简单
四个as类加一张图片

Main.as文件
package LianLian.Mains {
       
        import flash.display.Sprite;
        import flash.display.Shape;
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.Loader;
        import flash.net.URLRequest;
        import flash.geom.Matrix;
        import flash.geom.Rectangle;
        import flash.events.Event;
       
        import LianLian.Box.ImageBox;
        import LianLian.Image.ImageCtrl;
        public class Main extends Sprite{
               
                //声明Bitmap
                private var _image:Bitmap;
                //图片载入器
                private var _pic_loader:Loader;
                //图片数组
                public var _imageArr:Array;
                public var _mapLeng:int;
                //数据数组
                public var _mapArr:Array;
                //小块数组
                public var _boxArr:Array;
                //小块
                private var _box:ImageBox;
                //点击图片数组
                public var _clickArr:Array;
                //线数组
                public var _lineArr:Array;
                //底层Sprite
                private var _spriteImage:Sprite;
                //线Sprite
                private var _spriteLine:Sprite;
                //搜索类
                private var _query:QueryRoad;
                //画线时间控制
                private var _lineCtrl:int;
                //画线笔刷
                private var _shapes:Shape;
                /**
                *Main类
                *构造器
                */
                public function Main() {
                        //初始化各个数据
                       
                        //添加底层画板和线画板
                        _spriteImage = new Sprite();
                        _spriteLine = new Sprite();
                        addChild(_spriteImage);
                        addChild(_spriteLine);
                        _clickArr = new Array();
                        _mapArr = new Array();
                        _boxArr = new Array();
                        _lineArr = new Array();
                        _query = new QueryRoad(this);
                        //设置数组长度
                        _mapLeng = 8;
                       
                        //载入外部图片
                        _pic_loader = new Loader();
                        _pic_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadImage);
                        _pic_loader.load(new URLRequest("image.jpg"));
                }
                /**
                *载入外部图片完毕
                */
                private function onLoadImage(event:Event):void {
                        _pic_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoadImage);
                        _image = Bitmap(_pic_loader.content);
                        //拆分图片
                        _imageArr = ImageCtrl.divide(_image,15,1);
                        //随机数组生成与显示
                        setMapArr(_mapLeng);
                }
                /**
                *连接判断
                *返回值:无
                */
                public function checkClick():void{
                        //点击图片数小于2的时候,无处理
                        if(_clickArr.length < 2){
                                return;
                        }
                        //开始检索判断
                        //判断两个图片是否相同
                        if(_clickArr[0]._index != _clickArr[1]._index){
                                //如果两个图片无法消去
                                _clickArr[0].alpha = 1;
                                _clickArr.splice(0,1);
                                return;
                        }
                        //进行搜索
                        _query.queryCheck();
                       
                        //如果两个图片可以消去
                        if(_lineArr.length > 0){
                                _lineCtrl = 0;
                                this.addEventListener(Event.ENTER_FRAME, onFrame);
                        }else{
                                //如果两个图片无法消去
                                _clickArr[0].alpha = 1;
                                _clickArr.splice(0,1);
                        }
                }
                /**
                *贞函数
                */
                private function onFrame(event:Event):void {
                        //画线
                        if(_lineCtrl == 0){
                                _shapes = new Shape();
                                _shapes.graphics.lineStyle(1, 0xFF0000, 1);
                                for(var i:int = 0;i<_lineArr.length - 1;i++){
                                        _shapes.graphics.moveTo(_lineArr._point.x*50 + 25,_lineArr._point.y*50 + 25);
                                         _shapes.graphics.lineTo(_lineArr[i + 1]._point.x*50 + 25,_lineArr[i + 1]._point.y*50 + 25);
                                }
                                _shapes.graphics.endFill( );
                                _spriteLine.addChild(_shapes);
                        }
                        //清除线,并消去相同图片
                        if(_lineCtrl >= 5){
                                this.removeEventListener(Event.ENTER_FRAME, onFrame);
                                _spriteLine.removeChildAt( 0 );
                                _clickArr[0].setImageData(0);
                                _clickArr[1].setImageData(0);
                                _clickArr.splice(0,_clickArr.length);
                                _lineArr.splice(0,_lineArr.length);
                        }
                        _lineCtrl ++;
                }
                /**
                *数据数组GET
                *参数
                *        数组长度
                *返回值:成对随机数组
                */
                private function setMapArr(len:int):void{
                        var arr:Array = new Array();
                        //得到总图片数
                        var leng:int = Math.pow(len,2);
                        var i:int;
                        var ran_value:int;
                        //成对生成随机数据
                        for(i=0;i<leng/2;i++){
                                ran_value = Math.random()*15 + 1;
                                arr.push(ran_value);
                                arr.push(ran_value);
                        }
                        getDataArr(len + 2);
                        //将成对数组乱序抽出,生成数据数组
                        for(i=0;i<leng;i++){
                                ran_value = Math.random()*arr.length;
                                _box = _boxArr[Math.floor(i/len) + 1][i%len + 1];
                                _box.setImageData(arr[ran_value]);
                                //删除已经添加的数据
                                arr.splice(ran_value,1);
                        }
                }
                /**
                *空数据数组GET
                *参数
                *        数组长度
                *返回值:空数据数组
                */
                private function getDataArr(len:int):void{
                        var i:int;
                        var j:int;
                        var arr:Array;
                        for(i=0;i<len;i++){
                                arr = new Array();
                                for(j=0;j<len;j++){
                                        _box = new ImageBox(j,i,this);
                                        _box.x = j*50;
                                        _box.y = i*50;
                                        _spriteImage.addChild(_box);
                                        arr.push(_box);
                                }
                                _boxArr.push(arr);
                        }
                       
                }
        }
       
}
ImageCtrl.as文件
package LianLian.Image{
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.geom.Matrix;
        import flash.geom.Rectangle;
        import flash.geom.Point;
        public class ImageCtrl {
                public function ImageCtrl() {
                }
                /*
                        图片拆分
                        *参数
                                source:原图片,row:图片列数,col:图片行数
                        *返回值:载入小图片的数组
                */
                public static function divide(source:Bitmap,row:int,col:int,total:* = null):Array {
                        //计算出每个小位图对象的宽度
                        var w:uint=source.width/row;
                        //计算出每个小位图对象的高度
                        var h:uint=source.height/col;
                        //计算有效位图总数
                        total=total==null?col*row:total;
                        //定义结果数组
                        var result:Array= new Array();
                        //定义矩阵
                        var matrix:Matrix = new Matrix();
                        //定义矩形
                        var rect:Rectangle=new Rectangle(0,0,w,h);
                        out:for (var j:int = 0; j < col; j++) {
                                var tempArr:Array = new Array();
                                for (var i:int = 0; i < row; i++) {
                                        if (total<=0) {
                                                break out;
                                        }
                                        //新建小位图对象
                                        var bmp:BitmapData=new BitmapData(w,h,true,0x00000000);
                                        //定义矩阵的焦点
                                        matrix.tx=- i*w;
                                        matrix.ty=- j*h;
                                        //将矩阵内的数据按定义好的矩形大小和相应位置,画出小位图对象像素
                                        bmp.draw(source,matrix,null,null,rect,true);
                                        tempArr.push(bmp);
                                        total--;
                                }
                                result.push(tempArr);
                        }
                        return result;
                }
               
        }
}
ImageBox.as文件
package LianLian.Box {
        import flash.display.Bitmap;
        import flash.display.Sprite;
        import flash.events.MouseEvent;
        import flash.geom.Point;
        import LianLian.Mains.Main;
        public class ImageBox extends Sprite{
                //声明Bitmap
                private var _image:Bitmap;
                //値
                public var _index:int;
                //位置
                public var _point:Point;
                //main类
                private var _main:Main;
                public function ImageBox(pointx:int,pointy:int,main:Main) {
                        _main = main;
                        //小块位置
                        _point = new Point(pointx,pointy);
                        //值设为空
                        _index = 0;
                        _image = new Bitmap(null);
                        //添加显示
                        this.addChild(_image);
                        //添加点击事件
                        this.addEventListener(MouseEvent.CLICK, onClick);
                }
               
                /**
                *设置图片
                *参数
                *        值
                *返回值:无
                */
                public function setImageData(index:int):void{
                        _index = index;
                        if(index == 0){
                                _image.bitmapData = null;
                                this.buttonMode         = false;
                        }else{
                                _image.bitmapData = _main._imageArr[0][index - 1];
                                this.buttonMode         = true;
                        }
                }
               
                /**
                *点击事件
                */
                private function onClick(event:MouseEvent):void{
                        if(_main._clickArr.length >= 2){
                                return;
                        }else{
                                //二次点击禁止
                                if(this.alpha < 1){
                                        return;
                                }
                                //点击后设置透明度为0.5
                                this.alpha = 0.5;
                                _main._clickArr.push(this);
                                //相同判断开始
                                _main.checkClick();
                        }
                }
       
        }
       
}
QueryRoad.as文件
package LianLian.Mains {
       
        public class QueryRoad {
                private var _main:Main;
                public function QueryRoad(main:Main) {
                        _main = main;
                }
                public function queryCheck():void{
                         var checkResult:Boolean = false;
                         var x1:int = _main._clickArr[0]._point.x;
                         var y1:int = _main._clickArr[0]._point.y;
                         var x2:int = _main._clickArr[1]._point.x;
                         var y2:int = _main._clickArr[1]._point.y;
                         //逐步进行检查,如果两个图片可以相连,则将画线需要经过的折点存入_lineArr数组,准备画线
                         
                         //横向检查
                        checkResult = checkRow(x1,y1,x2,y2);
                        if(checkResult){
                                _main._lineArr.push(_main._clickArr[0]);
                                _main._lineArr.push(_main._clickArr[1]);
                                return;
                        }
                        //纵向检查
                        checkResult = checkCol(x1,y1,x2,y2);
                        if(checkResult){
                                _main._lineArr.push(_main._clickArr[0]);
                                _main._lineArr.push(_main._clickArr[1]);
                                return;
                        }
                        //一次折线检查
                        checkResult = checkOnce(x1,y1,x2,y2);
                        if(checkResult){
                                _main._lineArr.unshift(_main._clickArr[0]);
                                _main._lineArr.push(_main._clickArr[1]);
                                return;
                        }
                        //二次折线检查横向检测
                        checkResult = checkTwiceRow(x1,y1,x2,y2);
                        if(checkResult){
                                _main._lineArr.unshift(_main._clickArr[0]);
                                _main._lineArr.push(_main._clickArr[1]);
                                return;
                        }
                        //二次折线检查纵向检测
                        checkResult = checkTwiceCol(x1,y1,x2,y2);
                        if(checkResult){
                                _main._lineArr.unshift(_main._clickArr[0]);
                                _main._lineArr.push(_main._clickArr[1]);
                                return;
                        }
                }
                 /**
                  * 二次折线检查横向检测
                  *判断四种情况,
                  *1表示点击图片,0表示检索路径,3表示其他图片
                  *一
                  *0000
                  *0330
                  *1331
                  *二
                  *1331
                  *0330
                  *0000
                  *三
                  *1333
                  *0333
                  *0000
                  *3330
                  *3331
                  *四
                  *3331
                  *3330
                  *0000
                  *0333
                  *1333
                  */
                 private function checkTwiceRow(x1:int,y1:int,x2:int,y2:int):Boolean
                 {
                         var checkResult:Boolean;
                          for(var i:int = 0;i<_main._mapLeng + 2;i++){
                                 if(x1<=x2){
                                         if(checkRow(x1-1,i,x2 + 1,i)){
                                                if(checkCol(x1,y1,x1,i)&&checkCol(x2,y2,x2,i)){
                                                        checkResult = true;
                                                        _main._lineArr.push(_main._boxArr[x1]);
                                                        _main._lineArr.push(_main._boxArr[x2]);
                                                        break;
                                                }
                                        }
                                 }else{
                                         if(checkRow(x2-1,i,x1 + 1,i)){
                                                if(checkCol(x1,y1,x1,i)&&checkCol(x2,y2,x2,i)){
                                                        checkResult = true;
                                                        _main._lineArr.push(_main._boxArr[x1]);
                                                        _main._lineArr.push(_main._boxArr[x2]);
                                                        break;
                                                }
                                        }
                                 }
                          }
                        return checkResult;
                 }
                 /**
                  * 二次折线检查纵向检测
                  *判断四种情况,
                  *1表示点击图片,0表示检索路径,3表示其他图片
                  *一
                  *1000
                  *3330
                  *1000
                  *二
                  *0001
                  *0333
                  *0001
                  *三
                  *10033
                  *33033
                  *33033
                  *33033
                  *33001
                  *四
                  *33001
                  *33033
                  *33033
                  *33033
                  *10033
                  */
                 private function checkTwiceCol(x1:int,y1:int,x2:int,y2:int):Boolean
                 {
                         var checkResult:Boolean;
                          for(var i:int = 0;i<_main._mapLeng + 2;i++){
                                 if(y1<y2){
                                         if(checkCol(i,y1-1,i,y2 + 1)){
                                                if(checkRow(x1,y1,i,y1)&&checkRow(x2,y2,i,y2)){
                                                        checkResult = true;
                                                        _main._lineArr.push(_main._boxArr[y1]);
                                                        _main._lineArr.push(_main._boxArr[y2]);
                                                        break;
                                                }
                                        }
                                 }else{
                                         if(checkCol(i,y2-1,i,y1 + 1)){
                                                if(checkRow(x1,y1,i,y1)&&checkRow(x2,y2,i,y2)){
                                                        checkResult = true;
                                                        _main._lineArr.push(_main._boxArr[y1]);
                                                        _main._lineArr.push(_main._boxArr[y2]);
                                                        break;
                                                }
                                        }
                                 }
                          }
                        return checkResult;
                 }
                 /**
                  * 一次折线检查
                  *判断四种情况,
                  *1表示点击图片,0表示检索路径,3表示其他图片
                  *一
                  *1000
                  *3330
                  *3331
                  *二
                  *0001
                  *0333
                  *1333
                  *三
                  *1333
                  *0333
                  *0001
                  *四
                  *3331
                  *3330
                  *1000
                  */
                 private function checkOnce(x1:int,y1:int,x2:int,y2:int):Boolean
                 {
                         var checkResult:Boolean;
                         if(x1<x2)
                         {
                                 checkResult = checkRow(x1,y1,x2+1,y1)&&checkCol(x2,y1,x2,y2);
                                 if(checkResult){
                                         _main._lineArr.push(_main._boxArr[y1][x2]);
                                 }else{
                                         checkResult = checkRow(x1 - 1,y2,x2,y2)&&checkCol(x1,y1,x1,y2);
                                        if(checkResult){
                                                _main._lineArr.push(_main._boxArr[y2][x1]);
                                        }
                                 }
                         }else{
                                 checkResult = checkRow(x1,y2,x1,y1)&&checkCol(x1 + 1,y2,x2,y2);
                                 if(checkResult){
                                         _main._lineArr.push(_main._boxArr[y2][x1]);
                                 }else{
                                         checkResult = checkRow(x2 - 1,y1,x1,y1)&&checkCol(x2,y2,x2,y1);
                                        if(checkResult){
                                                _main._lineArr.push(_main._boxArr[y1][x2]);
                                        }
                                 }
                         }
                         return checkResult;
                 }
                 
                /**
                 * 横向检查
                 *这个简单,只需要判断两个图片中间是否有其他图片即可
                */                 
                 private  function checkRow(x1:int,y1:int,x2:int,y2:int):Boolean{
                         var checkResult:Boolean = true;
                         var i         :int;
                         if(y1 != y2){
                                return false;
                         }else if(Math.abs(x1 - x2) == 1){
                                return true;
                        }
                         for(i = Math.min(x1,x2) +1;i<Math.max(x1,x2);i++)
                         {
                                 if(_main._boxArr[y1]._index==0){
                                        checkResult = true;
                                 } else{
                                        checkResult = false;
                                        break;
                                 }
                         }
                         
                         return checkResult;
                 }
                 
                 /**
                 * 纵向检查
                 *这个简单,只需要判断两个图片中间是否有其他图片即可
                 */
                 private function checkCol(x1:int,y1:int,x2:int,y2:int):Boolean{
                         var checkResult:Boolean = true;
                         var i        : int;
                         if(x1 != x2){
                                return false;
                         }else if(Math.abs(y1 - y2) == 1){
                                return true;
                        }
                         for(i = Math.min(y1,y2) +1;i<Math.max(y1,y2);i++)
                         {
                                 if(_main._boxArr[x1]._index==0){
                                        checkResult = true;
                                 } else{
                                        checkResult = false;
                                        break;
                                 }
                         }
                         
                         return checkResult;
                 }
        }
       
}


顶部
性别:未知-离线 lufy


Rank: 5Rank: 5
组别 校尉
级别 裨将军
功绩 13
帖子 310
编号 347822
注册 2009-11-21


连连看演示路径
http://lufy.hp2.jp/sample/lianlian/

[ 本帖最后由 lufy 于 2010-8-5 10:12 编辑 ]


附件: [源代码] LianLian.rar (2010-7-7 08:57, 34.81 K)
该附件被下载次数 175
顶部
性别:男-离线 godtype001
(毅)

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 2
帖子 229
编号 350019
注册 2009-12-10
来自 我家


发表于 2010-7-7 09:00 资料 短消息 只看该作者
无法连最上面一行的。
顶部
性别:男-离线 godtype001
(毅)

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 2
帖子 229
编号 350019
注册 2009-12-10
来自 我家


发表于 2010-7-7 09:01 资料 短消息 只看该作者
好像是被广告遮住了。
顶部
性别:未知-离线 lufy


Rank: 5Rank: 5
组别 校尉
级别 裨将军
功绩 13
帖子 310
编号 347822
注册 2009-11-21


没办法啊,用了免费的服务器
带点广告,不过每次广告位置和大小也不太一样,刷新几下试试
顶部
性别:男-离线 godtype001
(毅)

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 2
帖子 229
编号 350019
注册 2009-12-10
来自 我家


发表于 2010-7-7 09:12 资料 短消息 只看该作者
之前是多次刷新都无效,现在刷新一次就可以了。做得很好
顶部
性别:未知-离线 lufy


Rank: 5Rank: 5
组别 校尉
级别 裨将军
功绩 13
帖子 310
编号 347822
注册 2009-11-21


是男人就下100层

最近买了android,在电车上挺无聊的,给android做了个小游戏玩玩,顺便弄了个flash版
游戏画面如下:

游戏测试URL如下:
http://lufy.hp2.jp/sample/jump/
这个游戏实现起来很简单,代码也很少,首先需要几个碎图:

因为游戏简单,直接把相应的图做成MC来的比较快
一共以下几个MC
游戏精灵,普通地板,可旋转地板,左移地板,右移地板,弹跳地板,减HP地板
在各个MC内部添加几行代码

/*********可旋转地板**************/
//是否可站立,游戏精灵存在,则开始播放,在第五贞设定为false,并且开始翻转,表示不可站立
var st:Boolean = true;
var fun:Function;
stop();
/*********左移地板**************/
import flash.display.Sprite;

var st:Boolean = true;
var charaIsMove:Boolean = true;
//游戏精灵
var chara:Sprite;
onMove();
function onMove():void{
        if(chara != null){
                //游戏精灵不为空的时候,将游戏精灵向左移
                if(chara.x < this.x || chara.x > this.x + this.width){
                        chara = null;
                        st = false;
                }else{
                        chara.x -= 2;
                }
        }
}
/*********右移地板**************/
import flash.display.Sprite;

var st:Boolean = true;
var charaIsMove:Boolean = true;
//游戏精灵
var chara:Sprite;
onMove();
function onMove():void{
        if(chara != null){
                //游戏精灵不为空,将精灵向右移
                if(chara.x < this.x || chara.x > this.x + this.width){
                        chara = null;
                        st = false;
                }else{
                        chara.x += 2;
                }
        }
}
/*********弹跳地板**************/
import flash.display.Sprite;

var st:Boolean = true;
var charaIsMove:Boolean = true;
var chara:Object;
stop();
function onJump():void{
        if(chara != null){
                //游戏精灵不为空,则弹跳
                chara.jumpSpeed = -15;
                chara.jump = true;
                chara = null;
        }
}
/*********减HP地板**************/
//表示可站立
var st:Boolean = true;
//减HP
var minsHp:Boolean = true;

游戏实现部分,只需要一个类Main,下面是所有代码
package game {
        import flash.display.Sprite;
    import flash.utils.getDefinitionByName;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.text.TextField;
        import flash.events.KeyboardEvent;
        import flash.display.Shape;
        import flash.display.DisplayObjectContainer;
        import flash.system.fscommand;
        //import flash.desktop.NativeApplication;
       
        public class Main extends Sprite{
                private var _chara:chara = new chara();
                private var _wall:Sprite = new Sprite();
                private var _bak:Sprite = new Sprite();
                private var _bakImg:bak = new bak();
                private var _mai:mai = new mai();
                private var _ue:ue = new ue();
                private var _hp:hp = new hp();
                private var _chara_ctrl:Boolean = false;
                private var _sectend:int = 0;
                private var _speed:int = 2;
                private var _mcList:Array = new Array();
                private var _leftCtrl:Boolean = false;
                private var _rightCtrl:Boolean = false;
                private var _mcIndex:int = 0;
                private var _mcArray:Array = new Array();
                private var _txt:TextField = new TextField();
                private var _hpIndex:int = 1;
                private var _charaOld:int = 1;
                private var _shape:Shape = new Shape();
                private var _showText:Sprite = new Sprite();
                private var _gameStart:Boolean = false;
                private var _sound:jiao = new jiao();
                private var _hpAdd:int = 0;
                //加入地板
                private function getMC(my:int = 480,mx:int = -1):void{
                        var i:int = Math.floor(Math.random()*_mcArray.length);
                        var ClassReference:Class;
                        ClassReference = getDefinitionByName(_mcArray) as Class;
                        var nmc:Sprite = new ClassReference as Sprite;
                        nmc.y = my - this._wall.y;
                        if(mx < 0){
                                nmc.x = Math.floor(Math.random()*270) - 50;
                        }else{
                                nmc.x = mx;
                        }
                        this._mcList.push(nmc);
                        this._bak.addChild(nmc);
                       
                       
                }
                public function Main() {
                        //将各种地板加入数组
                        //普通地板
                        _mcArray.push("mc");
                        //可旋转地板
                        _mcArray.push("toumc");
                        //左移地板
                        _mcArray.push("leftMc");
                        //右移地板
                        _mcArray.push("rightMc");
                        //弹跳地板
                        _mcArray.push("tan");
                        //减HP地板
                        _mcArray.push("sMc");
                       
                        //添加各个画板层
                        this._bak.addChild(_bakImg);
                        this._wall.addChild(this._bak);
                        this._wall.addChild(this._chara);
                        this._chara.x = 160;
                        this._chara.y = 100;
                        this.addChild(this._wall);
                       
                        this.addChild(_mai);
                        this.addChild(_ue);
                        _hp.x = 20;
                        _hp.y = 460;
                        this.addChild(_hp);
                       
                        this.addChild(_shape);
                        _txt.selectable = false;
                        _txt.x = 20;
                        _txt.y = 430;
                        _txt.width = 200;
                        _txt.height = 200;
                        this.addChild(_txt);
                        this.addChild(_showText);
                        this.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
                        this.addEventListener(MouseEvent.MOUSE_UP,onUp);
                       
                        stage.addEventListener(KeyboardEvent.KEY_DOWN,isKeyDown,false,0,true);
                        stage.addEventListener(KeyboardEvent.KEY_UP,isKeyUp,false,0,true);
                        stage.showDefaultContextMenu = false
                       
                        //fscommand("showmenu", "false");
                        init();
                }
                //游戏初始化
                private function init():void{
                        this._bak.y = 0;
                        this._wall.y = 0;
                        var i:int;
                        for(i=0;i<_mcList.length;i++){
                                this._bak.removeChild(_mcList);
                        }
                        _mcList.splice(0,_mcList.length);
                       
                        this._chara.x = 160;
                        this._chara.y = 100;
                        //添加游戏说明框
                        _shape.graphics.lineStyle(5, 0x000000,0.8);
                        _shape.graphics.beginFill(0x999999,0.6);
                        _shape.graphics.drawRoundRect(50,100,220,300,20,20);
                       
                        _shape.graphics.lineStyle(5, 0x000000,0.8);
                        _shape.graphics.beginFill(0x999999,0.6);
                        _shape.graphics.drawRoundRect(70,300,180,40,10,10);
                       
                        _shape.graphics.lineStyle(5, 0x000000,0.8);
                        _shape.graphics.beginFill(0x999999,0.6);
                        _shape.graphics.drawRoundRect(70,350,180,40,10,10);
                       
                        var txt:TextField = new TextField();
                        txt.selectable = false;
                        txt.width = 200;
                        txt.height = 400;
                        txt.x = 60;
                        txt.y = 110;
                        txt.htmlText = "<font color='#FFFFFF' size='20'><b>" + "  100階にチャレンジ\n\nあなたができますか?\n\n"+
                        "操作:\n</b></font>" +
                        "<font color='#FFFFFF' size='15'><b>「←」キーをクリック:\n      ・左に移動\n" +
                        "<font color='#FFFFFF' size='15'><b>「→」キーをクリック:\n      ・右に移動\n" +
                        "</b></font>";
                        _showText.addChild(txt);
                        txt = new TextField();
                        txt.selectable = false;
                        txt.x = 120;
                        txt.y = 305;
                        txt.htmlText = "<font color='#FFFFFF' size='20'><b>" + "スタート"+ "</b></font>";
                        _showText.addChild(txt);
                        txt = new TextField();
                        txt.selectable = false;
                        txt.x = 120;
                        txt.y = 355;
                        txt.htmlText = "<font color='#FFFFFF' size='20'><b>" + " 閉じる"+ "</b></font>";
                        _showText.addChild(txt);
                        //gameStart();
                       
                }
                //游戏结束
                private function gameOver():void{
                        this._chara.jump = false;
                        _leftCtrl = false;
                        _rightCtrl = false;
                        _sound.play();
                        _hpIndex = 1;
                        _hp.gotoAndStop(_hpIndex);
                        _gameStart = false;
                        _sectend = 0;
                        this.removeEventListener(Event.ENTER_FRAME,onFrame);
                        this._bak.y = 0;
                        this._wall.y = 0;
                        this._bakImg.y = 0;
                        var i:int;
                        for(i=0;i<_mcList.length;i++){
                                this._bak.removeChild(_mcList);
                        }
                        _mcList.splice(0,_mcList.length);
                       
                        this._chara.x = 160;
                        this._chara.y = 100;
                       
                        _shape.graphics.lineStyle(5, 0x000000,0.8);
                        _shape.graphics.beginFill(0x999999,0.6);
                        _shape.graphics.drawRoundRect(50,100,220,300,20,20);
                       
                        _shape.graphics.lineStyle(5, 0x000000,0.8);
                        _shape.graphics.beginFill(0x999999,0.6);
                        _shape.graphics.drawRoundRect(70,300,180,40,10,10);
                       
                        _shape.graphics.lineStyle(5, 0x000000,0.8);
                        _shape.graphics.beginFill(0x999999,0.6);
                        _shape.graphics.drawRoundRect(70,350,180,40,10,10);
                        var txt:TextField = new TextField();
                        txt.selectable = false;
                        txt.width = 200;
                        txt.height = 400;
                        txt.x = 60;
                        txt.y = 110;
                        txt.htmlText = "<font color='#FFFFFF' size='20'><b>" + "       GAME OVER\n\n"+
                        "階数:" + _txt.text +
                        "\n称号:" + getName(int(_txt.text)) +
                        "\n</b></font>";
                        _showText.addChild(txt);
                        txt = new TextField();
                        txt.selectable = false;
                        txt.x = 120;
                        txt.y = 305;
                        txt.htmlText = "<font color='#FFFFFF' size='20'><b>" + "スタート"+ "</b></font>";
                        _showText.addChild(txt);
                        txt = new TextField();
                        txt.selectable = false;
                        txt.x = 120;
                        txt.y = 355;
                        txt.htmlText = "<font color='#FFFFFF' size='20'><b>" + " 閉じる"+ "</b></font>";
                        _showText.addChild(txt);
                }
                //游戏称号
                private function getName(cnt:int):String{
                        if(cnt < 10){
                                return "赤ちゃん";
                        }else if(cnt < 20){
                                return "子供";
                        }else if(cnt < 30){
                                return "小学生";
                        }else if(cnt < 40){
                                return "中学生";
                        }else if(cnt < 50){
                                return "高校生";
                        }else if(cnt < 60){
                                return "大学生";
                        }else if(cnt < 70){
                                return "大学院生";
                        }else if(cnt < 80){
                                return "専門家";
                        }else if(cnt < 90){
                                return "高級専門家";
                        }else{
                                return "神";
                        }
                }
                //游戏开始
                private function gameStart():void{
                        //在画板上添加3个地板
                        getMC(300,160);
                        getMC(350);
                        getMC(400);
                       
                        this.addEventListener(Event.ENTER_FRAME,onFrame,false,0,true);
                }
                //键盘按下
                private function isKeyDown(event:KeyboardEvent):void{
                        if(!_gameStart){
                                return;
                        }
                        if(event.keyCode == 37){
                                if(_leftCtrl){
                                        return;
                                }
                                _leftCtrl = true;
                                _rightCtrl = false;
                                this._chara.gotoAndPlay("left");
                        }else if(event.keyCode == 39){
                                if(_rightCtrl){
                                        return;
                                }
                                _rightCtrl = true;
                                _leftCtrl = false;
                                this._chara.gotoAndPlay("right");
                        }
                }
                //键盘弹起
                private function isKeyUp(event:KeyboardEvent):void{
                        if(event.keyCode == 37){
                                _leftCtrl = false;
                        }else if(event.keyCode == 39){
                                _rightCtrl = false;
                        }
                }
                //鼠标按下
                private function onDown(event:MouseEvent):void{
                        var intX:Number = event.currentTarget.mouseX;
                        var intY:Number = event.currentTarget.mouseY;
                        if(_gameStart){
                                if(intX <= 160){
                                        if(_leftCtrl){
                                                return;
                                        }
                                        _leftCtrl = true;
                                        _rightCtrl = false;
                                        this._chara.gotoAndPlay("left");
                                }else{
                                        if(_rightCtrl){
                                                return;
                                        }
                                        _rightCtrl = true;
                                        _leftCtrl = false;
                                        this._chara.gotoAndPlay("right");
                                }
                        }else if(intX > 70 && intX < 250 && intY > 300 && intY < 340){
                                _gameStart = true;
                                _shape.graphics.clear();
                                this.removeAllChildren(_showText);
                                gameStart();
                        }else if(intX > 70 && intX < 250 && intY > 350 && intY < 390){
                               
                                fscommand("quit");
                                //stage.nativeWindow.close();
                                //NativeApplication.nativeApplication.exit();
                        }
                        stage.focus = this;
                }
                //删除地板方法
                public function removeAllChildren(
                        containerisplayObjectContainer ):void {
                        var count:int = container.numChildren;
                        for ( var i:int = 0; i < count; i++ ) {
                                container.removeChildAt( 0 );
                        }
                }
                //鼠标弹起
                private function onUp(event:MouseEvent):void{
                        var intX:Number = event.currentTarget.mouseX;
                        if(intX <= 160){
                                _leftCtrl = false;
                        }else{
                                _rightCtrl = false;
                        }
                       
                }
                //逻辑部分
                private function onFrame(event:Event):void{
                        var speedNum:Number = 0.03;
                        var downlength:Number;
                        var _child:Object;
                        //找到画面外可删除地板,将其删除
                        if(_mcList.length > 0 && _mcList[0].y - this._wall.y < 40){
                                _child = _mcList[0] as Object;
                                if(_child.charaIsMove != null && _child.chara != null){
                                        _child.chara = null;
                                }
                                this._bak.removeChild(_mcList[0]);
                                _mcList.splice(0,1);
                        }
                        var i:int;
                        this._wall.y -= _speed;
                        //游戏精灵上升下降,以及上升下降幅度控制
                        if(!_chara_ctrl){
                                this._chara.y += _speed;
                                downlength = speedNum*_sectend*_sectend;
                                if(downlength > 37){
                                        downlength = 37;
                                }
                                this._chara.y += downlength;
                                _sectend++;
                        }else if(this._chara.jump){
                                this._chara.y += _speed;
                                this._chara.y -= 0.06*this._chara.jumpSpeed*this._chara.jumpSpeed;
                                //charaOld = this._chara.y;
                                this._chara.jumpSpeed++;
                                if(this._chara.jumpSpeed >= 0){
                                        this._chara.jump = false;
                                }
                        }
                        //是否处在弹跳阶段
                        if(!this._chara.jump){
                                _chara_ctrl = false;
                        }else{
                                if(this._chara.jumpSpeed >= 0){
                                        this._chara.jump = false;
                                }
                       
                        }
                        //循环地板数组
                        for(i=0;!this._chara.jump && i<this._mcList.length;i++){
                                _child = _mcList as Object;
                               
                                //找到精灵接触的地板,这里也可以用hitTestObject来判断
                                if(this._chara.y >= _child.y &&
                                   this._chara.x >= _child.x && _child.st &&
                                   this._chara.x <= _child.x + _child.width && _charaOld <= _child.y+1){
                                                if(_hpAdd > 0 && _charaOld != this._chara.y){
                                                        _hpAdd--;
                                                        if(_hpAdd == 0 && _hpIndex > 1){
                                                                _hpIndex--;
                                                                _hp.gotoAndStop(_hpIndex);
                                                        }
                                                }
                                                if(_child.charaIsMove != null && _child.charaIsMove){
                                                        _child.chara = this._chara;
                                                }
                                                if(_child.minsHp != null && _child.minsHp){
                                                        _child.minsHp = false;
                                                        _hpIndex++;
                                                        _hpAdd = 5;
                                                        _hp.gotoAndStop(_hpIndex);
                                                }
                                                this._chara.y = _child.y +1;
                                                _sectend = 1;
                                                _chara_ctrl = true;
                                                _child.play();
                                                break;
                                }
                        }
                        //是否接触到上方的刺针
                        if(this._chara.hitTestObject(_ue)){
                                _chara_ctrl = false;
                                this._chara.jump = false;
                                this._chara.y += 30;
                                _sectend = 3;
                                _hpIndex++;
                                _hpAdd = 5;
                                _hp.gotoAndStop(_hpIndex);
                               
                        }
                        //循环背景图片,达到连贯显示
                        if(this._wall.y % 130 == 0){
                                _bakImg.y += 130;
                        }
                        //精灵移动
                        if(_leftCtrl){
                                this._chara.x -= _speed*2;
                        }
                        if(_rightCtrl){
                                this._chara.x += _speed*2;
                        }
                        if(this._chara.x<25){
                                this._chara.x = 25;
                        }
                        if(this._chara.x>295){
                                this._chara.x = 295;
                        }
                        if(_mcIndex <= 0){
                                this.getMC();
                                _mcIndex = Math.floor(Math.random()*60) + 30;
                        }
                        _mcIndex--;
                        //显示楼层
                        _txt.htmlText = "<font color='#FFFFFF' size='20'>" + Math.floor((-this._wall.y)/480) + "</font>";
                        _charaOld = this._chara.y;
                        //判断游戏是否结束
                        if(_hpIndex >= 4){
                                gameOver();
                        }else if(this._chara.y + this._wall.y > 540){
                                gameOver();
                        }
                }
        }
       
}

小游戏完成了,简单吧?这就是flash,开发小游戏,有着绝对的优势
源码放出,加图片,加音效,总共才102K


附件: jump.rar (2011-2-15 11:56, 101.42 K)
该附件被下载次数 144
顶部
性别:男-离线 震慑群邪

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 44
编号 413657
注册 2011-2-9
来自 圣诞岛
家族 轩辕学院


发表于 2011-2-19 00:45 资料 短消息 只看该作者
无法评价……

[ 本帖最后由 震慑群邪 于 2011-2-19 00:48 编辑 ]
顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2024-12-31 01:11
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.022075 second(s), 11 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP