亲宝软件园·资讯

展开

JavaScript中秋博饼

LiBiGo 人气:0

1、什么是中秋节(中秋博饼)

中秋节的最大特征是将人与自然和谐的美好愿望寄托在天上,八月中正当农业丰收的季节,月饼和瓜果既是敬神的供品,也是丰收的具体象征。花好月圆之夜户户团聚,加强了亲情关系,中秋节亦因此而成为社会和谐的重要媒介。

中秋博饼习俗源于福建厦门,盛行于漳州的龙海、泉州的安海和金门县等地,清代康乾时期的《台湾府志》曾有过相关记载。每逢中秋佳节,闽南及台湾地区会以家庭或社团为单位,自发举行中秋博饼活动,参加者以六个骰子轮流投掷,博取状元、榜眼、探花、进士、举人、秀才六个等第并按等第获取大小不同的月饼。博饼的游戏规则简单公平,既充满竞争悬念,又富于生活情趣,历来为广大民众所喜爱。

2、游戏玩法

2.1 道具

大的瓷碗一个,类似盛汤那种大碗。其次是六个骰子,多一个少一个都不行。

2.2 流程

每个人按人数围成一桌,一般博饼都会有聚餐,每一桌大概10人左右。然后围成圈,将瓷碗放置在桌子中间。然后每人依次把6个骰子投进大碗里,博到什么就领取什么奖品,如果没有博到任何奖品也需要将骰子交付给下一位成员,然后由下一位成员继续投骰子,根据骰子的点数得获取奖品,直至所有的奖品全部博完为止。

2.3 规则

根据科举制度来划分等级,由高到低。

六抔红:六个4====>所有的饼全归投者所有。

六抔黑:六个其他数字。

状元插金花:四个4+两个1。

五子登科:五个相同的数。

状元:四个4带其他两个任意数。

对堂:摇出顺子,比如123456

四进:除了4以外的四个相同的数,比如666611

三红:三个4

二举:两个4

一秀:一个4

3.中秋博饼H5设计(直接进入)

中秋博饼H5

3.1介绍

3.2点击开始博饼 

4.导入程序自己diy

程序链接:

中秋博饼H5代码

提取码:d47f

启动开发

$ cd mid-autumn
$ npm install
$ npm start

编译打包

$ npm run build

抽出通用的博饼逻辑

返回博饼结果

提前设置结果

判断奖项

5. 代码实现

5.1 indexjs

import { MidAutumn } from './common';
import './style/main.less';
 
import $ from "jquery";
 
 
 
class Game {
    result = [];
    position = [];
 
    midAutumn = new MidAutumn();
 
    start() {
        this.result = this.midAutumn.start();
        // this.result = this.midAutumn.setResult([4, 4, 4, 4, 1, 1]).getResult();
        console.log(this.midAutumn.getAward());
        this.setDice();
    }
 
    getPosition() {
        let position = []
        this.position = [1, 2, 3, 4, 5, 6, 7];
        for (let i = 0; i < 6; i++) {
            position.push(this.position.splice(Math.floor(Math.random() * this.position.length), 1)[0])
        }
        return position;
    }
 
    setDice() {
        $("#bowl").removeClass('active');
        const position = this.getPosition();
        $.each($("#bowl .dice"), (index, item) => {
            $(item).removeClass();
            $(item).addClass(`sprite dice dice${this.result[index]} dice-position${position[index]}`)
        })
        setTimeout(() => {
            $("#bowl").addClass('active');
        }, 200)
    }
}
 
$(() => {
    const game = new Game();
    $("#startGame").click(() => {
        game.start();
    })
});

5.2 mid-autumn.js代码逻辑

export default class MidAutumn {
 
    constructor(config = {}) {
        this.config = config;
    }
 
    result = [];
    awardList = [];
 
    // '000600' 六勃红
    // '600000' 遍地锦
    // '060000' '006000' '000060' '000006' 六勃黑
    // '111111' 对堂
    // '100500' '010500' '001500' '000510' '000501' 五红
    // '5xxxxx' 'x5xxxx' 'xx5xxx' 'xxxx5x' 'xxxxx5' 五子登科
    // '200400' 状元插金花
    // 'xxx4xx' 状元
    // '4xxxxx' 'x4xxxx' 'xx4xxx' 'xxxx4x' 'xxxxx4' 四进
    // 'xxx3xx' 三红
    // 'xxx2xx' 二举
    // 'xxx1xx' 一秀
    rule = [{
        reg: /000600/,
        name: '六勃红'
    }, {
        reg: /600000/,
        name: '遍地锦'
    }, {
        reg: /6/,
        name: '六勃黑'
    }, {
        reg: /111111/,
        name: '对堂'
    }, {
        reg: /^\d{3}5\d{2}$/,
        name: '五红'
    }, {
        reg: /5/,
        name: '五子登科'
    }, {
        reg: /200400/,
        name: '状元插金花'
    }, {
        reg: /^\d{3}4\d{2}$/,
        name: '状元'
    }, {
        reg: /4/,
        name: '四进'
    }, {
        reg: /^\d{3}3\d{2}$/,
        name: '三红'
    }, {
        reg: /^\d{3}2\d{2}$/,
        name: '二举'
    }, {
        reg: /\d{3}1\d{2}$/,
        name: '一秀'
    }]
 
    _change() {
        const { onChange } = this.config;
        typeof onChange === 'function' && onChange(this.result);
    }
 
    // 开始博饼
    start() {
        return this.getPoint();
    }
 
    // 获取随机的6个点数
    getPoint() {
        this.result.length = 0;
        for (let i = 0; i < 6; i++) {
            this.result.push(Math.floor(Math.random() * 6) + 1)
        }
        this._change();
        return this.result;
    }
 
    // 通过传入特定的6个色子设置结果的点数
    setResult(result) {
        if (!(result instanceof Array) || result.length !== 6) {
            throw new Error('设置的结果必须是一个数字数组,并且每个数字在1到6之间');
        }
        this.result = result;
        this._change();
        return this;
    }
 
    getResult() {
        return this.result;
    }
 
    // 统计结果,将不同的点数统计在对应的位置上
    // [1点, 2点, 3点, 4点, 5点, 6点]
    _countResult() {
        this.award = [0, 0, 0, 0, 0, 0];
        this.result.forEach(item => {
            this.award[item - 1]++;
        });
        return this;
    }
 
    // 判断结果是什么奖项
    getAward() {
        this._countResult();
        const awardString = this.award.join('');
        console.log(awardString);
        if (this.rule && this.rule.length) {
            for (let i = 0; i < this.rule.length; i++) {
                if (this.rule[i].reg.test(awardString)) {
                    return {
                        name: this.rule[i].name,
                    }
                }
            }
            return {
                name: '未中奖',
            }
        }
    }
}

加载全部内容

相关教程
猜你喜欢
用户评论