俄罗斯方块Laya源码(非商用未拆分无架构)

import { ui } from "./../ui/layaMaxUI";
// import Rank from "./Rank";
//重写点击拖拽事件
export default  class MainGameScript extends Laya.Script{

    //#region 属性初始化
	private _scene:Laya.Scene3D;
	private _camera:Laya.Camera;

    protected lastMouseX: number;
    protected lastMouseY: number;

    static clickNum:number;//点击状态:-1:运行模式,1~4:创建按钮,0:归零模式

    private boxObjsPool:Array<Laya.MeshSprite3D>=new Array();// 存储物体的对象池

    private maxLine=11;//最大列度
    private deviant=5;//maxline/2 偏移值
    private maxRow=11;//最大行数

    private maxKind=12;//最大种类
    private currentGetKey=0;//当前获取到的指针
   
    private moveObjArray:Array<MoveBoxArray>=new Array(); // 存储移动的数组:移动完毕后进入属性
    private moveArrayprOperty:Array<number[]>=new Array();//存储移动数组的属性
    private minPosNum:number=0;//移动数组最左边的位置
    private maxPosNum:number=0;//移动数组最右边的位置
    // private eliminateArray:Array<MoveBoxArray>=new Array();//消除数组
    // private targetArray:Array<MoveBoxArray>=new Array();//目标数组
     
    private showObjArray:Array<MoveBoxArray>=new Array();//展示用的数组  
    private row:Array<number[]>=new Array();// 行列 
    
    private isMouseDown:boolean;//按钮是否被点击

    static isCreat:boolean=false;//是否创建
    
    static isMove:boolean=false;//是否移动

    private moveSpeed:number;//移速

    static isReset=false;//是否重置

    /**移动计时器更新时间*/
    private _time: number = 0;

    static land:Laya.MeshSprite3D;//地面


    private gradeNum:number=0;//分数
    private maxGradeNum:number=0;//最高分数

    private goldNum:number=0;//金币

    //#region 静态UI部分
    static uiMain;
    static img_next:Laya.Sprite;
    static img1:Laya.Sprite;
    static img2:Laya.Sprite;
    static img3:Laya.Sprite;
    static img4:Laya.Sprite;   
    static storeBtu:Laya.Button;//打开商城按钮
    static cancelCreatBtu:Laya.Button;//取消点击按钮

    static uiReset;
    static resetNoThanks:Laya.Button;
    static resetGradeT:Laya.Text;
    static resetMaxGradeT:Laya.Text;
    static resetShare:Laya.Button;

    static uiHintAll;
    private uiHintTime:number=0;//提示显示的时间
    static hintText;
    static hintT:Laya.Text;
    static hintGet;
    
    static uiSignIn;
    private firstLoginTime:string;//首次登录时间
    private lastLoginTime:string;//上次登录时间
    private signNumber:number=0;//签到次数
    static clickGetSign:Laya.Button;//点击获取签到按钮
    static signSpecial;
    static signNode;
    private signGetSkin=4;
    static signedNode;

    static uiMessage;
    static mainGoldT:Laya.Text;
    static gradeT:Laya.Text;//分数
    static maxGradeT:Laya.Text;//最高分
    static levelT:Laya.Text;//关卡数
    // static main

    static uiStore;
    static closeStoreBtu:Laya.Button;
    private _isOpenStore:boolean=false;
    static storeClickNum:number=1;//点击选中皮肤
    private actualSkinNum:number=1;//实际选中的皮肤
    private drawNumber:number=0;//抽奖次数
    private skinAllNumber:Array<number>=new Array<number>();//全部皮肤
    static storeClickStart:boolean=false;
    static storePageNum=-1;
    private storePage=1;
    static storeGoldT:Laya.Text;
    static storePageNode;  
    static storePage1:Laya.Button;
    static storePage2:Laya.Button;
    static extractBtu:Laya.Button;//皮肤抽奖
    static extractT:Laya.Text;
    static storeShareBtu:Laya.Button;//商城分享
    private lastClickSkinNum:number=1;//上一选中ID    

    static uiPassed;
    static passGoldT:Laya.Text;
    static passGradeT:Laya.Text;//分数
    static passMaxGradeT:Laya.Text;//最高分
    static passLevelT:Laya.Text;//关卡数
    static passStoreOpen:Laya.Button;//打开商店
    static passNextChapter:Laya.Button;//进入下一关

    //#endregion
    static m_sceneCfg={};//关卡表
    static chapter=0;//关卡
    private gameInning:number=0;//游戏局数(每次登陆游戏算起,失败也算)

    static m_difficultyCfg={};//难度表

    private hintArray:Array<Laya.MeshSprite3D[]>=new Array();//提示用的数组:初始化的时候布满所有的行列,并关闭,在需要显示的时候打开
    // private hintArrOperty:Array<Laya.MeshSprite3D>=new Array();//显示提示数组的属性组
    private hintArray2:Array<Laya.MeshSprite3D[]>=new Array();
    // private hintArrOperty2:Array<Laya.MeshSprite3D>=new Array();
    // private allShowArrayObj:Array<Laya.MeshSprite3D[]>=new Array();//所有正常显示的数组

    private isWillDie=true;//模拟的时候死亡

    private lastMovePos=0;//上一偏移位置
    private nextMovePos=0;//下一偏移位置

    private wx;//微信接口

    constructor(){
		super();
        this._scene = null;	  
		this._camera = null;	
        this.isMouseDown=false;
        this.lastMouseX=0;
        this.lastMouseY=0;       
        MainGameScript.clickNum=0; 
        Laya.LocalStorage.clear();
        if(Laya.LocalStorage.getItem("firstLoginTime")!=null)
        {
            console.log("再次登陆游戏43543");
            this.gradeNum=  Number(Laya.LocalStorage.getItem("gradeNum"));
            this.maxGradeNum=Number(Laya.LocalStorage.getItem("maxGradeNum"));
            this.goldNum=  Number( Laya.LocalStorage.getItem("goldNum") );
            this.firstLoginTime= Laya.LocalStorage.getItem("firstLoginTime");
            this.lastLoginTime= Laya.LocalStorage.getItem("lastLoginTime");
            this.signNumber=  Number(Laya.LocalStorage.getItem("signNumber"));
            MainGameScript.chapter=  Number(Laya.LocalStorage.getItem("chapter"));
            this.GetAllSkin();
            this.actualSkinNum= Number(Laya.LocalStorage.getItem("skinNum"));
            this.drawNumber= Number(Laya.LocalStorage.getItem("drawNumber"));
        }
        else
        {
            console.log("初次登陆游戏1111");
            // var str=Date.parse(new Date().toString());
            //初始化
            Laya.LocalStorage.setItem("gradeNum","0");
            Laya.LocalStorage.setItem("maxGradeNum","0");

            Laya.LocalStorage.setItem("goldNum","0"); 

            Laya.LocalStorage.setItem("firstLoginTime",new Date().toString());//存储当前时间
            Laya.LocalStorage.setItem("lastLoginTime",new Date().toString());
            Laya.LocalStorage.setItem("signNumber","0");

            Laya.LocalStorage.setItem("chapter","0");
            this.SetAddSkin(1);
            Laya.LocalStorage.setItem("skinNum","1")
        }
        MainGameScript.extractT.text=""+(500+this.drawNumber*300);

        // if (Laya.Browser.onMiniGame) {
        //     this.wx = Laya.Browser.window.wx;
        //     }
        this.onStart();
             
    }
    onStart(){       
        this._scene =  this.owner.parent as Laya.Scene3D;
        this._camera = this._scene.getChildByName("camera") as Laya.Camera;
        console.log("初始化asffasfrasfas");
        Laya.stage.on(Laya.Event.MOUSE_DOWN, this, this.mouseDown);
        Laya.stage.on(Laya.Event.MOUSE_UP, this, this.mouseUp);
        Laya.stage.on(Laya.Event.MOUSE_OUT, this, this.mouseOut);
        Laya.stage.on(Laya.Event.DRAG_MOVE, this, this.mouseDrag);
        Laya.stage.on(Laya.Event.DRAG_END, this, this.mouseDragEnd);

        this.ChangSkin(this.actualSkinNum);

        ShowBoxArray.onLoad();

        this.StartBoxNature();
       
        this.onUIStart();

        // this.WXInterface();
       
    }

    onUIStart()
    {
        MainGameScript.resetNoThanks.on(Laya.Event.MOUSE_DOWN,this,this.OnResets);
        MainGameScript.storeBtu.on(Laya.Event.CLICK,this,this.OpenStore);
        MainGameScript.closeStoreBtu.on(Laya.Event.CLICK,this,this.CloseStore);
        MainGameScript.passStoreOpen.on(Laya.Event.CLICK,this,this.OpenStore);
        MainGameScript.passNextChapter.on(Laya.Event.CLICK,this,this.ClosePass);
        MainGameScript.storeShareBtu.on(Laya.Event.CLICK,this,this.OnShareAddGold);
        MainGameScript.extractBtu.on(Laya.Event.CLICK,this,this.StoreExtract);
        MainGameScript.clickGetSign.on(Laya.Event.CLICK,this,this.SignGet);
        MainGameScript.cancelCreatBtu.on(Laya.Event.MOUSE_MOVE,this,this.CancleSelect);
        MainGameScript.resetShare.on(Laya.Event.CLICK,this,this.OnShareReset);

        MainGameScript.gradeT.text=""+this.gradeNum;
        MainGameScript.resetGradeT.text=""+this.gradeNum;
        MainGameScript.passGradeT.text=""+this.gradeNum;
        MainGameScript.maxGradeT.text="最高分 "+this.maxGradeNum;
        MainGameScript.resetMaxGradeT.text="最高分 "+this.maxGradeNum;
        MainGameScript.passMaxGradeT.text="最高分 "+this.maxGradeNum;
        MainGameScript.levelT.text="关卡 "+MainGameScript.chapter;
        MainGameScript.passLevelT.text="关卡 "+MainGameScript.chapter;
        MainGameScript.mainGoldT.text=""+this.goldNum;
        MainGameScript.storeGoldT.text=""+this.goldNum;
        MainGameScript.passGoldT.text=""+this.goldNum;

        MainGameScript.uiHintAll._visible=false;
        MainGameScript.uiReset._visible=false;
        MainGameScript.uiSignIn._visible=false;
        MainGameScript.uiPassed._visible=false;
        MainGameScript.cancelCreatBtu.visible=false;

        console.log("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        this.StartStore(1);
    }
    //#endregion
    
    //region  微信小程序部分
    WXInterface()
    {
        console.log("启动微信接口");       
        if(Laya.Browser.onMiniGame)
        {
            this.wx=Laya.Browser.window.wx;
            this.wx.setUserCloudStorage({
                KVDataList: [
                { key: "k", value: "v" }
                ],
                success: () => {
                    console.log("数据发送成功");
                },
                fail: () => {
                    console.log("数据发送失败");
                }
                }
            );                
        }
        else
        {
            console.log("启动微信接口失败");       
        }       
        // if(Laya.Browser.onMiniGame){
        //     //加载一个json和图集
        //     Laya.loader.load(["json/reward.json","res/atlas/test.atlas"],Laya.Handler.create(null,function(){
        //         //加载完成
        //         //使用接口将图集透传到子域
        //         Laya.MiniAdpter.sendAtlasToOpenDataContext("res/atlas/test.atlas");    
        //         //使用接口将json投促函到子域
        //         Laya.MiniAdpter.sendJsonDataToDataContext("json/reward.json");
        //     }));
        // }
        console.log("结束调用微信");
    }

    private OnShareReset(e: Laya.Event): void {
        console.log("进入分享按钮");
        if (this.wx == null) {
            console.log("wx为空");
            return;
        }

        var canvas = this.wx.createCanvas();
        canvas.width = 640;
        canvas.height = 480;
        var context = canvas.getContext('2d');
        var bgm = this.wx.createImage();
        bgm.src = "jiangbei.png";

        bgm.onload = () => {
            context.drawImage(bgm, 0, 0, 640, 480);
            context.fillStyle = "rgba(0,0,0,1)";
            context.font = "bold 30px Arial";
            context.textAlign = "left";
            context.textBaseline = "middle";
            context.fillText("关卡", 200, 100);
            context.fillText( 999+ " 章节", 240, 190);

            this.wx.shareAppMessage({
                title: "小伙伴快来和我一起玩啊",
                imageUrl: canvas.toTempFilePathSync({
                    destWidth: 640,
                    destHeight: 480
                }),
                success: () => {
                    console.log("分享成功");

                },
                fail: () => {
                    console.log("分享失败");
                }
            })
        }       
    }


    private OnShareAddGold(e: Laya.Event): void {
        this.StoreShare();
        console.log("进入分享按钮");
        if (this.wx == null) {
            console.log("wx为空");
            return;
        }

        var canvas = this.wx.createCanvas();
        canvas.width = 640;
        canvas.height = 480;
        var context = canvas.getContex
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值