写一个麻将类

首先介绍一种麻将,麻将是从一万到九万、一饼到九饼、一条到九条、东风、南风、西风、北风、红中、白板、发财。以上牌面各四张组成。

要想生成它们并且显示出来还有一定的数学规律的。

0 1 2              
             
0 1 2 3 4 5 6 7 8 9
‘  ’
0 1 2 3 4 5 6 7    
‘  ’ 东风 南风 西风 北风 红中 白板 发财    
0-9 /10 0 %10 0-9 0
10-19 /10 1 %10 0-9 10
20-29 /10 2 %10 0-9 20
30-37 /10 3 %10 0-7 30

可以看到0、10、20、30这四个数对应的表是空的所以就要在随机生成数的时候用一些手段。

.h

#pragma once
#include <iostream>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define MJNUM 136
class majiang
{
	unsigned int m_allMJ[MJNUM];
public:
	majiang();
	void creatMJ();
	void showMJ(int chuan);
	unsigned int  seeMJ(int i);
};

.cpp

#include "majiang.h"

majiang::majiang()
{
	srand((size_t)time(NULL));
}
void majiang::creatMJ()
{
	int tmp[MJNUM] = { 0 };
	int i = 0;
	for (i=0;i<MJNUM;++i)
	{
		tmp[i] = i;/* 一个临时数组用来给真正的麻将数组赋值 */
	}
	int j = 0;
	for (j=0;j<MJNUM;++j)
	{
		i = rand() % MJNUM;
		while (1)
		{
			if (tmp[i]>=0)
			{
				m_allMJ[j] = tmp[i] / 4 + 1;/* 除去数字区0不能用的问题 */
				tmp[i] = -1;
				if (m_allMJ[j]>=10)/*  除去10 20 30 不能用的情况*/
				{
					m_allMJ[j]++;
				}
				if (m_allMJ[j]>=20)
				{
					m_allMJ[j]++;
				}
				if (m_allMJ[j]>=30)
				{
					m_allMJ[j]++;
				}
				break;
			}
			else
			{
				++i;
				if (i>=MJNUM)
				{
					i = 0;
				}
			}
		}
	}

}
void majiang::showMJ(int chuan)
{
	const char * type[] = { "万", "饼", "条" };
	const char * num[] = { "", "一", "二", "三", "四", "五", "六", "七", "八", "九" };
	const char * word[] = { "", "东风", "南风", "西风", "北风", "白板", "发财", "红中" };
#if 1


	int i = 0,j=0;
	for (i=0; i < chuan; ++i)
	{
		if (m_allMJ[i] / 10 < 3)
		{
			printf("%s%s \t", num[m_allMJ[i] % 10], type[m_allMJ[i] / 10]);
		}
		else
		{
			printf("%s \t", word[m_allMJ[i] % 10]);
		}
		++j;
		/*if (j % (chuan / 4) == 0)
		{
			printf("\n\n");
		}*/
	}
	printf("\n");
#else
	int j = 0;
	for (auto & i : m_allMJ)
	{
		/*if (i < 0)
		{
			printf("     ");
		}*/

		if (i / 10 < 3)
		{
			printf("%s%s ", num[i % 10], type[i / 10]);
		}
		else
		{
			printf("%s ", word[i % 10]);
		}
		j++;
		if (j % (MJNUM / 4) == 0)
		{
			putchar('\n');
		}
	}
#endif
}
unsigned int  majiang::seeMJ(int i)
{
	return m_allMJ[i];
}
发布了157 篇原创文章 · 获赞 98 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43447989/article/details/100642418
今日推荐