// Qipan.cpp: implementation of the CQipan class.
//
//////////////////////////////////////////////////////////////////////
#include "Qipan.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CQipan::CQipan()
{
}
CQipan::~CQipan()
{
}
CQipan::DrawQipan(HDC hDC,HWND hwnd)
{
for(i=0;i<16;i++)
{
for(j=0;j<16;j++)
{
if((i+j)%2==0)
{
hPen=CreatePen(PS_SOLID,1,RGB(0,100,0));
SelectObject(hDC,hPen);
hBrush=CreateSolidBrush(RGB(0,100,0));
SelectObject(hDC,hBrush);
Rectangle(hDC,i*50,j*50,i*50+50,j*50+50);
}
else
{
hPen=CreatePen(PS_SOLID,1,RGB(2,0,100));
SelectObject(hDC,hPen);
hBrush=CreateSolidBrush(RGB(2,0,100));
SelectObject(hDC,hBrush);
Rectangle(hDC,i*50,j*50,i*50+50,j*50+50);
}
}
}
}
CQipan::DrawZl(HDC hDC,HWND hwnd)
{
int x,y;
x=m;
y=n;
if(x+y==15)
{
ZLCenter(hDC,hwnd);
}
else
{
if((x+y)%2==0)//绿色点的棋子
{
ZLGreen(hDC,hwnd);
}
else//蓝色点的棋子
{
ZLBlue(hDC,hwnd);
}
BUSide(hDC,hwnd);
}
MessageBox(hwnd,"棋子已走完,请重新选择!","提示",MB_OK);
}
CQipan::ZLGreen(HDC hDC,HWND hwnd)//绿色点的棋子
{
int x,y;
x=m;
y=n;
if(x<15-y)//左上三角行的情况
{
GLeft(hDC,hwnd);
}
else
{
GRight(hDC,hwnd);
}
}
CQipan::ZLBlue(HDC hDC,HWND hwnd)//蓝色点的棋子
{
int x,y;
x=m;
y=n;
if(x<15-y)//左上三角行的情况
{
BLeft(hDC,hwnd);
}
else//右下三角行的情况
{
BRight(hDC,hwnd);
}
}
CQipan::GLeft(HDC hDC,HWND hwnd)//绿色左上三角行的情况
{
int x,y;
x=m;
y=n;
if(x<=y)//横坐标小于纵坐标的情况
{
for(j=y;j>=x;j--)//先背着左下角走
{
Ellipse(hDC,x*50,j*50,x*50+50,j*50+50);
Sleep(100);
}
for(j=x;j<=y;j++)//在棋子所在背离左下角区域来回绕
{
if((j+x)%2==0)//背离的绕
{
for(i=x+1;i<16-x;i++)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
else//回归绕
{
for(i=15-x;i>x;i--)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
}
for(j=y+1;j<16-x;j++)//最后大来回绕到左下角
{
if((j+x)%2==0)//背离绕
{
for(i=x;i<16-x;i++)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
else//回归绕
{
for(i=15-x;i>=x;i--)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
}
}
else//横坐标大于纵坐标的情况
{
for(i=x;i<16-y;i++)//先本行背着左下角绕
{
Ellipse(hDC,i*50,y*50,i*50+50,y*50+50);
Sleep(100);
}
for(i=15-y;i>x-1;i--)//下行往回绕
{
Ellipse(hDC,i*50,y*50+50,i*50+50,y*50+100);
Sleep(100);
}
for(i=x-1;i>=y;i--)//补上前面的
{
if((i+y)%2==1)//往上补一行
{
Ellipse(hDC,i*50,y*50+50,i*50+50,y*50+100);
Sleep(100);
Ellipse(hDC,i*50,y*50,i*50+50,y*50+50);
Sleep(100);
}
else//往下补一行
{
Ellipse(hDC,i*50,y*50,i*50+50,y*50+50);
Sleep(100);
Ellipse(hDC,i*50,y*50+50,i*50+50,y*50+100);
Sleep(100);
}
}
for(j=y+2;j<16-y;j++)//来回绕
{
if((j+x)%2==0)//背离绕
{
for(i=y;i<16-y;i++)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
else//回归绕
{
for(i=15-y;i>=y;i--)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
}
}
}
CQipan::BLeft(HDC hDC,HWND hwnd)//蓝色左上三角行的情况
{
int x,y;
x=m;
y=n;
if(x<=y)//横坐标小于纵坐标的情况
{
for(i=x;i<16-x;i++)//在背离区域绕
{
if((i+x)%2==0)//向上走
{
for(j=y;j>=x;j--)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
else//向下走
{
for(j=x;j<=y;j++)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
}
//在中间区域绕,最后要空两行,判断条件最后补上
for(j=y+1;j<14-x;j++)
{
if((j+x)%2==0)//回归绕
{
for(i=15-x;i>=x;i--)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
else//背离绕
{
for(i=x;i<16-x;i++)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
}
//最后两行的绕
for(i=15-x;i>x;i--)
{
if((i+y)%2==0)//向下走
{
for(j=14-x;j<16-x;j++)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
else//向上走
{
for(j=15-x;j>12-x;j--)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
}
Ellipse(hDC,i*50,j*50-50,i*50+50,j*50);
Sleep(100);
}
else//横坐标大于纵坐标的情况
{
for(i=x;i<16-y;i++)//先背离绕
{
Ellipse(hDC,i*50,y*50,i*50+50,y*50+50);
Sleep(100);
}
for(i=15-y;i>x-2;i--)//回归绕
{
Ellipse(hDC,i*50,y*50+50,i*50+50,y*50+100);
Sleep(100);
}
for(i=x-2;i>=y;i--)//补上前面的
{
if((i+y)%2==1)//向上走
{
Ellipse(hDC,i*50,y*50+50,i*50+50,y*50+100);
Sleep(100);
Ellipse(hDC,i*50,y*50,i*50+50,y*50+50);
Sleep(100);
}
else//向下走
{
Ellipse(hDC,i*50,y*50,i*50+50,y*50+50);
Sleep(100);
Ellipse(hDC,i*50,y*50+50,i*50+50,y*50+100);
Sleep(100);
}
}
//在中间区域绕,最后要空两行,判断条件最后补上
for(j=y+1;j<16-y;j++)
{
if((j+x)%2==0)//回归绕
{
for(i=15-y;i>=y;i--)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
else//背离绕
{
for(i=y;i<16-y;i++)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
}
}
}
CQipan::GRight(HDC hDC,HWND hwnd)//绿色右下三角行的情况
{
int x,y;
x=m;
y=n;
if(x<=y)//横坐标小于纵坐标的情况
{
for(i=x;i<=y;i++)//先背着左下角走
{
Ellipse(hDC,i*50,y*50,i*50+50,y*50+50);
Sleep(100);
}
for(i=y;i>=x;i--)//在棋子所在背离左下角区域来回绕
{
if((i+y)%2==0)//背离的绕
{
for(j=y-1;j>=15-y;j--)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
else//回归绕
{
for(j=15-y;j<y;j++)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
}
for(i=x-1;i>=15-y;i--)//最后大来回绕到左下角
{
if((i+y)%2==0)//背离绕
{
for(j=y;j>=15-y;j--)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
else//回归绕
{
for(j=15-y;j<=y;j++)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
}
}
else //横坐标大于纵坐标的情况,有问题,稍会儿修改,好了,以后注意判断条件
{
for(j=y;j>=15-x;j--)//先本行背着左下角绕
{
Ellipse(hDC,x*50,j*50,x*50+50,j*50+50);
Sleep(100);
}
for(j=15-x;j<=y;j++)//下行往回绕
{
Ellipse(hDC,x*50-50,j*50,x*50,j*50+50);
Sleep(100);
}
for(j=y+1;j<=x;j++)//补上前面的
{
if((j+x)%2==1)//往上补一行
{
Ellipse(hDC,x*50-50,j*50,x*50,j*50+50);
Sleep(100);
Ellipse(hDC,x*50,j*50,x*50+50,j*50+50);
Sleep(100);
}
else//往下补一行
{
Ellipse(hDC,x*50,j*50,x*50+50,j*50+50);
Sleep(100);
Ellipse(hDC,x*50-50,j*50,x*50,j*50+50);
Sleep(100);
}
}
for(i=x-2;i>=15-x;i--)//来回绕
{
if((i+y)%2==0)//背离绕
{
for(j=x;j>=15-x;j--)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
else//回归绕
{
for(j=15-x;j<=x;j++)
{
Ellipse(hDC,i*50,j*50,i*50+50,j*50+50);
Sleep(100);
}
}
}
}
}
CQipan::BRight(HDC hDC,HWND hwnd)//蓝色右下三角行的情况
{
int x,y;
x=m;
y=n;
if(x<y)//横坐标小于纵坐标的情况
{
for(j=y;j>=15-y;j--)//在背离区域绕
{
if((j+x