📄 cmajianggamedlg.cpp
字号:
m_nMjUser[m_nStartPosUser+1]=pai;
m_nMjUser[m_nStartPosUser]=pai;
m_nMjUser[m_nStartPosUser+3]=m_nChupaiUser;
m_nGangUser[m_nStartPosUser/3]=1;
m_nStartPosUser+=3;
m_nChupaiUser=GetRndMj();
SortMj(m_nMjUser,m_nStartPosUser);;
// SortMj(m_nMjUser,0);
DrawPai();
UpdateFrame();
return ;
}
}
void CCMajiangGameDlg::CheckEat(int nPai)
{
int pos1,pos2;
int pai1,pai2;
int i;
if( nPai%9==0 )
{
pos1=FindPaiPos(nPai+1,m_nStartPosUser);
pai1=m_nMjUser[pos1];
for( i=pos1;i>m_nStartPosUser;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser]=pai1;
pos2=FindPaiPos(nPai+2,pos1+1);
pai2=m_nMjUser[pos2];
for( i=pos2;i>m_nStartPosUser+1;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser+1]=pai2;
m_nChupaiUser=m_nMjUser[15];
for( i=15;i>m_nStartPosUser+1;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser+2]=pai2;
m_nMjUser[m_nStartPosUser+1]=pai1;
m_nMjUser[m_nStartPosUser]=nPai;
m_nStartPosUser+=3;
DrawPai();
UpdateFrame();
}
else if( (nPai+1)%9==0 )
{
pos1=FindPaiPos(nPai-2,m_nStartPosUser);
pai1=m_nMjUser[pos1];
for( i=pos1;i>m_nStartPosUser;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser]=pai1;
pos2=FindPaiPos(nPai-1,pos1+1);
pai2=m_nMjUser[pos2];
for( i=pos2;i>m_nStartPosUser+1;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser+1]=pai2;
m_nChupaiUser=m_nMjUser[15];
for( i=15;i>m_nStartPosUser+1;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser+2]=nPai;
m_nMjUser[m_nStartPosUser+1]=pai2;
m_nMjUser[m_nStartPosUser]=pai1;
m_nStartPosUser+=3;
DrawPai();
UpdateFrame();
}
else
{
int m1=0,m2=0,m3=0;
int pos3,pos4,pos5,pos6;
pos1=FindPaiPos(nPai-1,m_nStartPosUser);
pos2=FindPaiPos(nPai+1,pos1+1);
if( pos1!=-1 && pos2!=-1 )m1=1;
if( nPai%9<=6 )
{
pos3=FindPaiPos(nPai+1,m_nStartPosUser);
pos4=FindPaiPos(nPai+2,pos3+1);
if( pos3!=-1 && pos4!=-1 )m2=1;
}
if( nPai%9>=2 )
{
pos5=FindPaiPos(nPai-2,m_nStartPosUser);
pos6=FindPaiPos(nPai-1,pos5+1);
if( pos5!=-1 && pos6!=-1 )m3=1;
}
m_nEatTeam=m1+m2+m3;
if( m_nEatTeam==1 )
{
if( m1 )
{
pai1=m_nMjUser[pos1];
for( i=pos1;i>m_nStartPosUser;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser]=pai1;
pai2=m_nMjUser[pos2];
for( i=pos2;i>m_nStartPosUser+1;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser+1]=pai2;
m_nChupaiUser=m_nMjUser[15];
for( i=15;i>m_nStartPosUser+1;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser+2]=pai2;
m_nMjUser[m_nStartPosUser+1]=nPai;
m_nMjUser[m_nStartPosUser]=pai1;
}
else if( m2)
{
pai1=m_nMjUser[pos3];
for( i=pos3;i>m_nStartPosUser;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser]=pai1;
pai2=m_nMjUser[pos4];
for( i=pos4;i>m_nStartPosUser+1;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser+1]=pai2;
m_nChupaiUser=m_nMjUser[15];
for( i=15;i>m_nStartPosUser+1;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser+2]=pai2;
m_nMjUser[m_nStartPosUser+1]=pai1;
m_nMjUser[m_nStartPosUser]=nPai;
}
else
{
pai1=m_nMjUser[pos5];
for( i=pos5;i>m_nStartPosUser;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser]=pai1;
pai2=m_nMjUser[pos6];
for( i=pos6;i>m_nStartPosUser+1;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser+1]=pai2;
m_nChupaiUser=m_nMjUser[15];
for( i=15;i>m_nStartPosUser+1;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser+2]=nPai;
m_nMjUser[m_nStartPosUser+1]=pai1;
m_nMjUser[m_nStartPosUser]=pai2;
}
m_nStartPosUser+=3;
DrawPai();
UpdateFrame();
}////只可以有一种吃法的
else///有两种或者三种吃法的,定时提示....
{
int k=0;
if( m1 )
{
m_nEatPos[k++]=pos1;
m_nEatPos[k++]=pos2;
}
if( m2 )
{
m_nEatPos[k++]=pos3;
m_nEatPos[k++]=pos4;
}
if( m3 )
{
m_nEatPos[k++]=pos5;
m_nEatPos[k++]=pos6;
}
m_nEatSelect=0;//m_nEatTeam;
// ReDrawBG(m_nEatPos[0],TRUE);
// ReDrawBG(m_nEatPos[1],TRUE);
SetTimer(TIME_SELECT,1000,NULL);
OnTimer(TIME_SELECT);
// CClientDC dc(this);
// dc.BitBlt(107+m_nEatPos[m_nEatSelect*2]*39,575,32,18,&m_dcBG,372,78,SRCCOPY);
// dc.BitBlt(107+m_nEatPos[m_nEatSelect*2+1]*39,575,32,18,&m_dcBG,420,78,SRCCOPY);
}
}
}
void CCMajiangGameDlg::CheckPeng(int nPai)
{
int pos1,pos2;
int pai1,pai2;
int i;
pos1=FindPaiPos(nPai,m_nStartPosUser);
pai1=m_nMjUser[pos1];
for( i=pos1;i>m_nStartPosUser;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser]=pai1;
pos2=FindPaiPos(nPai,pos1+1);
pai2=m_nMjUser[pos2];
for( i=pos2;i>m_nStartPosUser+1;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser+1]=pai2;
m_nChupaiUser=m_nMjUser[15];
for( i=15;i>m_nStartPosUser+1;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser+2]=pai2;
m_nMjUser[m_nStartPosUser+1]=pai1;
m_nMjUser[m_nStartPosUser]=nPai;
m_nStartPosUser+=3;
DrawPai();
UpdateFrame();
}
void CCMajiangGameDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if( nIDEvent==TIME_SELECT )//吃牌提示效果
{
UpdateFrame();
CClientDC dc(this);
dc.BitBlt(102+m_nEatPos[m_nEatSelect*2]*39,572,32,18,&m_dcBG,372,78,SRCCOPY);
dc.BitBlt(102+m_nEatPos[m_nEatSelect*2+1]*39,572,32,18,&m_dcBG,420,78,SRCCOPY);
m_nEatSelect++;
if( m_nEatSelect>=m_nEatTeam )m_nEatSelect=0;
}
else if( nIDEvent==TIME_DELAY ) //空闲统计
{
m_nDelay++;
if( m_nDelay>= 8 )
{
CString strFile;
m_nDelay=0;
strFile.Format("Sound\\g_Hurry%02d.wav",rand()%11);
::sndPlaySound(strFile,SND_ASYNC|SND_NODEFAULT);
DrawEyes(E_BUNAI);
DrawFace(F_OPEN1);
Sleep(500);
UpdateFrame();
}
}
else if( nIDEvent==TIME_FLASH ) //空闲统计
{
static int step=0;
step>=10000?step=0:step++;
CClientDC dc(this);
if( step%2 )
dc.BitBlt(647-(m_nOutPaiComputerNumber-1)*31,422,31,48,&m_dcMem, 647-(m_nOutPaiComputerNumber-1)*31,422,SRCCOPY);
else
{
if( m_nOutPaiUserNumber<10 )
dc.BitBlt(647-(m_nOutPaiComputerNumber-1)*31,422,31,48,&m_dcBG,647-(m_nOutPaiComputerNumber-1)*31,422,SRCCOPY);
else
dc.BitBlt(647-(m_nOutPaiComputerNumber-1)*31,422,31,34,&m_dcBG,647-(m_nOutPaiComputerNumber-1)*31,422,SRCCOPY);
}
}
CDialog::OnTimer(nIDEvent);
}
void CCMajiangGameDlg::CheckPengSelect( int nPai)
{
int i;
int pai1,pai2;
int pos1,pos2;
if( m_nEatSelect==0 )m_nEatSelect=m_nEatTeam-1;
else m_nEatSelect--;
pos1=m_nEatPos[m_nEatSelect*2];
pos2=m_nEatPos[m_nEatSelect*2+1];
pai1=m_nMjUser[pos1];
for( i=pos1;i>m_nStartPosUser;i-- )
m_nMjUser[i]=m_nMjUser[i-1];
m_nMjUser[m_nStartPosUser]=pai1;
pai2=m_nMjUser[pos2];
for( i=pos2;i>m_nStartPosUser+1;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser+1]=pai2;
m_nChupaiUser=m_nMjUser[15];
for( i=15;i>m_nStartPosUser+1;i-- )
m_nMjUser[i]=m_nMjUser[i-1];;
m_nMjUser[m_nStartPosUser+2]=pai2;
m_nMjUser[m_nStartPosUser+1]=pai1;
m_nMjUser[m_nStartPosUser]=nPai;
m_nStartPosUser+=3;
DrawPai();
UpdateFrame();
}
void CCMajiangGameDlg::ShowOver(int type)
{
CString str;
m_bOver=TRUE;
KillTimer(TIME_DELAY);
m_dcMem.BitBlt(725,300,65,50*4,&m_dcBG,725,300,SRCCOPY);
switch(type)
{
case S_LIU:
str="流 局";
break;
case S_ZIMO:
str="自 摸";
break;
case S_HU:
str="胡";
break;
}
DrawPai();
CFont ft,*oldft;
CRect rect(10,160,800,600);
ft.CreatePointFont(800,"隶书",NULL);
oldft=m_dcMem.SelectObject(&ft);
m_dcMem.SetTextColor(RGB(255,0,0));
m_dcMem.SetBkMode(TRANSPARENT);
m_dcMem.DrawText(str,rect,DT_CENTER | DT_SINGLELINE | DT_VCENTER );
m_dcMem.SelectObject(oldft);
CPicture pic2;
pic2.Load("images\\start1.jpg");
pic2.Render(&m_dcMem,m_rtBtRestart);
UpdateFrame();
}
void CCMajiangGameDlg::PlayPaiSound(int nPai,BOOL bGirl)
{
CString strFile;
if( nPai<9 )
strFile.Format("One%02d.wav",nPai%9+1);
else if( nPai<18 )
strFile.Format("Ton%02d.wav",nPai%9+1);
else if( nPai<27 )
strFile.Format("Sou%02d.wav",nPai%9+1);
else
{
switch(nPai)
{
case 27:
strFile="Wind_E.wav";
break;
case 28:
strFile="Wind_S.wav";
break;
case 29:
strFile="Wind_W.wav";
break;
case 30:
strFile="Wind_N.wav";
break;
case 31:
strFile="Word_Jone.wav";
break;
case 32:
strFile="Word_Far.wav";
break;
case 33:
strFile="Word_Bai.wav";
break;
}
}
if( bGirl )
strFile="g_"+strFile;
else
strFile="b_"+strFile;
::sndPlaySound("sound\\"+strFile,SND_ASYNC|SND_NODEFAULT);
}
void CCMajiangGameDlg::PlayChessSound(int type,BOOL bGirl,BOOL bNor)
{
CString strFile;
switch(type)
{
case S_HU:
strFile="Op_Hu.wav";
break;
case S_GUN:
strFile="Op_Gun.wav";
break;
case S_ZIMO:
strFile="Op_Jimo.wav";
break;
case S_EAT:
strFile="Op_Eat.wav";
break;
case S_PON:
strFile="Op_Pon.wav";
break;
case S_LIU:
strFile="Luju.wav";
break;
case S_STATE:
strFile="Others03.wav";
break;
case S_MOU:
strFile="Others00.wav";
break;
case S_DAO:
strFile="Others07.wav";
break;
}
if( !bNor )
{
::sndPlaySound("sound\\"+strFile,SND_ASYNC|SND_NODEFAULT);
return;
}
if( bGirl )
strFile="g_"+strFile;
else
strFile="b_"+strFile;
::sndPlaySound("sound\\"+strFile,SND_ASYNC|SND_NODEFAULT);
}
void CCMajiangGameDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
::SetCursor(m_hCursorDown);
m_bHandDown=TRUE;
CDialog::OnLButtonDown(nFlags, point);
MSG message;
while(::PeekMessage(&message,this->m_hWnd,WM_LBUTTONDOWN,WM_LBUTTONDOWN,PM_REMOVE));
}
void CCMajiangGameDlg::MouseMoveOnTitle(CPoint point)
{
BOOL bFind=FALSE;
for( int i=0;i<4;i++ )
if( m_rtTitle[i].PtInRect(point) )
{
if( m_nMouseOnTitle==i )return;
// Invalidate();
CClientDC dc(this);
CPicture pic;
pic.Load("images\\title2.jpg");
pic.Render(&m_dcMem);
dc.BitBlt(m_rtTitle[i].left,m_rtTitle[i].top,m_rtTitle[i].right-m_rtTitle[i].left,m_rtTitle[i].bottom-m_rtTitle[i].top,&m_dcMem,m_rtTitle[i].left,m_rtTitle[i].top,SRCCOPY);
m_nMouseOnTitle=i;
PlayChessSound(S_MOU,TRUE,FALSE);
bFind=TRUE;
break;
}
if( m_nMouseOnTitle!=-1 && bFind==FALSE )
{
m_nMouseOnTitle=-1;
Invalidate();
}
}
void CCMajiangGameDlg::OnClickTitle()
{
switch( m_nMouseOnTitle )
{
case 0:
m_bTitle=FALSE;
ResetMj();
break;
case 2:
EndDialog(IDOK);
break;
case 3:
CAboutDlg dlgAbout;
dlgAbout.DoModal();
break;
}
}
void CCMajiangGameDlg::DrawFace(int type)
{
CString strFile;
switch( type )
{
case F_OPEN1:
strFile="Open1.jpg";
break;
case F_OPEN2:
strFile="Open2.jpg";
break;
case F_CLOSE:
strFile="close.jpg";
break;
}
CClientDC dc(this);
CPicture pic;
pic.Load("images\\"+strFile);
pic.Render(&m_dcBuffer);
dc.BitBlt(388,127,50,20,&m_dcBuffer,388,127,SRCCOPY);
}
void CCMajiangGameDlg::DrawEyes(int type)
{
CString strFile;
switch( type )
{
case E_XI:
strFile="E_XI.jpg";
break;
case E_SAI:
strFile="E_SAI.jpg";
break;
case E_NU:
strFile="E_NU.jpg";
break;
case E_LE:
strFile="E_LE.jpg";
break;
case E_BUNAI:
strFile="E_BUNAI.jpg";
break;
case E_YUYE:
strFile="E_YUYE.jpg";
break;
}
CClientDC dc(this);
CPicture pic;
pic.Load("images\\"+strFile);
pic.Render(&m_dcBuffer);
dc.BitBlt(355,35,108,134,&m_dcBuffer,355,35,SRCCOPY);
}
void CCMajiangGameDlg::PlayMinganSound(int type)
{
CString strFile;
switch( type )
{
case E_NU:
strFile.Format("g_hate%02d.wav",rand()%3);
break;
case E_LE:
strFile.Format("g_Touch%02d.wav",rand()%4);
break;
case E_YUYE:
strFile.Format("g_Sexy%02d.wav",rand()%5);
break;
}
::sndPlaySound("sound\\"+strFile,SND_ASYNC|SND_NODEFAULT);
}
void CCMajiangGameDlg::SetTrans(int pos,BOOL who)
{
COLORREF cr;
int r1,g1,b1;
for( int i=0;i<31;i++ )
for( int j=0;j<48;j++ )
{
if( who )
cr=m_dcMj.GetPixel(m_nOutPaiUser[pos]*31+i,129+j);//m_dcBG.GetPixel(95+pos*39+i,518+j);
else
cr=m_dcMj.GetPixel(m_nOutPaiComputer[pos]*31+i,176+j);//m_dcBG.GetPixel(95+pos*39+i,518+j);
r1=100;//GetRValue(cr)*0.8;
g1=GetGValue(cr);//*0.8;
b1=GetBValue(cr);//*0.8;
// cr=m_dcMj.GetPixel(m_nMjUser[m_nPai[pos]]*39+i,64+j);
// r2=0;//GetRValue(cr)*0.2;
// g2=GetGValue(cr)*0.2;
// b2=GetBValue(cr)*0.2;
if( who )
m_dcMem.SetPixel(120+pos*31+i,456+j,RGB(r1,g1,b1));
else
m_dcMem.SetPixel(647-pos*31+i,422+j,RGB(r1,g1,b1));
}
}
int CCMajiangGameDlg::ComputerThink(int pai)
{
// return 0;
int a[17],i;
// CMajiangHufa mf;
CThinkPklang bb;
for(i=0;i<16-m_nStartPosComputer;i++)
a[i]=m_nMjComputer[i+m_nStartPosComputer];
a[16-m_nStartPosComputer]=pai;
bb.SetMjPaiArray(a,16-m_nStartPosComputer+1);
bb.Think();
for( i=0;i<m_arrComHupai.GetSize();i++ )
if( pai==m_arrComHupai.GetAt(i) )
{
bb.GetHupaiTeam(m_nHupaiTeam);
return 1000;
}
m_nComputerGoodScore=bb.GetMaxScore();
int ret=bb.GetBadly();
if( pai!=ret )
{
for( i=m_nStartPosComputer;i<16;i++ )
if( m_nMjComputer[i]==ret )
{
m_nMjComputer[i]=pai;
break;
}
SortMj(m_nMjComputer,m_nStartPosComputer);
}
return ret;
}
void CCMajiangGameDlg::FindHu()
{
for( int i=0;i<m_arrHupai.GetSize();i++ )
if( m_nChupaiUser==m_arrHupai.GetAt(i) )
{
m_bHu=TRUE;
m_bZimo=TRUE;
m_dcMem.BitBlt(725,300+50*3,65,40,&m_dcState,1,53*4+1,SRCCOPY);
UpdateFrame();
break;
}
}
int CCMajiangGameDlg::CheckNeedGet(int pai)
{
// return -1;
int a[17],i,j;
CThinkPklang bb;
for(i=0;i<16-m_nStartPosComputer;i++)
a[i]=m_nMjComputer[i+m_nStartPosComputer];
a[16-m_nStartPosComputer]=pai;
bb.SetMjPaiArray(a,17-m_nStartPosComputer);
bb.Think();
for( i=0;i<m_arrComHupai.GetSize();i++ )
if( pai==m_arrComHupai.GetAt(i) )
{
bb.GetHupaiTeam(m_nHupaiTeam);
return 1000;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -