五子棋遇到的一些问题
想了很久有些地方不是看得很明白,所以上来问问。。。。。。。。。。五子棋棋盘如下面所示:
问题:
1、当我们下棋时单击左键,由OnLButtonDown函数响应,得到点击位置的坐标(x,y),这个坐标是不是以像素为单
位?
2、对应的棋盘的坐标是以什么为单位?是怎么实现的?
3、单击左键得到的坐标是很精确的,棋盘的坐标(线交叉的地方)也是一个精确的值,这两个值在我们点击棋盘的时候
相等的机率是很低的,既然这个不等,那在画棋子的时候怎么办?
4、棋盘上有很多个小的方格,如果我很巧合的点击在了方格的正中间时,那在画棋子时该画在哪里。
5、这段代码看的不是很明白:
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
int x1,y1;
x1=(int)(point.x-7)/29 ; //这里减7后在整除29是什么意思????
y1=(int)(point.y-7)/29 ;
twzq.downzi(x1,y1);
if (twzq.twinner.winner==1)
{
CMyDlg::MessageBox("白棋获胜!" );
twzq.draw();
}
if (twzq.twinner.winner==2)
{
CMyDlg::MessageBox("黑棋获胜!" );
twzq.draw();
}
6、还有这段代码:
void wzq::DrawQZ(int nx,int ny,bool style)//画棋子
{
if (wzq::dcseted==false)return;
if (nx>15||ny>15) return;
if (style==false )
{
dc->BitBlt(nx*29+7,ny*29+7,28,28,mask,0,0,MERGEPAINT); //这里乘29在加7世什么意思???
dc->BitBlt(nx*29+7,ny*29+7,28,28,qzb,0,0,SRCAND);
}
else
{
dc->BitBlt(nx*29+7,ny*29+7,28,28,mask,0,0,MERGEPAINT);
dc->BitBlt(nx*29+7,ny*29+7,28,28,qzh,0,0,SRCAND);
}
}
暂时提这几个问题,如果还有问题的话再提出来,刚刚学VC不久,所以有很多问题不明白,希望高手解释一下,先谢
过了