zoukankan      html  css  js  c++  java
  • 随机发牌 代码

    // random.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <random>
    #include <time.h>  
    #include <list>
    #include <assert.h>
    #include <iostream>
    #include <vector>
    #include <functional>
    
    const int MAJIANG_GROUP_LENGTH = 84;
    const int POST_BLOCK_COUNT = 4;
    const int PLAYER_COUNT = 3;
    /*
    0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,//一到九筒
    0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,//一到九条
    0x30,//中
    0x40,//发
    0x50,//白
    */
    const std::vector<unsigned char> originMajiangGroup = {
    	0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
    	0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
    	0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
    	0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,//筒
    	0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,
    	0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,
    	0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,
    	0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,//条
    	0x30,0x30,0x30,0x30,//中
    	0x40,0x40,0x40,0x40,//发
    	0x50,0x50,0x50,0x50,//白
    };
    
    std::list<unsigned char> playerMajiangList[PLAYER_COUNT];
    
    
    void PostMajiangBlockToPlayerOnce(std::vector<unsigned char>& group,int posCount) {
    	for (int index = 0; index < PLAYER_COUNT; ++index) {
    		//一次向游戏玩家发送 PLAYER_COUNT 张牌
    		for (int i = 0; i < posCount; ++i) {
    			playerMajiangList[index].push_back(group.back());
    			group.pop_back();
    		}
    	}
    	
    }
    
    void PostMajiangBlock(std::vector<unsigned char>& group) {
    	
    	PostMajiangBlockToPlayerOnce(group, POST_BLOCK_COUNT);
    	PostMajiangBlockToPlayerOnce(group, POST_BLOCK_COUNT);
    	PostMajiangBlockToPlayerOnce(group, POST_BLOCK_COUNT);
    
    	PostMajiangBlockToPlayerOnce(group, 1);
    	
    }
    
    
    
    
    
    void InitFixMajiang(std::vector<unsigned char>& group)
    {
    	std::default_random_engine generator(time(NULL));
    	std::uniform_int_distribution<int> dis(0, group .size()-1);
    	auto dice = std::bind(dis, generator);
    	int index1,index2;
    	unsigned char tmp;
    	for (int i = 0; i<100; i++)
    	{
    		index1 = dice();
    		index2 = dice();
    		tmp = group[index1];
    		group[index1] = group[index2];
    		group[index2] = tmp;
    	}
    }
    
    
    
    int main()
    {
    	std::vector<unsigned char> currentMajiangGroup = originMajiangGroup;
    	for (size_t i = 0; i < currentMajiangGroup.size(); ++i) {
    		std::cout << std::hex <<  (unsigned int)currentMajiangGroup[i] << ' ';
    	}
    
    	//洗牌
    	InitFixMajiang(currentMajiangGroup);
    
    	std::cout << std::endl;
    	
    	for (size_t i = 0; i < currentMajiangGroup.size(); ++i) {
    		std::cout << std::hex << (unsigned int)currentMajiangGroup[i] << ' ';
    	}
    	PostMajiangBlock(currentMajiangGroup);
    
    	std::cout << std::endl;
    
    	for (int i = 0; i < PLAYER_COUNT; ++i) {
    		playerMajiangList[i].sort();
    		std::cout << "player" << i << " : ";
    		for (auto ele : playerMajiangList[i]) {
    			std::cout << std::hex << (unsigned int)ele << " ";
    		}
    		std::cout << std::endl;
    	}
    
    
        return 0;
    }
    

      

    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
    DHCP "No subnet declaration for xxx (no IPv4 addresses)" 报错
    Centos安装前端开发常用软件
    kubernetes学习笔记之十:RBAC(二)
    k8s学习笔记之StorageClass+NFS
    k8s学习笔记之ConfigMap和Secret
    k8s笔记之chartmuseum搭建
    K8S集群集成harbor(1.9.3)服务并配置HTTPS
    Docker镜像仓库Harbor1.7.0搭建及配置
    Nginx自建SSL证书部署HTTPS网站
  • 原文地址:https://www.cnblogs.com/itdef/p/7364827.html
Copyright © 2011-2022 走看看