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