随机发牌 代码

// 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驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
阿里打赏 微信打赏
原文地址:https://www.cnblogs.com/itdef/p/7364827.html