[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: computer-go: Visual development question



These are GUI routines. May be of help to you.

Dan Liu

void CMyView::OnDraw(CDC* pDC)
{
	CMylDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	// TODO: add draw code for native data here
   int i,j;    
   CPen* gPen = new CPen;
   CBrush* gBrush = new CBrush;
   CBrush* pBrush = new CBrush;
   CBrush* dBrush = new CBrush;
	CBrush* bBrush;
   CPen* pBackup;

   x0=180;
   y0=10;
   x1=540;
   y1=352;
   gPen->CreatePen(PS_SOLID,1,RGB(0,0,0));
   gBrush->CreateSolidBrush(RGB(115,64,15));
   pBrush->CreateSolidBrush(RGB(255,255,255));
   dBrush->CreateSolidBrush(RGB(220,220,0));
   pDC->SelectStockObject(NULL_PEN);
   bBrush=pDC->SelectObject(gBrush);
   pDC->Rectangle(x0-10,y0,x1+11,y1+20);
	pDC->SelectStockObject(BLACK_PEN);
   pBackup=pDC->SelectObject(gPen);
   for(i=0;i<19;i++)
   {
	pDC->MoveTo(x0,20+i*19);
	pDC->LineTo(x1,20+i*19);
   }
   for(i=0;i<19;i++)
   {
	pDC->MoveTo(180+i*20,y0+10);
	pDC->LineTo(180+i*20,y1+10);
   }
   pDC->SelectObject(pBackup);
   pBackup=pDC->SelectObject(gPen);
	pDC->TextOut(176,372,"A",1);
	pDC->TextOut(196,372,"B",1);
	pDC->TextOut(216,372,"C",1);
	pDC->TextOut(236,372,"D",1);
	pDC->TextOut(256,372,"E",1);
	pDC->TextOut(276,372,"F",1);
	pDC->TextOut(296,372,"G",1);
	pDC->TextOut(316,372,"H",1);
	pDC->TextOut(336,372,"J",1);
	pDC->TextOut(356,372,"K",1);
	pDC->TextOut(376,372,"L",1);
	pDC->TextOut(396,372,"M",1);
	pDC->TextOut(416,372,"N",1);
	pDC->TextOut(436,372,"O",1);
	pDC->TextOut(456,372,"P",1);
	pDC->TextOut(476,372,"Q",1);
	pDC->TextOut(496,372,"R",1);
	pDC->TextOut(516,372,"S",1);
	pDC->TextOut(536,372,"T",1);

	pDC->TextOut(555,11,"19",2);
	pDC->TextOut(555,30,"18",2);
	pDC->TextOut(555,49,"17",2);
	pDC->TextOut(555,68,"16",2);
	pDC->TextOut(555,4*19+11,"15",2);
	pDC->TextOut(555,5*19+11,"14",2);
	pDC->TextOut(555,6*19+11,"13",2);
	pDC->TextOut(555,7*19+11,"12",2);
	pDC->TextOut(555,8*19+11,"11",2);
	pDC->TextOut(555,9*19+11,"10",2);
	pDC->TextOut(555,10*19+11," 9",2);
	pDC->TextOut(555,11*19+11," 8",2);
	pDC->TextOut(555,12*19+11," 7",2);
	pDC->TextOut(555,13*19+11," 6",2);
	pDC->TextOut(555,14*19+11," 5",2);
	pDC->TextOut(555,15*19+11," 4",2);
	pDC->TextOut(555,16*19+11," 3",2);
	pDC->TextOut(555,17*19+11," 2",2);
	pDC->TextOut(555,18*19+11," 1",2);

   CBrush* blkBrush = new CBrush;
   blkBrush->CreateSolidBrush(RGB(0,0,0));
	pDC->SelectObject(blkBrush);
	i=3;
	j=3;
   pDC->Ellipse(x0-3+i*20,y0+10+j*19-3,
		         x0-3+i*20+6,y0+10+j*19+3);
	i=3;
	j=15;
   pDC->Ellipse(x0-3+i*20,y0+10+j*19-3,
		         x0-3+i*20+6,y0+10+j*19+3);
	i=15;
	j=3;
   pDC->Ellipse(x0-3+i*20,y0+10+j*19-3,
		         x0-3+i*20+6,y0+10+j*19+3);
	i=15;
	j=15;
   pDC->Ellipse(x0-3+i*20,y0+10+j*19-3,
		         x0-3+i*20+6,y0+10+j*19+3);
	i=3;
	j=9;
   pDC->Ellipse(x0-3+i*20,y0+10+j*19-3,
		         x0-3+i*20+6,y0+10+j*19+3);
	i=9;
	j=3;
   pDC->Ellipse(x0-3+i*20,y0+10+j*19-3,
		         x0-3+i*20+6,y0+10+j*19+3);
	i=9;
	j=9;
   pDC->Ellipse(x0-3+i*20,y0+10+j*19-3,
		         x0-3+i*20+6,y0+10+j*19+3);
	i=9;
	j=15;
   pDC->Ellipse(x0-3+i*20,y0+10+j*19-3,
		         x0-3+i*20+6,y0+10+j*19+3);
	i=15;
	j=9;
   pDC->Ellipse(x0-3+i*20,y0+10+j*19-3,
		         x0-3+i*20+6,y0+10+j*19+3);

	pDC->SelectObject(pBackup);

	for(i=0;i<19;i++)
		for(j=0;j<19;j++)
	{
	if(pDoc->pos[i][j] == 1)
	{
	pDC->SelectObject(dBrush);
	pDC->Ellipse(x0-10+i*20,y0+10+j*19-10,
		         x0-10+i*20+20,y0+10+j*19+9);
	}
	else
	{
	if(pDoc->pos[i][j] == 2)
	{
	pDC->SelectObject(pBrush);
	pDC->Ellipse(x0-10+i*20,y0+10+j*19-10,
		         x0-10+i*20+20,y0+10+j*19+9);
	}
	}
	}
	pDC->SelectObject(bBrush);
}
void CMyView::print_stone(int x,int y,int color)
{
	CClientDC pDC(this);

	if(x >= 0 && y >= 0 && x <19 && y < 19)
	{
	CBrush* pBrush = new CBrush;
	CBrush* dBrush = new CBrush;
	CBrush* bBrush;
	dBrush->CreateSolidBrush(RGB(220,220,0));
	pBrush->CreateSolidBrush(RGB(255,255,255));

	if(color == 1)
	{
	bBrush=pDC.SelectObject(dBrush);
	pDC.Ellipse(x0-10+x*20,y0+10+y*19-10,
		         x0-10+x*20+20,y0+10+y*19+9);
	}
	else
	{
	if(color == 2)
	{
	bBrush=pDC.SelectObject(pBrush);
	pDC.Ellipse(x0-10+x*20,y0+10+y*19-10,
		         x0-10+x*20+20,y0+10+y*19+9);
	}
	}
	pDC.SelectObject(bBrush);
	}

}

void CMyView::erase_stone(int x,int y)
{
	CClientDC pDC(this);
	CBrush* pBrush = new CBrush;
	CBrush* bBrush;
	pBrush->CreateSolidBrush(RGB(115,64,15));

	CPen* pPen = new CPen;
	CPen* bPen;
	pPen->CreatePen(PS_SOLID,1,RGB(0,0,0));

	pDC.SelectStockObject(NULL_PEN);
	if(x > 0 && y > 0 && x <18 && y < 18)
	{
	bBrush=pDC.SelectObject(pBrush);
	pDC.SelectObject(pBrush);
	pDC.Ellipse(x0-10+x*20,y0+10+y*19-10,
		         x0-10+x*20+20,y0+10+y*19+9);
	bPen=pDC.SelectObject(pPen);
	pDC.MoveTo(x0-10+x*20,y0+10+y*19);
	pDC.LineTo(x0-10+x*20+20,y0+10+y*19);
	pDC.MoveTo(x0-10+x*20+10,y0+10+y*19-10);
	pDC.LineTo(x0-10+x*20+10,y0+10+y*19+9);
	pDC.SelectObject(bPen);
	}

	if(x == 0 && y == 0)
	{
	bBrush=pDC.SelectObject(pBrush);
	pDC.SelectObject(pBrush);
	pDC.Ellipse(x0-10+x*20,y0+10+y*19-10,
		         x0-10+x*20+20,y0+10+y*19+9);
	bPen=pDC.SelectObject(pPen);
	pDC.MoveTo(x0-10+x*20+10,y0+10+y*19);
	pDC.LineTo(x0-10+x*20+20,y0+10+y*19);
	pDC.MoveTo(x0-10+x*20+10,y0+10+y*19);
	pDC.LineTo(x0-10+x*20+10,y0+10+y*19+9);
	pDC.SelectObject(bPen);
	}

	if(x == 0 && y == 18)
	{
	bBrush=pDC.SelectObject(pBrush);
	pDC.SelectObject(pBrush);
	pDC.Ellipse(x0-10+x*20,y0+10+y*19-10,
		         x0-10+x*20+20,y0+10+y*19+9);
	bPen=pDC.SelectObject(pPen);
	pDC.MoveTo(x0-10+x*20+10,y0+10+y*19);
	pDC.LineTo(x0-10+x*20+20,y0+10+y*19);
	pDC.MoveTo(x0-10+x*20+10,y0+10+y*19-9);
	pDC.LineTo(x0-10+x*20+10,y0+10+y*19);
	pDC.SelectObject(bPen);
	}

	if(x == 18 && y == 0)
	{
	bBrush=pDC.SelectObject(pBrush);
	pDC.SelectObject(pBrush);
	pDC.Ellipse(x0-10+x*20,y0+10+y*19-10,
		         x0-10+x*20+20,y0+10+y*19+9);
	bPen=pDC.SelectObject(pPen);
	pDC.MoveTo(x0-10+x*20,y0+10+y*19);
	pDC.LineTo(x0-10+x*20+10,y0+10+y*19);
	pDC.MoveTo(x0-10+x*20+10,y0+10+y*19);
	pDC.LineTo(x0-10+x*20+10,y0+10+y*19+9);
	pDC.SelectObject(bPen);
	}
	if(x == 18 && y == 18)
	{
	bBrush=pDC.SelectObject(pBrush);
	pDC.SelectObject(pBrush);
	pDC.Ellipse(x0-10+x*20,y0+10+y*19-10,
		         x0-10+x*20+20,y0+10+y*19+9);
	bPen=pDC.SelectObject(pPen);
	pDC.MoveTo(x0-10+x*20,y0+10+y*19);
	pDC.LineTo(x0-10+x*20+10,y0+10+y*19);
	pDC.MoveTo(x0-10+x*20+10,y0+10+y*19-9);
	pDC.LineTo(x0-10+x*20+10,y0+10+y*19);
	pDC.SelectObject(bPen);
	}
	if(x == 0 && y > 0 && y < 18)
	{
	bBrush=pDC.SelectObject(pBrush);
	pDC.SelectObject(pBrush);
	pDC.Ellipse(x0-10+x*20,y0+10+y*19-10,
		         x0-10+x*20+20,y0+10+y*19+9);
	bPen=pDC.SelectObject(pPen);
	pDC.MoveTo(x0-10+x*20+10,y0+10+y*19);
	pDC.LineTo(x0-10+x*20+20,y0+10+y*19);
	pDC.MoveTo(x0-10+x*20+10,y0+10+y*19-10);
	pDC.LineTo(x0-10+x*20+10,y0+10+y*19+9);
	pDC.SelectObject(bPen);
	}
	if(x == 18 && y > 0 && y < 18)
	{
	bBrush=pDC.SelectObject(pBrush);
	pDC.SelectObject(pBrush);
	pDC.Ellipse(x0-10+x*20,y0+10+y*19-10,
		         x0-10+x*20+20,y0+10+y*19+9);
	bPen=pDC.SelectObject(pPen);
	pDC.MoveTo(x0-10+x*20,y0+10+y*19);
	pDC.LineTo(x0-10+x*20+10,y0+10+y*19);
	pDC.MoveTo(x0-10+x*20+10,y0+10+y*19-10);
	pDC.LineTo(x0-10+x*20+10,y0+10+y*19+9);
	pDC.SelectObject(bPen);
	}
	if(y == 0 && x > 0 && x < 18)
	{
	bBrush=pDC.SelectObject(pBrush);
	pDC.SelectObject(pBrush);
	pDC.Ellipse(x0-10+x*20,y0+10+y*19-10,
		         x0-10+x*20+20,y0+10+y*19+9);
	bPen=pDC.SelectObject(pPen);
	pDC.MoveTo(x0-10+x*20,y0+10+y*19);
	pDC.LineTo(x0-10+x*20+20,y0+10+y*19);
	pDC.MoveTo(x0-10+x*20+10,y0+10+y*19);
	pDC.LineTo(x0-10+x*20+10,y0+10+y*19+9);
	pDC.SelectObject(bPen);
	}
	if(y == 18 && x > 0 && x < 18)
	{
	bBrush=pDC.SelectObject(pBrush);
	pDC.SelectObject(pBrush);
	pDC.Ellipse(x0-10+x*20,y0+10+y*19-10,
		         x0-10+x*20+20,y0+10+y*19+9);
	bPen=pDC.SelectObject(pPen);
	pDC.MoveTo(x0-10+x*20,y0+10+y*19);
	pDC.LineTo(x0-10+x*20+20,y0+10+y*19);
	pDC.MoveTo(x0-10+x*20+10,y0+10+y*19-10);
	pDC.LineTo(x0-10+x*20+10,y0+10+y*19);
	pDC.SelectObject(bPen);
	}

}
void CMyView::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
    CRamelDoc *pDoc=GetDocument();

	if(!pDoc->game)
	   return;
	if(pDoc->color == pDoc->nstone%2+1)
	   return;
	int nx,ny,ok;

	nx=(point.x-170)/20;
	ny=(point.y-10)/19;
	if(nx >= 0 && ny >= 0 && nx <19 && ny < 19)
		ok=1;
	else
		ok=0;
	if(!ok)
	   return;

	move_processing(nx,ny);

	CView::OnLButtonUp(nFlags, point);
}