⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 majianghufa.cpp

📁 一个完整的麻将游戏原代码,可以学到很多东西
💻 CPP
字号:
// MajiangHufa.cpp: implementation of the CMajiangHufa class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "MajiangHufa.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMajiangHufa::CMajiangHufa()
{
	
	

}

CMajiangHufa::~CMajiangHufa()
{

}

void CMajiangHufa::ThingHupai()
{

	int d1,i;
	if(m_MajiaList.GetSize()<=4)
	{
		Thing4Only();
		return;
	}
	for(i=0;i<m_MajiaList.GetSize();i++)
	{
		d1=m_MajiaList.GetAt(i);
		m_MajiaList.RemoveAt(i);
		if(IsSameTeam(d1))
		{
			DeleteSameTeam(d1);
			ThingHupai();
			m_MajiaList.Add(d1);
			m_MajiaList.Add(d1);
			
		}

		if(IsStepTeam(d1,1))
		{
			DeleteStepTeam(d1,1);
			ThingHupai();
			m_MajiaList.Add(d1-1);
			m_MajiaList.Add(d1+1);
					
		}
		if(IsStepTeam(d1,2))
		{
			DeleteStepTeam(d1,2);
			ThingHupai();
			m_MajiaList.Add(d1+1);
			m_MajiaList.Add(d1+2);
	
		}
		if(IsStepTeam(d1,3))
		{
			DeleteStepTeam(d1,3);
			ThingHupai();
			m_MajiaList.Add(d1-1);
			m_MajiaList.Add(d1-2);
	
		}
		m_MajiaList.Add(d1);
	}
	
}

BOOL CMajiangHufa::IsSameTeam(UINT pai)
{

	int i,j,k;
	for(i=0;i<m_MajiaList.GetSize();i++)
	{
		if(pai==m_MajiaList.GetAt(i))
		{
			for(j=i+1;j<m_MajiaList.GetSize();j++)
			{
				k=m_MajiaList.GetAt(j);
				if(pai==k )
					return TRUE;
			}
		}
	}
	return FALSE;


}

BOOL CMajiangHufa::IsStepTeam(UINT pai,int type)
{

	int d1,d2;
	if(type==1)
	{
		d1=pai-1;
		d2=pai+1;
	}
	else if(type==2)
	{
		d1=pai+1;
		d2=pai+2;
	}
	else
	{
		d1=pai-1;
		d2=pai-2;
	}


	if( d1/9!=d2/9 || d1/9!=pai/9 || d1>=27 || d2>=27  )return FALSE;
//	if( m_MajiangPai[d1].type != m_MajiangPai[d2].type)
//		return FALSE;
	BOOL b1=FALSE,b2=FALSE;
	int i,n,k;
	n=m_MajiaList.GetSize();
	for(i=0;i<n;i++)
	{
		k=m_MajiaList.GetAt(i);
		if(d1==k )
		{
			b1=TRUE;
			break;
		}
	}
	for(i=0;i<n;i++)
	{
		k=m_MajiaList.GetAt(i);
		if(d2==k )
		{
			b2=TRUE;
			break;
		}
	}
    return (b1 && b2);


}



void CMajiangHufa::AddHupai(UINT pai)
{
 /*
	CString str;
   str.Format("------- %d ---------------",pai);
	   
   	m_fp.WriteString(str);

	m_fp.WriteString("\r\n");
*/
	if(pai<0 || pai>33)return;
	int k;
	int i;
	for(i=0;i<m_HupaiList.GetSize();i++)
	{
		k=m_HupaiList.GetAt(i);
		if(pai==k )
			return;
		if(pai < k)break;
	}
   m_HupaiList.InsertAt(i,pai);

 

}

void CMajiangHufa::DeleteSameTeam(UINT pai)
{

	int i,k;
	  for(i=0;i<m_MajiaList.GetSize();i++)
	  {
		  k=m_MajiaList.GetAt(i);
		if(pai==k )
		{
			m_MajiaList.RemoveAt(i);
			break;
		}
	  }
	  for(i=0;i<m_MajiaList.GetSize();i++)
	  {
		  k=m_MajiaList.GetAt(i);
		if(pai==k )
		{
			m_MajiaList.RemoveAt(i);
			break;
		}
	  }
}

