//windows.h头文件中包含应用程序所需的数据类型和数据结构的定义
#include <windows.h>
#include"resource.h"
#include"xiangqi.h"
CXiangQi My;
POINT pt;
int i,j;
int t=30;
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); //窗口函数说明
//--------以下初始化窗口类---------
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow )
{
HWND hwnd;
MSG Msg;
WNDCLASS wndclass;
char lpszClassName[]="窗口"; //窗口类名
char lpszTitle[]="王亚歌"; //窗口标题名
//窗口类的定义
wndclass.style=0; //窗口类型为默认类型
wndclass.lpfnWndProc=WndProc; //窗口处理函数为WndProc
wndclass.cbClsExtra=0; //窗口类无扩展
wndclass.cbWndExtra=0; //窗口实例无扩展
wndclass.hInstance=hInstance; // 当前实例句柄
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //窗口的最小化图标为默认图标
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); //窗口采用箭头光标
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //窗口背景为白色
wndclass.lpszMenuName=MAKEINTRESOURCE(IDM_MENU1); //窗口中无菜单
wndclass.lpszClassName=lpszClassName; //窗口类名为窗口实例
//------以下进行窗口类的注册-------
if (!RegisterClass(&wndclass)) //如果注册失败则发出警告声音
{
MessageBeep(0);
return FALSE;
}
//创建窗口
hwnd=CreateWindow(
lpszClassName, //窗口类名
lpszTitle, //窗口实例的标题名
WS_OVERLAPPEDWINDOW,//窗口的风格
CW_USEDEFAULT,
CW_USEDEFAULT, //窗口左上角为默认值
CW_USEDEFAULT,
CW_USEDEFAULT, // 窗口的高和宽为默认值
NULL, // 此窗口无父窗口
NULL, //此窗口无主菜单
hInstance, //创建此窗口应用程序的当前句柄
NULL //不使用该值
);
ShowWindow(hwnd, nCmdShow); //显示窗口
UpdateWindow(hwnd); //绘制用户区
while (GetMessage(&Msg,NULL,0,0)) //消息循环
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam; //程序终止时将信息返回系统
}
//窗口函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static HDC hDc; //定义指向设备上下文的句柄
// HBRUSH hBrush;
RECT rect;
GetClientRect(hwnd,&rect);
int w=(rect.right-rect.left)/16;
int h=(rect.bottom-rect.top)/16;
switch(message)
{
//处理菜单消息
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDM_SHOW:
hDc=GetDC(hwnd); //获取设备环境句柄
My.MyShow(hDc,hwnd); //显示棋盘
ReleaseDC(hwnd,hDc); //释放设备环境句柄
break;
}
break;
case WM_LBUTTONUP:
GetCursorPos(&pt); //获取鼠标位置
ScreenToClient(hwnd,&pt);
j=pt.x/w;
i=pt.y/h;
if(j==0&&i==15)
{
MessageBox(hwnd,"此点不能做为起点","提示",MB_OK);
break;
}
else
{
hDc=GetDC(hwnd);
Ellipse(hDc,w*j,h*i,w*(j+1),h*(i+1));
}
//-----------------------------------------------------------棋盘列为偶数列-----------------------------------------------------------------------
if(j%2==0)
{
//棋盘行数为偶数行时////////////////////////////////////////////////////////////
if(i%2==0)
{
while(j<16)
{
for(i=pt.y/h;i>=0;i--) //椭圆向上运动到最顶端
{
Ellipse(hDc,w*j,h*i,w*(j+1),h*(i+1));
Sleep(t);
}
j++; //列数自加
for(i=0;i<=pt.y/h;i++) //椭圆向下运动到起始点同一行
{
Ellipse(hDc,w*j,h*i,w*(j+1),h*(i+1));
Sleep(t);
}
j++; //列数自加
}
for(j=15;j>=pt.x/w;j--) //椭圆自右运动到与起始点同一列
{
Ellipse(hDc,w*j,h*i,w*(j+1),h*(i+1));
Sleep(t);
}
j=pt.x/w-1; //取起始点的左一列
while(j>=0)
{
for(i=pt.y/h+1;i>=0;i--) //椭圆向上运动到最顶端
{
Ellipse(hDc,w*j,h*i,w*(j+1),h*(i+1));
Sleep(t);
}
j--; //列数自减
for(i=0;i<=pt.y/h+1;i++) //椭圆向下运动到最顶端
{
Ellipse(hDc,w*j,h*i,w*(j+1),h*(i+1));
Sleep(t);
}
j--; //列数自减
}
i=pt.y/h+2; //取起始点向下两行
while(i<16)
{
for(j=0;j<16;j++) //椭圆向右运动到最右端
{
Ellipse(hDc,w*j,h*i,w*(j+1),h*(i+1));
Sleep(t);
}
i++; //行数自加
for(j=15;j>=0;j--) //椭圆向左运动到最左端
{
Ellipse(hDc,w*j,h*i,w*(j+1),h*(i+1));
Sleep(t);
}
i++; //行数自加
}
MessageBox(hwnd,"完成","提示",MB_OK);
break;
}
//棋盘行数时为奇数行时//////////////////////////////////////////////////////////////
if(i%2==1)
{
for(i=pt.y/h;i>=0;i--) //椭圆向上运动到最顶端
{
Ellipse(hDc,w*j,h*i,w*(j+1),h*(i+1));
Sleep(t);
}
j++; //列数自加
while(j<16)
{
for(i=0;i<=pt.y/h+1;i++) //椭圆向下运动到起始点的下一行
{
Ellipse(hDc,w*j,h*i,w*(j+1),h*(i+1));
Sleep(t);
}
j++; //列数自加
for(i=pt.y/h+1;i>=0;i--) //椭圆向上运动到最顶端
{
Ellipse(hDc,w*j,h*i,w*(j+1),h*(i+1));
Sleep(t);
}
j++; //列数自加
}
i=pt.y/h+2; //行数取起始点向下两行
for(j=15;j>=pt.x/w;j--) //椭圆向左运动到起始点的同一列
{
Ellipse(hDc,w*j,h*i,w*(j+1),h*(i+1));
Sleep(t);
}
j=pt.x/w; //列数取起始点的同一列
while(j>0)
{
j--; //列数自减
for(i=pt.y/h+2;i>=0;i--) //椭圆向上运动到最顶端
{
Ellipse(hDc,w*j,h*i,w*(j+1),h*(i+1));
Sleep(t);
}
j--; //列数自减
for(i=0;i<=pt.y/h+2;i++) //椭圆向下运动到起始点向下两行
{
Ellipse(hDc,w*j,h*i,w*(j+1),h*(i+1));
Sleep(t);
}
}
i=pt.y/h+3; //行数取起始点向下三行
while(i<16)
{
for(j=0;j<16;j++) //椭圆向右运动到最右端
{
Ellipse(hDc,w*j,h*i,w*(j+1),h*(i+1));
Sleep(t);
}
i++; //行数自加
for(j=15;j>=0;j--) //椭圆向左运动到最左端
{
Ellipse(hDc,w*j,h*i,w*(j+1),h*(i+1));
Sleep(t);
}
i++; //行数自加
}
}
MessageBox(hwnd,"完成","提示",MB_OK);
break;
}
//--------------------------------------------------------------棋盘列数为奇数列时-------------------------------------------------------------------
if(j%2==1)
{
//棋盘行数为奇数行时///////////////////////////////////////////////////////////////////////////
if(i%2==1)
{
while(j>0)
{
for(i=pt.y/h;i>=0;i--) //椭圆向上运动到最顶端
{
Ellipse(hDc,w*j,h*i,w*(j+1),h*(i+1));
Sleep(t);
}
j--; //列数自减
for(i=0;i<=pt.y/h;i++
评论0