// 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;
}