Ejemplo n.º 1
0
void GameTree::PrintGame(FILE* f){
    int i;
    char pre[100];
    for(i=0;i<currDepth;i++) pre[i]=' ';
    sprintf(pre+i, "%3ld %2d", currIdx, currDepth);
    
    if(currIdx==0){
        fprintf(f,"Size=%zu\n",size);
        fprintf(f,"%s %d %d %0.1f\n",pre,MoveValue(),val,IsWin());
    }else{
        fprintf(f,"%s %d %d %0.1f\n",pre,MoveValue(),val,IsWin());
    }
    if(currDepth<depth)
        for(int i=0;i<breath;i++){
            DoMove(i);
            PrintGame(f);
            UndoMove();
        }
}
Ejemplo n.º 2
0
void CCLLKDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	int x=(point.x-m_iSeekX)/FRONTWIDTH+((point.x-m_iSeekX)%FRONTWIDTH?1:0);
	int y=(point.y-m_iSeekY)/FRONTHEIGHT+((point.y-m_iSeekY)%FRONTHEIGHT?1:0);
	if(x>0&&y>0&&x<m_nCol&&y<m_nRow)
	{
		if((x!=m_nX1||y!=m_nY1))
		{
			if (x<m_nCol&&y<m_nRow&&m_map[y*m_nCol+x]!=BLANK_STATE)
			{
				if (!IsSelected)
				{
					IsSelected=!IsSelected;
					m_nX1=x;
					m_nY1=y;
				}
				else//Selected
				{
					if (m_map[m_nY1*m_nCol+m_nX1]==m_map[y*m_nCol+x])
					{
						if (IsLink(m_nX1,m_nY1,x,y))
						{
							DrawLink(m_nX1,m_nY1,x,y);
							m_map[m_nY1*m_nCol+m_nX1]=BLANK_STATE;
							m_map[y*m_nCol+x]=BLANK_STATE;
							IsSelected=!IsSelected;
						}
						else
						{
							m_nY1=y;
							m_nX1=x;
						}
					}
					else
					{
						m_nY1=y;
						m_nX1=x;
					}

				}
				if (IsWin())
				{
					Invalidate(false);
					MessageBox("胜利闯关,即将开始新局!","恭喜您",MB_OK|MB_ICONWARNING);
					StartNewGame();
				}
			}
		}
	}

	Invalidate(FALSE);
	//CDialog::OnLButtonDown(nFlags, point);
}
Ejemplo n.º 3
0
bool Board::SetColorByNumber(int color)
{
	if ((color==board[0][0]) || IsLose() || IsWin())
		return false;
	oldcolor = board[0][0];
	ChangeColor(0, 0, color);
	
	step_count++;
	// check for winnings
	win = CheckForWin();
	
	return true;
}
Ejemplo n.º 4
0
void CChessBorad::OnLButtonUp(UINT nFlags, CPoint point) 
{
	CPoint pt = point;
	if (m_IsStart == FALSE)			//游戏终止
		return;
	if (m_IsDown==TRUE)				//轮到客户端
	{
		NODE* node = GetLikeNode(pt); 
		if (node !=NULL)
		{
			if (node->m_Color==ncUNKOWN)
			{
				node->m_Color = ncBLACK;

				NODE *pNode = new NODE();
				memcpy(pNode,node,sizeof(NODE));

				m_BackPlayList.AddTail(pNode);

				OnPaint();

				//定义一个TCP数据报
				TCP_PACKAGE	 package;
				package.cmdType = CT_POINT;
				package.chessPT.x = node->m_nX;
				package.chessPT.y = node->m_nY;
				m_ClientSock.Send((void*)&package,sizeof(TCP_PACKAGE));
				
				//记录最近的棋子坐标
				m_LocalChessPT.x = node->m_nX;
				m_LocalChessPT.y = node->m_nY;

				m_IsDown= FALSE;
				if (IsWin(node)!= NULL)
				{
					m_IsStart = FALSE;
					Sleep(1000);

					//赢棋
					TCP_PACKAGE	 winPackage;
					winPackage.cmdType = CT_WINPOINT;
					winPackage.winPT[0] = m_Startpt;
					winPackage.winPT[1] = m_Endpt;

					m_ClientSock.Send((void*)&winPackage,sizeof(TCP_PACKAGE));

					m_IsWin = TRUE;
					m_State = esEND;
					Invalidate();
					MessageBox("恭喜你,赢了!!!");
					m_IsWin = FALSE;
					InitializeNode();
					Invalidate();
					m_LocalChessPT.x = m_LocalChessPT.y = -1;
					m_RemoteChessPT.x = m_RemoteChessPT.y  = -1;
				}
			}
		}
	}	
	CDialog::OnLButtonUp(nFlags, point);
}