微信小游戏实战--cocos creator实现wordle游戏(五)

到目前为止我们已经实现了整个游戏的界面以及“空格”和键盘按钮的动画,接下来完成游戏的基础玩法流程。

完整代码

一、初始化游戏

由于在游戏中“空格”的背景和Label会有相应的变化。所以在游戏开始前需要进行一些初始化设置。

1、随机生成一个5个字母的单词。

2、重置“空格”的背景和字体颜色:重置为在Cocos Creator编辑器中的初始设计值。

3、设置“空格”只读:初始状态下,只有第一排可以输入。

4、重置键盘按钮的背景颜色:重置为在Cocos Creator编辑器中的初始设计值。

5、设置当前选中的“空格”。

在gamemanager中实现以上功能,代码如下:

    import { words } from './words';//加载词库
    //根据词库随机生成一个单词
    setCurrentAnswer () {
        let sAnswer = words.getRandomword();
        gamemanager._currentAnswer = sAnswer;
    }

    getCurrentAnswer () {
        return gamemanager._currentAnswer;
    }

    //重置中间方块区域
    resetMiddleBtn () {
        let homeNode = gamemanager.instance.homeNode;
        for (let i = 0; i < 6; i ++){
            let layoutNode = homeNode.getChildByPath('top/Layout_middle' + (i + 1).toString());
            for(let j = 0; j < layoutNode.children.length;j++){
                layoutNode.children[j].getChildByName('Sprite').getComponent(Sprite).spriteFrame = 
                layoutNode.children[j].getChildByName('Sprite').getComponent(Sprite).spriteAtlas.getSpriteFrame('btn_border');
                layoutNode.children[j].getChildByName('Label').getComponent(Label).string = '';
                layoutNode.children[j].getChildByName('Label').getComponent(Label).color = new Color(0,0,0);
            }  
        }  
    }
    //设置中间方块区域只读
    setMiddleBtnReadOnly () {
        let homeNode = gamemanager.instance.homeNode;
        for (let i = 0; i < 6; i ++){
            let layoutNode = homeNode.getChildByPath('top/Layout_middle' + (i + 1).toString());
            if (i === 0) {
                gamemanager.instance.setBtnEnable(layoutNode,true);
            }
            else {
                gamemanager.instance.setBtnEnable(layoutNode,false); 
            }   
        }  
    }
    setBtnEnable(layoutNode,isEnable){
        if(layoutNode) {
            for(let i = 0;i < layoutNode.children.length;i++){
                layoutNode.children[i].getComponent(Button).enabled = isEnable;
            }
        }
    } 
    //重置键盘按钮
    resetKeybordeBG () {
        let homeNode = gamemanager.instance.homeNode;
        for(let i = 0; i < 3; i++){
            let layoutNode = homeNode.getChildByPath('top/Layout_bottom' + (i + 1).toString());
            for(let j = 0; j < layoutNode.children.length; j++){
                    layoutNode.children[j].getComponent(Sprite).spriteFrame = 
                    layoutNode.children[j].getComponent(Sprite).spriteAtlas.getSpriteFrame('keybord_bg');
            }
        }
    }
    //运行“空格”输入动画
    showBtnInputTween (currentBtnNode) {
        currentBtnNode.getComponent('btn_middle').tweenObjLabelInput.start();
    }
    //运行“空格”清除动画
    showBtnClearTween (currentBtnNode) {
        currentBtnNode.getComponent('btn_middle').tweenObjClear.start();
    }

词库是在github上找的原版游戏的词库。词库分为两部分,正确的单词大概有2700多个,允许输入的单词大概有1万个。原版游戏的作者只将常用的英文单词作为正确答案,考虑不通国家的玩家的语言不同又增加了近万个单词允许输入。后续教程写完以后会将原代码以及所用到的素材提供下载,这里就不再贴出来了,太长不好显示。

在home.ts脚本中增加initgame函数来统一管理游戏初始化过程:

    start () {
        this.initgame();
    }
    //初始化游戏
    initgame() {
        let homeNode = gamemanager.instance.getHomeNode();   
        const layoutnode = homeNode.getChildByPath('top/Layout_middle1');
        //设置答案
        gamemanager.instance.setCurrentAnswer();
        //重置中间框格背景,字体颜色
        gamemanager.instance.resetMiddleBtn();
        //设置中间方格只读
        gamemanager.instance.setMiddleBtnReadOnly();
        //重置键盘按钮颜色
        gamemanager.instance.resetKeybordeBG(); 
        //选中第一个方框
        gamemanager.instance.setCurrentLayoutNode(layoutnode); 
        gamemanager.instance.setCurrentBtnNode(layoutnode.children[0]); 
        layoutnode.children[0].getComponent(Button).clickEvents[0].emit(['click']);                     
    }

 二、提交答案

1、获取当前所在第几排,然后将这一排5个字母组合成一个字符串。

2、进行合法性校验:填写的字母够不够5个,是否为有效单词。

3、若未通过校验则显示提示框,提示框为prefab组件。

在home.ts中增加submitAnswer函数,代码如下:

    submitAnswer () {//提交答案
        let currentLayoutNode = gamemanager.instance.getCurrentLayoutNode();
        let err = '';
        let sAnswer = '';

        for (let i = 0;i < currentLayoutNode.children.length; i++) {
            sAnswer += currentLayoutNode.children[i].getChildByName('Label').getComponent(Label).string;
        }
        sAnswer = sAnswer.toLowerCase();
        if (sAnswer.length < 1) {
            err = '请填一个单词';
        }
        else if (sAnswer.length < 5) {
            err = '单词还没有填完';
        }
        else if (words.allwords.indexOf(sAnswer) < 0){//校验单词
            err = '不是有效单词';
        }

        if (err) {//弹出提示框
            Util.showDiolag('prefab/messageBox',homeNode.parent,(newNode) =>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大宝贱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值