当前位置 博文首页 > iR-Poke:day132:2RenMJ:MJ需求文档&MJ游戏流程&Egret白

    iR-Poke:day132:2RenMJ:MJ需求文档&MJ游戏流程&Egret白

    作者:iR-Poke 时间:2021-01-30 15:42

    目录

    1.麻将产品需求文档

    2.麻将游戏流程

    3.Egret白鹭引擎

    4.TypeScript简要了解

    5.TypeScript快速入门

    1.麻将产品需求文档

    1.麻将术语

    1.名词术语

    牌?:

    序数牌:?万,?万,三万,…,九万,?筒,?筒,…, 九筒,?条 ---- 九条

    字牌:字牌?分为?牌和箭牌

    ?牌: 东南?北

    箭牌:中发?

    花牌:春夏秋冬梅兰?菊

    ?牌:1、9、字牌,统称?牌

    刻?:三张相同的牌

    箭刻:中发?的刻?

    ?刻:东南?北的刻?明刻:碰的牌为明刻

    暗刻: ??摸上来的为暗刻

    ?九刻:1、9或字牌的刻?成为?九刻

    对?:

    普通对?:两张相同的牌

    将牌:将规定牌型胡牌时必须具备的单独组合的对?

    顺?:?般为三张同花?序数相连的牌,如?万,?万,三万

    ?牌:?般标准数为?三张。包括摆亮在?前的刻?、杠;未亮明的?牌为?牌

    庄家、闲家:每局中??为庄家,其他的未闲家

    盘:每次从起牌到胡牌或流局为?盘

    轮:?牌?周为?轮

    牌墩:2个叠在?起的麻将

    牌墙:2?各?在?前码的墩牌

    2.动作术语

    吃牌:

    正常吃牌:上家打出?张牌后,本家打出两张牌,与上家的牌组成?个顺?为吃牌。吃牌只能吃上家

    的。

    胡牌吃牌:任意玩家打出?张牌,本家打出两张牌,与玩家的牌组成?个顺?并且能胡牌,胡牌时吃牌

    不限于上家。

    碰牌:任?家打出牌后,报碰牌者把??的对?取出,加在?起组成?副刻?摆亮在?牌前。

    杠牌:

    明杠:上家打牌之后,如果你?上有三张跟那被打出的牌?样的,就可以“杠牌”,这种杠牌叫做“明

    杠”。

    暗杠:如果是?内摸有四张相同的牌,取出杠牌,则叫做“暗杠”。

    加杠/补杠:如果是已经碰牌了,却?再摸??张相同的牌,也可以叫杠牌—这种杠牌叫做“加杠”

    补张:杠牌后,需要补张,即从牌墙的末尾端摸?张牌放??牌中

    补花:摸到花牌时,将花牌放?旁,再进?补张

    听牌:?盘中玩家只差所需的?张牌技能胡牌的状态

    胡牌:摸到符合规定的牌型条件。最终形成指定牌型,如四个顺?或刻?组合加?对将牌

    ?摸:所胡的牌为??正常莫得,即称之为?摸胡,简称?摸

    点炮:所胡的牌为别?打出来的牌,成为点炮

    流局:摸完所有牌后都??胡牌即称为流局。如出现流局庄家继续坐庄

    2.基本规则

    此处以??麻将基本规则为例:

    a. 游戏?数:2?

    b. 牌数

    共72张牌,包括:

    万字牌,?万?九万,各四张,共36张

    ?字牌,东南?北各4张,共16张

    箭牌,中发?各4张,共12张

    花牌:春夏秋冬梅兰?菊各?张

    c. 定庄

    第?局庄家:匹配房随机庄家;好友房房主坐庄

    第?盘起,上盘谁胡牌,下盘谁坐庄

    流局则庄家继续坐庄

    抢杠胡,被抢杠的玩家下局当庄(输家当庄)

    d. 摸牌

    起?摸牌:游戏?开始,庄家可得到14张牌,闲家13张,庄家先出

    局内摸牌:玩家打出?张牌后,??响应在,则下家从牌堆的起始处摸?张牌补张:杠牌或摸到花牌后,从牌堆的末尾处摸?张牌

    e. 补花

    局内补花:当玩家摸到花牌时,展示花牌,并从?牌中移出,然后进?补张,如下?张也是花牌,重复

    此动作,直到摸到?花牌

    起?摸牌阶段补花:从庄家开始依次补花,即庄家先补,如果补上来的牌也是花牌,需要等其他玩家都

    补过以后,庄家才可以补,其他玩家动作和庄家?样

    f. 吃碰杠

    吃牌和碰牌后,玩家需要打出?张牌

    杠牌中的暗杠、补杠,玩家摸到后不强制杠牌,玩家可以选择过,在以后的回合开始后选择杠。

    杠牌的玩家需要从牌堆末尾摸?张牌,再打出?张牌

    g. 听牌

    胡牌提示:玩家再打出?张牌即进?听牌状态时,给玩家的?个提示;玩家选中要打出的牌时,提示玩

    家能胡哪?张牌及其剩余的张数及番型。

    报听:告诉对???已经进?听牌状态,界?上有展示,报听的玩家不能展示??的?牌,摸啥打啥

    天听:摸完牌,庄家打出?张牌时即报听、闲家摸到第?张牌时即报听且报听后必须打出第?张摸来的

    牌,为天听

    选择听牌后,将对?玩家的?牌展示出来使该听牌玩家可以看到,此时未听牌的玩家不能看到对??牌

    h. 胡牌

    在第?场中6番起胡,中级场中10番起胡,?级场中12番起胡

    3.特殊规则

    过胡加倍:

    听牌的玩家在触发胡牌时,可以选择过胡,过胡的玩家胡牌时,结算的分数翻倍;

    结算时,得分为2的n次幂,即过胡?次为2的1次幂,过胡2次,则为2的2次幂。

    2.麻将游戏流程

    1.新用户游戏流程

     

    2.新用户领取金币注册流程

    3.用户领取破产补助流程

    4.快速开始流程

    5.初级场/中级场/高级场逻辑流程

    6.金币流向流程

    7.牌局进行流程

    8.牌局结束后在匹配流程

    3.Egret白鹭引擎

    官网:http://www.egret.com/

    手册:https://docs.egret.com/engine/docs/getStarted/helloWorld

    示例:https://github.com/egret-labs/egret-examples

    1.介绍

    Egret是一套完整的HTML5游戏开发解决方案,是免费开源的企业级的游戏引擎,Egret中包含多个工具以及项目。Egret Engine是一个基于TypeScript语言开发的HTML5游戏引擎,使用Egret Engine开发的游戏可发布为HTML5版本,运行于浏览器之中,也可以发布为iOS、Android和WindowsPhone原生APP程序。

    2.安装

    1.下载安装包,地址:https://docs.egret.com/engine

    2.安装引擎,这里我们考虑到麻将项目中使用的是5.0.0和4.0.3这2个版本,所以为了兼容,我们选择下载5.0.0和4.0.3版本。

    当然,开发中可以根据自己的需要,如果需要其他版本,可以一并下载安装的。

    3.安装代码界面编辑器

    3.创建一个项目

    4.TypeScript简要了解

    英文官网:https://www.typescriptlang.org/

    中文官网:https://www.tslang.cn/

    1.介绍

    TypeScript 是一种强类型的编程语言,它起源于使用JavaScript开发的大型项目,由于JavaScript本身属于弱类型语言的局限性,难以胜任和维护大型项目的开发工作。因此微软于2012年推出了TypeScript ,使得其能够胜任开发大型项目。

    TypeScript通过在JavaScript的基础上添加静态类型定义构建而成,可以编译为 JavaScript代码来执行。它最大特点是强大的类型系统和对ES6规范的支持,TypeScript托管于GitHub上面。

    ES6:ECMA2015/2016/2017的简称,刚好是属于ECMA的第6个版本。
    javascript:ECMA语法,BOM浏览器对象模型和DOM文档对象模型。js是网景公司推出的浏览器端脚本语言。
    欧洲计算机制造协会:简称ECMA

    2.特点

    • 类型系统:类型注解、编译时类型检查、类型推断和类型擦除

    • 接口

    • 枚举

    • Mixin

    • 泛型编程

    • 命名空间

    从 ECMA 6规范中移植而来的:

    • 模块

    • lambda 函数的箭头语法

    • 可选参数以及默认参数

    • 元组【事实上就是js里面的数组来的,只是typescript提供了不同的玩法而已,和python里面的元祖不是一回事】

    • await / async

    3.JavaScript 与 TypeScript 的关系和区别

    TypeScript属于Javascript 的超集,扩展了Javascript的语法,现有的Javascript代码可以不经任何改动的情况下在TypeScript环境下运行。同时TypeScript代码可以通过typescript的编译器转换为纯正的 JavaScript代码,且编译出来的 JavaScript代码能够运行在任何浏览器上。TypeScript 的编译工具也可以运行在任何服务器和任何系统上。

    typeScript文件的后缀为.ts。

    4.TypeScript的优势

    • 现有大部分的流行的代码编辑器IDE工具都支持typescript,在编写typescript代码时,比原生javascript提示更加友好。

      typescript的类型系统相当于最好的文档对于陌生函数或者类的使用更加透明,易懂。

    • typescript提供的类型系统增强了前端代码的可读性和可维护性,在编译时即可提前发现大部分的错误,不需要项目运行即可提前锁定大部分类型相关错误。

    • 完全支持 es6 规范,编译过后生成的javascript代码可以在任何浏览器上运行,解决了各个前端浏览器对于es6规范在不同程度上的兼容问题。

    • 有活跃的社区,大多数的第三方库都可提供给 ts 的类型定义文件

    5.TypeScript的缺点

    • 具有一定的学习成本,需要理解接口、泛型编程、枚举类型等一系列概念

    • 短期增加开发成本,在原生javascript基础上,多写一些类型的定义.

    • 集成到构建流程需要一些工作量

    • 和一些现有的javascript第三方库或框架的结合存在bug

    6.TypeScript的安装

    有两种主要的方式来获取TypeScript工具:

    • 通过npm(Node.js包管理器)

    • 安装Visual Studio的TypeScript插件

    在此,我们通过npm来安装/更新typescript

    # 安装
    npm install -g typescript
    # 更新到最新版本
    npm update -g typescript
    # 查看版本
    tsc -v

    5.TypeScript快速入门

    1.创建一个TypeScript文件

    main.ts,代码:

    function main(person) {
        return "Hello, " + person;
    }
    
    var user = "Jane User";
    
    document.body.textContent = main(user);

    2.编译代码

    上面代码中,虽然我们创建脚本文件是ts,但是里面的代码却是实实在在的js代码。不过因为基于typescript和javascript的关系,我们可以直接通过typescript编译器进行编译。

    main.ts --->编译--> main.js

    终端执行:

    tsc main.ts
    # tsc --out main.js main.ts  # --out 可以指定编译完成以后的js文件名

    命令执行以后的输出结果为一个main.js文件,它包含了和输入文件中相同的JavsScript代码。

    虽然,在上面过程中,我们并没有接触到typescript代码,但是我们掌握了typescript编译器的用法。有没有?

    最后,编译完成以后得到的js文件就可以直接通过script标签被html使用,变相地,等同于typescript被使用了。

    index.html,代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <!-- async是javascript在ES6新出的延时加载关键字 -->
        <script async src="main.js"></script>
    </head>
    <body>
        
    </body>
    </html>

    3.TS的高级功能:类型注解

    main.ts,代码中给main函数的参数person添加: string类型注解,如下:

    function main(person: string) {
        return "Hello, " + person;
    }
    
    let user = "Jane User";
    
    document.body.textContent = main(user);
    function main(person: string) {
        return "Hello, " + person;
    }
    
    let user = [0, 1, 2];
    
    document.body.textContent = main(user);

    重新编译,你会看到产生了一个错误,当然,类似pycharm这样的IDE工具,要已经有错误提示了

    error TS2345: Argument of type 'number[]' is not assignable to parameter of type 'string'.

    TypeScript告诉你,使用了非期望个数的参数调用了这个函数。在编译过程中,TypeScript提供了静态的代码分析,它可以分析代码结构和提供的类型注解。当然,尽管编译出现了错误,main.js文件还是被创建了。 就算你的代码里有错误,你仍然可以使用TypeScript。

    4.TypeScript的数据类型

    数据类型关键字描述
    任意类型 any 如果不声明类型,默认则声明为 any 的变量可以赋予任意类型的值。
    数值类型 number

    等同于JavaScript的number类型,在TypeScript中所有的数字都是浮点数,都是number类型。

    let num1: number = 0b1010; // 二进制

    let num2: number = 0o744; // 八进制

    let num3: number = 6; // 十进制

    let num4: number = 0xf00d; // 十六进制

    注意:TypeScript 和 JavaScript 都是没有整型的。

    字符串类型 string

    一个字符系列,使用单引号(')或双引号(")来表示字符串类型。反引号()来定义多行文本和内嵌表达式。

    let name: string = "xiaoming";

    let qq_number: string= '50000000';

    let text: string = `您好,我叫 ${ name } ,我的QQ号码是${qq_number} `;

    布尔类型 boolean 只有2个值:true 和 false。 let sex: boolean = true;
    数组类型

    声明变量为数组。

    let arr: number[] = [1, 2]; // 在元素类型后面加上[]

    let arr: Array<number> = [1, 2]; // 数组泛型

    元组

    元组类型用来表示已知元素数量和类型的数组,各元素的类型不必相同,对应位置的类型需要相同。元祖在原生js中本身是支持的。

    let x: [string, number];

    x = ['xiaoming', 16]; // 运行正常

    x = [16, 'xiaoming']; // 报错

    console.log(x[0]); // 输出 xiaoming

    枚举 enum

    枚举类型用于定义数值集合。

    enum Color {Red, Green, Blue};

    let c: Color = Color.Blue; console.log(c); // 输出 2

    void void

    用于标识方法返回值的类型,表示该方法没有返回值。

    function hello(): void

    {

    alert("Hello xiaoming");

    }

    null null 空。
    undefined undefined 未定义
    never never never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    了解了typescript支持的数据类型以后,其实我们可以更加清晰一点就是javascript里面有的,能使用的,typescript就一定有,并也能使用。所以接下来的学习中,针对javascript和typescript存在差异的地方我们进行讲解,而相同的则默认和javascript是一样的。

    例如,接下来关于语法中,变量的命名规范,运算符,流程控制语句等等,这些我们就不会提及了。