• day132:2RenMJ:MJ需求文档&MJ游戏流程&Egret白鹭引擎安装&TypeScript简要介绍


    目录

    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是一样的。

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

  • 相关阅读:
    VS2015使用scanf报错解决方案
    C++的标准模板库(STL)简介
    C++中常用特殊符号简介(& , * , : , :: , ->)
    C++中#include <xxx.h>和#include "xxx.h"的区别(尖括号和双引号的区别)
    C++中#include的工作原理
    opencv中Mat与IplImage,CVMat类型之间转换
    C++数据类型简析
    让你在DOS中任意切换目录
    七种Prolog解释器/编译器
    C++中引用(&)的用法和应用实例
  • 原文地址:https://www.cnblogs.com/libolun/p/14340928.html
Copyright © 2020-2023  润新知