[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);
}