JavaScript實(shí)現(xiàn)中秋博餅游戲的示例代碼
1、什么是中秋節(jié)(中秋博餅)
中秋節(jié)的最大特征是將人與自然和諧的美好愿望寄托在天上,八月中正當(dāng)農(nóng)業(yè)豐收的季節(jié),月餅和瓜果既是敬神的供品,也是豐收的具體象征?;ê迷聢A之夜戶戶團(tuán)聚,加強(qiáng)了親情關(guān)系,中秋節(jié)亦因此而成為社會(huì)和諧的重要媒介。
中秋博餅習(xí)俗源于福建廈門,盛行于漳州的龍海、泉州的安海和金門縣等地,清代康乾時(shí)期的《臺(tái)灣府志》曾有過(guò)相關(guān)記載。每逢中秋佳節(jié),閩南及臺(tái)灣地區(qū)會(huì)以家庭或社團(tuán)為單位,自發(fā)舉行中秋博餅活動(dòng),參加者以六個(gè)骰子輪流投擲,博取狀元、榜眼、探花、進(jìn)士、舉人、秀才六個(gè)等第并按等第獲取大小不同的月餅。博餅的游戲規(guī)則簡(jiǎn)單公平,既充滿競(jìng)爭(zhēng)懸念,又富于生活情趣,歷來(lái)為廣大民眾所喜愛(ài)。
2、游戲玩法
2.1 道具
大的瓷碗一個(gè),類似盛湯那種大碗。其次是六個(gè)骰子,多一個(gè)少一個(gè)都不行。
2.2 流程
每個(gè)人按人數(shù)圍成一桌,一般博餅都會(huì)有聚餐,每一桌大概10人左右。然后圍成圈,將瓷碗放置在桌子中間。然后每人依次把6個(gè)骰子投進(jìn)大碗里,博到什么就領(lǐng)取什么獎(jiǎng)品,如果沒(méi)有博到任何獎(jiǎng)品也需要將骰子交付給下一位成員,然后由下一位成員繼續(xù)投骰子,根據(jù)骰子的點(diǎn)數(shù)得獲取獎(jiǎng)品,直至所有的獎(jiǎng)品全部博完為止。
2.3 規(guī)則
根據(jù)科舉制度來(lái)劃分等級(jí),由高到低。
六抔紅:六個(gè)4====>所有的餅全歸投者所有。
六抔黑:六個(gè)其他數(shù)字。
狀元插金花:四個(gè)4+兩個(gè)1。
五子登科:五個(gè)相同的數(shù)。
狀元:四個(gè)4帶其他兩個(gè)任意數(shù)。
對(duì)堂:搖出順子,比如123456
四進(jìn):除了4以外的四個(gè)相同的數(shù),比如666611
三紅:三個(gè)4
二舉:兩個(gè)4
一秀:一個(gè)4
3.中秋博餅H5設(shè)計(jì)(直接進(jìn)入)
3.1介紹
3.2點(diǎn)擊開始博餅
4.導(dǎo)入程序自己diy
程序鏈接:
提取碼:d47f
啟動(dòng)開發(fā)
$ cd mid-autumn $ npm install $ npm start
編譯打包
$ npm run build
抽出通用的博餅邏輯
返回博餅結(jié)果
提前設(shè)置結(jié)果
判斷獎(jiǎng)項(xiàng)
5. 代碼實(shí)現(xiàn)
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' 對(duì)堂 // '100500' '010500' '001500' '000510' '000501' 五紅 // '5xxxxx' 'x5xxxx' 'xx5xxx' 'xxxx5x' 'xxxxx5' 五子登科 // '200400' 狀元插金花 // 'xxx4xx' 狀元 // '4xxxxx' 'x4xxxx' 'xx4xxx' 'xxxx4x' 'xxxxx4' 四進(jìn) // 'xxx3xx' 三紅 // 'xxx2xx' 二舉 // 'xxx1xx' 一秀 rule = [{ reg: /000600/, name: '六勃紅' }, { reg: /600000/, name: '遍地錦' }, { reg: /6/, name: '六勃黑' }, { reg: /111111/, name: '對(duì)堂' }, { reg: /^\d{3}5\d{2}$/, name: '五紅' }, { reg: /5/, name: '五子登科' }, { reg: /200400/, name: '狀元插金花' }, { reg: /^\d{3}4\d{2}$/, name: '狀元' }, { reg: /4/, name: '四進(jìn)' }, { 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(); } // 獲取隨機(jī)的6個(gè)點(diǎn)數(shù) 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; } // 通過(guò)傳入特定的6個(gè)色子設(shè)置結(jié)果的點(diǎn)數(shù) setResult(result) { if (!(result instanceof Array) || result.length !== 6) { throw new Error('設(shè)置的結(jié)果必須是一個(gè)數(shù)字?jǐn)?shù)組,并且每個(gè)數(shù)字在1到6之間'); } this.result = result; this._change(); return this; } getResult() { return this.result; } // 統(tǒng)計(jì)結(jié)果,將不同的點(diǎn)數(shù)統(tǒng)計(jì)在對(duì)應(yīng)的位置上 // [1點(diǎn), 2點(diǎn), 3點(diǎn), 4點(diǎn), 5點(diǎn), 6點(diǎn)] _countResult() { this.award = [0, 0, 0, 0, 0, 0]; this.result.forEach(item => { this.award[item - 1]++; }); return this; } // 判斷結(jié)果是什么獎(jiǎng)項(xiàng) 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: '未中獎(jiǎng)', } } } }
到此這篇關(guān)于JavaScript實(shí)現(xiàn)中秋博餅游戲的示例代碼的文章就介紹到這了,更多相關(guān)JavaScript中秋博餅內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS開發(fā)中基本數(shù)據(jù)類型具體有哪幾種
JS的數(shù)據(jù)類型包括基本數(shù)據(jù)類型、復(fù)雜數(shù)據(jù)類型和特殊數(shù)據(jù)類型,今天我們主要先講解一下基本數(shù)據(jù)類型。感興趣的朋友一起看看吧2017-10-10JavaScript設(shè)計(jì)模式之職責(zé)鏈模式應(yīng)用示例
這篇文章主要介紹了JavaScript設(shè)計(jì)模式之職責(zé)鏈模式,結(jié)合實(shí)例形式分析了javascript責(zé)任鏈模式的概念、原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-08-08Javascript實(shí)現(xiàn)簡(jiǎn)易導(dǎo)航欄
這篇文章主要為大家詳細(xì)介紹了Javascript實(shí)現(xiàn)簡(jiǎn)易導(dǎo)航欄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06ionic 3.0+ 項(xiàng)目搭建運(yùn)行環(huán)境的教程
本篇文章主要介紹了ionic 3.0+ 項(xiàng)目搭建運(yùn)行的教程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08js操作CheckBoxList實(shí)現(xiàn)全選/反選(在客服端完成)
對(duì)于CheckBoxList控件來(lái)說(shuō),一方面要實(shí)現(xiàn)大量數(shù)據(jù)在服務(wù)器端的綁定工作,另一方面往往要求實(shí)現(xiàn)全選、反選等功能,接下來(lái)將介紹js操作CheckBoxList實(shí)現(xiàn)全選/反選,感興趣的朋友可以了解下,或許對(duì)你有所幫助2013-02-02簡(jiǎn)單對(duì)比分析JavaScript中的apply,call與this的使用
簡(jiǎn)單的說(shuō)call,apply都屬于Function.prototype的一個(gè)方法,它是JavaScript引擎內(nèi)在實(shí)現(xiàn)的,因?yàn)閷儆贔unction.prototype,所以每個(gè)Function對(duì)象實(shí)例(就是每個(gè)方法)都有call,apply屬性。既然作為方法的屬性,那它們的使用就當(dāng)然是針對(duì)方法的了,這兩個(gè)方法是容易混淆的2015-12-12使用electron實(shí)現(xiàn)百度網(wǎng)盤懸浮窗口功能的示例代碼
這篇文章主要介紹了使用electron實(shí)現(xiàn)百度網(wǎng)盤懸浮窗口功能的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10