简单麻将功能实现

麻将程序源码 一个简单的麻将程序源码,可以局域网对战,喜欢的朋友可以下载研究下 立即下载

麻将游戏实现:
实现功能点: 实现麻将的准备牌,洗牌,发牌,看牌 (集合知识) 麻将功能需求分析 a:具体规则:
1.组装136张麻将,条,筒,万加在一起的数目是108张 东,南,西,北风,红中,发财,白板是28张,总共136张
2.将136张牌顺序打乱
3.四个玩家参与游戏,四个人交替摸牌,每次4张,先摸3次,之后庄家摸2张(2张之间索引差4),其他人再摸一张,庄家14张,其余人13张牌,剩下的留作底牌。
4.查看四人手中的牌(按照牌的大小排序),底牌

代码的实现:

 public class Mahjong {
    public static void main(String[] args) {
        //定义三个数组,用来组合麻将牌
        int[] num = new int[]{1,2,3,4,5,6,7,8,9};
        String[] name = new String[]{"条","筒","万"};
        String[] tablet = new String[]{"东","南","西","北","中","白板","发财"};
        //记录牌的编号
        int k = 0;
        //用来存放牌
        HashMap<Integer,String> hashMap = new HashMap<>();
        //用来记录麻将存放个数,和次序
        List<Integer> number = new ArrayList<>();
        //定义四个存放玩家牌的数组
        List<Integer> player1 = new ArrayList<>();
        List<Integer> player2 = new ArrayList<>();
        List<Integer> player3 = new ArrayList<>();
        List<Integer> player4 = new ArrayList<>();
        //用来存放底牌
        List<Integer> base = new ArrayList<>();
        //准备牌,for循环添加条,筒,万
        for(int i =0;i<num.length;i++) {
            for(int j=0;j < name.length ;j++) {
                String s = num[i] + name[j];
                for(int l=0;l<4;l++) {
                    hashMap.put(k++, s);
                    //将牌的编号加入number中
                    number.add(k);
                }
            }
        }
        //for循环添加东南西北中白板发财
        for(int i=0;i<tablet.length;i++) {
            for(int j=1;j <= 4;j++) {
                hashMap.put(k++,tablet[i]);
                number.add(k);
            }
        }
        System.out.println(hashMap.size());

        System.out.println("看牌: ");
        //用迭代器来遍历
        Iterator<Map.Entry<Integer, String>> iterator = hashMap.entrySet().iterator();
        while(iterator.hasNext()) {
            System.out.print("(" + iterator.next() + ")" + " ");
        }
        System.out.println();
        System.out.println("将牌打乱顺序: ");
        //集合提供方法,将一个整形数组打乱
        Collections.shuffle(number);
        for(int i =0;i< number.size(); i++) {
            System.out.print("(" + i + ":" + hashMap.get(number.get(i)) + ")" + " ");
        }
        System.out.println();
        //发牌
        //定义属性n,记录摸牌的位置
        Integer n = 0;

        //总共发三次,每一次每人摸四张牌,
        for(int i=0;i<3;i++) {
            for(int j=0;j<4;j++) {
                player1.add(number.get(n++));
                player2.add(number.get(n++));
                player3.add(number.get(n++));
                player4.add(number.get(n++));
            }
        }
        //庄家摸两次牌,其他人摸一张(玩家1是庄家)
        player1.add(number.get(n));
        //需要跳牌(庄家第一次和第二次摸的位置索引值差4)
        n = n + 4;
        player1.add(number.get(n));
        //回到庄家第一次摸牌的位置的下一个
        n = n - 3;
        player2.add(number.get(n));
        player3.add(number.get(n));
        player4.add(number.get(n));
        //剩下的底牌
        for(int i=n;i<number.size();i++) {
            base.add(number.get(i));
        }
        System.out.println();

        //对玩家手里的牌进行排序,集合提供排序方法
        Collections.sort(player1);
        Collections.sort(player2);
        Collections.sort(player3);
        Collections.sort(player4);

        //看牌 ,  4个for循环遍历
        System.out.println("看牌 :");
        System.out.print("player1 : ");
        for(int i=0;i<player1.size();i++) {
            System.out.print(hashMap.get(player1.get(i)) + " ");
        }
        System.out.println();
        System.out.print("player2 : ");
        for(int i=0;i<player2.size();i++) {
            System.out.print(hashMap.get(player2.get(i)) + " ");
        }
        System.out.println();
        System.out.print("player3 : ");
        for(int i=0;i<player3.size();i++) {
            System.out.print(hashMap.get(player3.get(i)) + " ");
        }
        System.out.println();
        System.out.print("player4 : ");
        for(int i=0;i<player4.size();i++) {
            System.out.print(hashMap.get(player4.get(i)) + " ");
        }
        System.out.println();
        System.out.print("底牌 : ");
        for(int i=0;i<base.size();i++) {
            System.out.print(hashMap.get(base.get(i)) + " ");
        }
        System.out.println();
}

看牌的代码块可以封装起来,会显得简洁明了;

 //封装后的函数
        looking("1号",player1,hashMap);
        looking("2号",player2,hashMap);
        looking("3号",player3,hashMap);
        looking("4号",player4,hashMap);
        looking("底牌",base,hashMap);
    }
     /**
     * 输入想看的玩家的名字,传入该玩家的List数组,传入存放麻将牌的集合
     * @param name
     * @param player
     * @param hashMap
     */
    private static void looking(String name,List<Integer> player, HashMap<Integer,String> hashMap) {
        System.out.print(name + ": ");
        for(int i=0;i<player.size();i++) {
            System.out.print(hashMap.get(player.get(i)) + " ");
        }
        System.out.println();
    }
Majiang:可在HTML5 + JavaScript上运行的麻将应用程序“ Cyber​​麻将” 可在HTML5 + JavaScript上运行的麻将应用程序“ Cyber​​麻将” 演示 执照 作者 npm脚本 命令 描述 release 为发布而构建。 build 为调试而构建。 build:js 仅构建用于调试JavaScript。 build:css 仅构建CSS。 build:html 仅构建HTML。 test 执行单元测试。 test:cover 使用覆盖率报告执行单元测试。 文档 程序结构 数据结构,例如Tehai 网络麻将的分数格式 通道数计算 查找听众数量的程序(Chitoitsu,Kokushi Musou) 查找听众人数的程序(普通手版(重新)) 查找听众人数的程序(普通手版(重新)) 程序以查找侦听器的数量(修改后的版本) 完成点计算 程序计算麻将的胜利分数 麻将取胜点的计算-列出情况角色和抽奖角色 查找中奖表格(特殊表格)的程序 查找中奖 立即下载

相关推荐

Java实现麻将算法

自己根据其他资源,加上自己的优化,实现136张麻将牌的算法

麻将服务器功能JAVA实现-胡牌的算法

胡牌的算法 麻将是一款在中国很火的游戏,越来越多的棋牌公司都视他为必上的游戏,那么下面我就给大家讲解一下麻将的基本实现。 麻将胡牌的算法: 创建麻将的实体类: 麻将胡牌基本算法是:123 或者111 在加上一对将牌 就形成了它的胡牌。 假设现在有一副牌: 1万 , 2万 , 3万 , 4万 ,4万,4万 , 6筒 ,7筒 , 8筒 , 2条 , 2条...

rzkgogo的博客 2561

flex麻将和牌源代码

NULL 博文链接:https://fykyx521.iteye.com/blog/409109

java麻将算法_Java实现的麻将胡牌算法

胡牌:平胡:1对将及4副(顺子/刻子)对对胡:4副刻子+1对将组成的胡牌七小对:全部牌都是1对门清:全部牌都是自己摸的,没有碰和暗杠全求人:全部碰或明杠,手上只剩一张牌,并且是点炮胡,不能自摸清一色:全部都是一色的平胡(包含万、条、筒、字)七大对:有4张一样的牌且没杠,其余牌都是对子豪华大七对:有至少两个4张一样的牌,其余牌都是对子定义麻将牌:public class MajiangCard ex...

weixin_36269724的博客 2111

麻将游戏Java源码

麻将游戏Java源码,含麻将,麻将学院,麻将中国龙三个游戏源码

k3s快速搭建k8s集群环境

k8s 搭建方式有多种,如果你是内网环境,希望占用服务器资源少或是边缘系统(如ARM系统),强烈推荐您使用 k3s进行安装 目录k3s 简介k3s架构中文官方文档三台服务器快速搭建k8s集群安装说明步骤1 修改主机名,保持唯一步骤2 安装docker步骤3 安装master节点步骤4 安装worker节点加入集群步骤5 查看集群步骤6 部署 k8s仪表盘 dashboard k3s 简介 轻量级 Kubernetes。安装简单,内存只有一半,所有的二进制都不到 100MB K3s 是一个完全符合 Ku.

gzt19881123的专栏 2445

java麻将算法_原创干货!麻将平胡算法

/** * 手牌 * *@authorzkpursuit */public classHandCards{/** * 获取牌号最左边的一位数,如果牌为筒、条、万,则返回值为牌类型数值 * *@paramcard 牌号 *@return牌号从左至右第一位数(十位数) */ publicfinalstaticintgetCardLeftValue(intc...

weixin_42358733的博客 549

inferCNVpy分析流程学习

inferCNV的用途大家都已经很清楚了,接下来就走一下流程,试一试Python版的inferCNV。使用的数据集为:GSE188711,既往推文可见:Scanpy分析全流程(含harmonypy整合/细胞周期矫正/双细胞检测及去除)(

zfyyzhys的博客 1296

Python实现武汉麻将(带癞子)

Python简单实现单癞子的麻将计算,复制粘贴可直接运行

ckckjsws的博客 1247

计算pi小数点后10000位

数据结构课上,老师让我们计算一下pi的10000位,复习一下面向对象。 First Try:定义一个高精度类hp(high precision),实现加减乘除,输入输出,然后随便找一个公式,比如Wallis公式,全都用hp进行计算。 现实是:大数乘大数或者大数除大数,实在是太慢了。而且Wallis公式收敛太慢。 Second Try先找到一个收敛较快的公司:BBP公式,观察公式发现,...

我的技术人生 7395

在 Linux 虚拟机中手动安装 VMware Tools

对于 Linux 虚拟机,您可以从命令行手动安装 VMware Tools。对于 Linux 的较高发行版,请使用集成的 open-vm-tools 版本。 前提条件 有关 open-vm-tools 的操作系统兼容性的详细信息,请参见《VMware 兼容性指南》,网址为VMware Compatibility Guide - System Search。 开启虚拟机。 确认客户机操作系统正在运行。 因为 VMware Tools 安装程序是使用 Perl 编写的,请确认已在客户机操作系统中安..

m0_62526815的博客 1757

麻将胡牌算法的Java实现

最近一个棋牌游戏项目中涉及对麻将胡牌的判定,网上搜了搜虽然看到一些算法,但是感觉都不尽如人意,一般麻将的胡牌为1对和4组三张牌的连牌,所以在网上搜到的算法往往都死死的为了这个目的来实现,而且多数没有考虑到对百塔牌的支持,下面贴上代码: /*  * To change this license header, choose License Headers in Project Properties...

嘿嘿 2951

ADB加密实例

主要介绍如何给adb命令增加加密访问

四儿家的小祖宗的博客 2912

实现简单的麻将游戏

实现简单的麻将游戏 描述:实现功能点 实现麻将的准备牌、洗牌、发牌、看牌 知识点 集合知识 项目思路 思路介绍 Icon 麻将的功能需求分析 具体规则: 组装136张麻将 条、筒、万加到一起的数目是108张 东、西、南、北风、红中、白皮、发财是28张,总共136张 将136张牌顺序打乱 4.将136张牌顺序打乱 四个玩家参与游戏,四人交替摸牌,每次4张,3次,之后庄家摸2张,两张之间个索引相...

weixin_42262357的博客 3370

PMP--工件

合同是指对双方都有约束力的协议,强制卖方提供规定的产品、服务或结果,以及强制买方支付相应的费用。它还可能包括处于中间状态的特性,例如已设计但尚未构建的特性、质量保证中的特性或测试中的特性。RACI 矩阵是一种常见的方法,用于显示执行、担责、咨询或知情,且与项目活动、决策和可交付物有关的干系人。计划是提议的实现某种目标的方式。在项目开始前或开始时创建的文件,涉及与项目有关的战略、商业或高层级的信息。或 © 它们是用特定方法创建的结果,例如,虽然成本估算结果是一个重要工件,它们是用不同估算方法得出的结果。

stqer的博客 1666

基于Matlab生成并可视化多架飞机轨迹仿真(附源码)

这使我们可以轻松地对直线和恒定转弯进行建模,并具有额外的自由度,可以在直线段和曲线段之间平滑过渡。同样,空气中的物体会经历重力的影响,遵循抛物线(二次)路径。需要更多的航点来适应这些变化,但是轨迹的其余部分需要更少的点。第三个轨迹,如下所示,代表了一架速度更高的飞机。它由两个恒定的转弯组成,飞机在第二个转弯的中间减速。一旦知道(并设置了)物体穿过空间的物理路径,物体的速度作为行进距离的函数就通过三次埃尔米特插值来确定。在此示例中,学习了内部使用的插值符背后的概念,并展示了如何使用少量航点重现场景。

珞瑜的博客 5465

java 麻将_JAVA程序设计(11)-----面对对象0基础设计 麻将 创建麻将牌 然后洗牌 发牌~ 恩 就这样...

zzzzZZZZ1.開始还想贴图的 实在太懒了…… 这是一张麻将package com.lovo;import java.awt.Graphics;import java.awt.Image;/*** 类 : 麻将牌* @author Abe 属性:花色 点数 图片*/public class Mahjong {private Suits suits;private int face;privat...

weixin_36205101的博客 701

VxWorks系列 快速导航

Vxworks系列快速阅览导航

Mr.Sugarcane 1311

C语言实现简单的ai麻将对局(较大工程,持续更新ing)

一个(还远远不是)立直麻将的c语言麻将环境程序,后面打算深度学习生成麻将ai

qq_45861290的博客 4814

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Dos下C++麻将游戏

#include "class_head.h" void set_pai(); //初始化赋值函数 void print_screen(); //初始化屏幕语句函数 char std_input_handle(); void rand_pai(); //随机分配函数 void jiemian(); //菜单 extern player,p_win,pp; void mai...

weixin_33767813的博客 295

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

实现麻将回放功能

1.服务器记录玩家对战信息,把数据返回给客户端 2.通过返回的数据加载: 数据文件:res/20160921173000.json //加载JSON文件 cc.loader.loadJson("res/20160921173000.json", function (error, data) { //cc.log(data); //data is the json object

Cleve_baby的博客 5685

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【原创】日式麻将与中国麻将哪个比较难?——雀魂麻将MahjongSoul

进入听牌状态后,自己打过的牌中含有自己听的牌,那这之后只能自摸。

具身机器人和通用AI 2089

超简单的麻将算法

麻将的算法---提高篇   1.先说说,数值的构成。   类型字 0:东南西北中发白 --》1,2,3,4,5,6,7 类型万 1:1万2万3万4万5万6万7万8万9万--》11,12,13,14,15,16,17,18,19 类型条 2:1条2条3条4条5条6条7条8条9条--》21,22,23,24,25,26,27,28,29 类型饼 3:1饼2饼3饼4饼5饼6饼7饼8饼9饼-

ogre2014的专栏 1万+

【实战】AI 怎么打麻将?

说起打麻将我一直是处于比较业余并且不思进取的水平,各个地方的麻将规则不一,繁琐的规则也懒得放脑袋里记忆了,于是每次跟朋友打麻将都是现场临时约定规则,怎么简单怎么来,周边也有不少年轻的小伙伴我一样。 年前回家前跟朋友聚会又打了几圈麻将,几个人又经历了一遍边上网查算番规则边打牌,生怕少算番多亏了五毛钱的过程,于是萌生做个麻将算番APP的想法,解决我们几个懒人的打牌需求。 当时趁着那几天想法热乎,花了一周多撸了一个iOS App 取名叫【小番】就给弄上架了(第一次写swift,发现居然有双感叹号!!这样的运算符,

cv君的博客 3万+
上一篇: HashMap介绍
下一篇: LinkedHashMap介绍(特点,优势,和其他比较)
Java-fly
博客等级 码龄9年 13粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值