void CMajiangHufa::DeleteStepTeam(UINT pai, int type)
{
	int d1,d2,k;
	if(type==1)
	{
		
		d1=pai-1;
		d2=pai+1;
	}
	else if(type==2)
	{
		d1=pai+1;
		d2=pai+2;
	}
	else
	{
		d1=pai-1;
		d2=pai-2;
	}
	int i;
	  for(i=0;i<m_MajiaList.GetSize();i++)
	  {
		  k=m_MajiaList.GetAt(i);
		if(d1==k )
		{
			m_MajiaList.RemoveAt(i);
			break;
		}
	  }
	  for(i=0;i<m_MajiaList.GetSize();i++)
	  {
		  k=m_MajiaList.GetAt(i);
		if(d2==k )
		{
			m_MajiaList.RemoveAt(i);
			break;
		}
	  }
}

void CMajiangHufa::Thing4Only()
{
/*
	CString str;
	str.Format("%d-%d-%d-%d",
		m_MajiaList.GetAt(0),
		m_MajiaList.GetAt(1),
		m_MajiaList.GetAt(2),
		m_MajiaList.GetAt(3));
	m_fp.WriteString(str);

	m_fp.WriteString("\r\n");

*/

	int d1,d2,d3,i,j,k;
	for(i=0;i<4;i++)
	{
		d1=m_MajiaList.GetAt(i);
		m_MajiaList.RemoveAt(i);
	
		
		if(IsSameTeam(d1))
		{
			DeleteSameTeam(d1);
			AddHupai(m_MajiaList.GetAt(0));
			m_MajiaList.Add(d1);
			m_MajiaList.Add(d1);
		
		}

		if(IsStepTeam(d1,1))
		{
			DeleteStepTeam(d1,1);
			AddHupai(m_MajiaList.GetAt(0));
			m_MajiaList.Add(d1-1);
			m_MajiaList.Add(d1+1);
				
		}
		if(IsStepTeam(d1,2))
		{
			DeleteStepTeam(d1,2);
			AddHupai(m_MajiaList.GetAt(0));
			m_MajiaList.Add(d1+1);
			m_MajiaList.Add(d1+2);
	
		}
		m_MajiaList.Add(d1);
	}
	
	for(i=0;i<4;i++)
	{
		d1=m_MajiaList.GetAt(i);
		m_MajiaList.RemoveAt(i);
		for(j=0;j<3;j++)
		{
			k=m_MajiaList.GetAt(j);
			if(d1 == k  )
			{
				m_MajiaList.RemoveAt(j);
				d2=m_MajiaList.GetAt(0);
				d3=m_MajiaList.GetAt(1);
			//	if( m_MajiangPai[d2].type == m_MajiangPai[d3].type)
				{
					
					if(d2 == d3  )
					{
						AddHupai(d1);
						AddHupai(d2);
					}
					if( d2/9==d3/9 && d2<27 && d3<27 )
					{
					switch(d2 -d3)
					{
					case 1:
						if((d2-8)%9)
							AddHupai(d2+1);
						if((d2-1)%9)
							AddHupai(d2-2);
						break;
					case -1:
						if(d2%9)
							AddHupai(d2-1);
						if((d2+1-8)%9)
							AddHupai(d2+2);
						break;
					case 2:
						if( d2%9)
							AddHupai(d2-1);
						break;
					case -2:
						if( (d2-8)%9)
							AddHupai(d2+1);
						break;
					default:
						break;
					}
					}
				}
				m_MajiaList.Add(d1);
			}
		}
		m_MajiaList.Add(d1);	
	}
}

void CMajiangHufa::SetMjPaiArray(int *nPailist, int nNum)
{

//	m_fp.Open("g:\\a.txt",CFile::modeCreate|CFile::modeWrite);
	for(int i=0;i<nNum;i++)
		m_MajiaList.Add(nPailist[i]);

}

void CMajiangHufa::SetMjPaiArray(CUIntArray *nPai)
{

	for(int i=0;i<nPai->GetSize();i++)
		m_MajiaList.Add(nPai->GetAt(i));
}

void CMajiangHufa::GetHupai(CUIntArray *arr)
{
//	return;

    
	if((m_MajiaList.GetSize()-1)%3)return;
	if(m_MajiaList.GetSize()==1)
	{
		arr->Add(m_MajiaList.GetAt(0));
		return;
	}
	ThingHupai();
    for(int i=0;i<m_HupaiList.GetSize();i++)
		arr->Add(m_HupaiList.GetAt(i));
	//arr= &m_HupaiList;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -