chess换肤问题

来源:互联网 发布:淘宝直播怎么没有了 编辑:程序博客网 时间:2024/06/05 09:59

chess换肤问题:设置flag控制变量没切换一次就递增一次 依次进行换肤。


// 象棋Dlg.cpp : implementation file

//


#include "stdafx.h"
#include "象棋.h"
#include "象棋Dlg.h"
#include "PieceBlackJu.h"
#include "math.h"
#include "Change.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


static int Checkerboard[9][10]; //用于记录棋盘格子的状态
static int TemCheckerboard[9][10];
int i, j, status, selpiece;         //在Onstart函数中进行初始化,并对变量进行备注
int m, n; //用于记录选中棋子的坐标
int flag=2;
BOOL Pstatus = true , movevalue, gameover;


/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About


class CAboutDlg : public CDialog
{
public:
CAboutDlg();


// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA


// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
//}}AFX_VIRTUAL


// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};


CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}


void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CMyDlg dialog




CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMyDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_board = new CBitmap;
m_back = new CBitmap;


m_blackma = new CBitmap;
m_blackju = new CBitmap;
m_blackxiang = new CBitmap;
m_blackshi = new CBitmap;
m_blackjiang = new CBitmap;
m_blackpao = new CBitmap;
m_blackzu = new CBitmap;


m_redma = new CBitmap;
m_redju = new CBitmap;
m_redxiang = new CBitmap;
m_redshi = new CBitmap;
m_redshuai = new CBitmap;
m_redpao = new CBitmap;
m_redzu = new CBitmap;
m_select = new CBitmap;


//下面是实现位图的画法 添加棋子
m_board->m_hObject  = (HBITMAP)::LoadImage (NULL,"./1/qipan.bmp",IMAGE_BITMAP,460,525,LR_LOADFROMFILE);
    m_blackma->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/blackma.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackju->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/blackju.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
    m_blackxiang->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/blackxiang.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackshi->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/blackshi.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackpao->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/blackpao.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackzu->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/blackzu.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackjiang->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/blackjiang.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);


m_redma->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/redma.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redju->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/redju.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
    m_redxiang->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/redxiang.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redshi->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/redshi.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redpao->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/redpao.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redzu->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/redzu.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redshuai->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/redshuai.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_select->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/selected.bmp",IMAGE_BITMAP,51,51,LR_LOADFROMFILE);
m_back->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/mark.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}


void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_LBUTTONDOWN()//点击窗体,响应OnLButtonDown函数
ON_BN_CLICKED(ID_START, Onstart)      //点击ID_START属性的按钮,响应Onstart函数
ON_BN_CLICKED(IDC_BUTTONC, Onchanges)  
ON_WM_SETCURSOR()
ON_BN_CLICKED(IDC_GAVEUP, DoGaveUp)
ON_BN_CLICKED(IDC_QIUHE, DoTie)
ON_BN_CLICKED(IDC_HUIQI, DoUndo)
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CMyDlg message handlers


BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();


// Add "About..." menu item to system menu.


// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);


CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}


// Set the icon for this dialog.  The framework does this automatically
//  when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);// Set big icon
SetIcon(m_hIcon, FALSE);// Set small icon

// TODO: Add extra initialization here

return TRUE;  // return TRUE  unless you set the focus to a control
}


void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}


// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.


void CMyDlg::OnPaint() 
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting


SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);


// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;


// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
//以下是实现棋盘背景的画法
CDC thmem3 ;
CClientDC dc(this);
thmem3.CreateCompatibleDC(&dc);
thmem3.SelectObject(m_board);
dc.BitBlt(0,0,460,525,&thmem3,0,0,SRCCOPY); 

CDialog::OnPaint();
}
}


//点击窗体响应函数
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
int curx = int ((point.x - 5) / 51);//对点击的点整数化,与绘制位图的坐标配合,实现棋盘定格
int cury = int ((point.y - 7) / 51);
CDC thmem4 ;
CClientDC dc(this);
thmem4.CreateCompatibleDC(&dc);
if(status % 2 == 0 && Pstatus && !gameover)//黑方第一次点击响应的IF语句
{
m = curx;
n = cury;
if(Checkerboard[curx][cury] == BLACK_JU)//如果点击的是黑色的车,则选中黑色车
{
selpiece = BLACK_JU;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);//在选定的棋子上覆盖一张m_select指向的图片,带到凸显选定棋子的目的
status ++;
}
else if(Checkerboard[curx][cury] == BLACK_MA)
{
selpiece = BLACK_MA;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
status ++;
}
else if(Checkerboard[curx][cury] == BLACK_XIANG)
{
selpiece = BLACK_XIANG;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
status ++;
}
else if(Checkerboard[curx][cury] == BLACK_SHI)
{
selpiece = BLACK_SHI;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
status ++;
}
else if(Checkerboard[curx][cury] == BLACK_JIANG)
{
selpiece = BLACK_JIANG;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
status ++;
}
else if(Checkerboard[curx][cury] == BLACK_PAO)
{
selpiece = BLACK_PAO;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
status ++;
}
else if(Checkerboard[curx][cury] == BLACK_ZU)
{
selpiece = BLACK_ZU;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
status ++;
}
else
{
//
}
}
if(status % 2 == 0 && !Pstatus && !gameover)//红方第一次点击响应的IF语句
{
m = curx;
n = cury;
if(Checkerboard[curx][cury] == RED_JU)//如果点击的是红色的车,则选中红色车
{
selpiece = RED_JU;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
status ++;
}
else if(Checkerboard[curx][cury] == RED_MA)
{
selpiece = RED_MA;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
status ++;
}
else if(Checkerboard[curx][cury] == RED_XIANG)
{
selpiece = RED_XIANG;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
status ++;
}
else if(Checkerboard[curx][cury] == RED_SHI)
{
selpiece = RED_SHI;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
status ++;
}
else if(Checkerboard[curx][cury] == RED_SHUAI)
{
selpiece = RED_SHUAI;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
status ++;
}
else if(Checkerboard[curx][cury] == RED_PAO)
{
selpiece = RED_PAO;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
status ++;
}
else if(Checkerboard[curx][cury] == RED_ZU)
{
selpiece = RED_ZU;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
status ++;
}
}
else if(status % 2 == 1 && Pstatus && !gameover)//黑方第二次点击响应的IF语句
{
if(Checkerboard[curx][cury] >=BLACK_JU && Checkerboard[curx][cury] <= BLACK_ZU)    //如果下次点击的是己方的棋子,则改变选中的棋子
{
m = curx;
n = cury;


//当下次点击是己方棋子时,重绘棋盘,将选定棋子的凸显效果转移至下一颗选定的棋子
CDC thmem5 ;
CClientDC dc(this);
thmem5.CreateCompatibleDC(&dc);
thmem5.SelectObject(m_board);
dc.BitBlt(0,0,460,525,&thmem5,0,0,SRCCOPY);
DoDraw();
if(Checkerboard[curx][cury] == BLACK_JU)
{
selpiece = BLACK_JU;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
}
else if(Checkerboard[curx][cury] == BLACK_MA)
{
selpiece = BLACK_MA;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
}
else if(Checkerboard[curx][cury] == BLACK_XIANG)
{
selpiece = BLACK_XIANG;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
}
else if(Checkerboard[curx][cury] == BLACK_SHI)
{
selpiece = BLACK_SHI;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
}
else if(Checkerboard[curx][cury] == BLACK_JIANG)
{
selpiece = BLACK_JIANG;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
}
else if(Checkerboard[curx][cury] == BLACK_PAO)
{
selpiece = BLACK_PAO;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
}
else if(Checkerboard[curx][cury] == BLACK_ZU)
{
selpiece = BLACK_ZU;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
}
}
else
{
if(selpiece == BLACK_JU)//如果选中的棋子是黑色车,则调用黑色车的move方法
{
PieceBlackJu BlackJu;
BlackJu.Tseatx = curx;//将第二次点击的坐标赋值给对象将来的坐标
BlackJu.Tseaty = cury;
BlackJu.seatx = m;//将第一次点击的坐标赋值给对象现在的坐标
BlackJu.seaty = n;
movevalue = BlackJu.Move(BlackJu);
}
else if(selpiece ==  BLACK_MA )       
{
PieceBlackMa BlackMa;
BlackMa.Tseatx = curx;
BlackMa.Tseaty = cury;
BlackMa.seatx = m;
BlackMa.seaty = n;
movevalue = BlackMa.Move(BlackMa);
}
else if(selpiece ==  BLACK_XIANG )       
{
PieceBlackXiang BlackXiang;
BlackXiang.Tseatx = curx;
BlackXiang.Tseaty = cury;
BlackXiang.seatx = m;
BlackXiang.seaty = n;
movevalue = BlackXiang.Move(BlackXiang);
}
else if(selpiece ==  BLACK_SHI )       
{
PieceBlackShi BlackShi;
BlackShi.Tseatx = curx;
BlackShi.Tseaty = cury;
BlackShi.seatx = m;
BlackShi.seaty = n;
movevalue = BlackShi.Move(BlackShi);
}
else if(selpiece ==  BLACK_JIANG )       
{
PieceBlackJiang BlackJiang;
BlackJiang.Tseatx = curx;
BlackJiang.Tseaty = cury;
BlackJiang.seatx = m;
BlackJiang.seaty = n;
movevalue = BlackJiang.Move(BlackJiang);
}
else if(selpiece ==  BLACK_ZU )       
{
PieceBlackZu BlackZu;
BlackZu.Tseatx = curx;
BlackZu.Tseaty = cury;
BlackZu.seatx = m;
BlackZu.seaty = n;
movevalue = BlackZu.Move(BlackZu);
}
else if(selpiece ==  BLACK_PAO )      
{
PieceBlackPao BlackPao;
BlackPao.Tseatx = curx;
BlackPao.Tseaty = cury;
BlackPao.seatx = m;
BlackPao.seaty = n;
movevalue = BlackPao.Move(BlackPao);
}
if(movevalue) //如果move方法返回的值为true则表示是合法操作
{
ChessPiece Judge;
for(i = 0; i < 9; i++)
for(j = 0; j <10; j ++)
{
TemCheckerboard[i][j] = Checkerboard[i][j];
}
Checkerboard[curx][cury] = Checkerboard[m][n];//落子,用以前的坐标替换掉现在的坐标
Checkerboard[m][n] = 0;//将以前所在棋盘格状态置为0
status ++;

//重绘棋盘背景,实现棋子移动
CDC thmem2 ;
CClientDC dc(this);
thmem2.CreateCompatibleDC(&dc);
thmem2.SelectObject(m_board);
dc.BitBlt(0,0,460,525,&thmem2,0,0,SRCCOPY);

DoDraw();
GetDlgItem(IDC_HUIQI)->EnableWindow(true);
Judge.Judge();
ButtonColor();
Pstatus = !Pstatus;//切换下棋方
}
else
{
//MessageBox(TEXT("不能到达这里"),"出错啦!");
}
}
}
else if(status % 2 == 1 && !Pstatus && !gameover)
{
if(Checkerboard[curx][cury] >= RED_JU && Checkerboard[curx][cury] <= RED_ZU) //如果下次点击的是己方的棋子,则改变选中的棋子
{
m = curx;
n = cury;
CDC thmem6 ;
CClientDC dc(this);
thmem6.CreateCompatibleDC(&dc);
thmem6.SelectObject(m_board);
dc.BitBlt(0,0,460,525,&thmem6,0,0,SRCCOPY);
DoDraw();
if(Checkerboard[curx][cury] == RED_JU)
{
selpiece = RED_JU;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
}
else if(Checkerboard[curx][cury] == RED_MA)
{
selpiece = RED_MA;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
}
else if(Checkerboard[curx][cury] == RED_XIANG)
{
selpiece = RED_XIANG;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
}
else if(Checkerboard[curx][cury] == RED_SHI)
{
selpiece = RED_SHI;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
}
else if(Checkerboard[curx][cury] == RED_SHUAI)
{
selpiece = RED_SHUAI;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
}
else if(Checkerboard[curx][cury] == RED_PAO)
{
selpiece = RED_PAO;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
}
else if(Checkerboard[curx][cury] == RED_ZU)
{
selpiece = RED_ZU;
thmem4.SelectObject(m_select);
dc.BitBlt((m * 51)+2,(n * 51)+4,51,51,&thmem4,0,0,SRCAND);
}
}
else
{
if(selpiece == RED_JU)
{
PieceRedJu RedJu;
RedJu.Tseatx = curx;
RedJu.Tseaty = cury;
RedJu.seatx = m;
RedJu.seaty = n;
movevalue = RedJu.Move(RedJu);
}
else if(selpiece == RED_MA)            //生成红象对象
{
PieceRedMa RedMa;
RedMa.Tseatx = curx;
RedMa.Tseaty = cury;
RedMa.seatx = m;
RedMa.seaty = n;
movevalue = RedMa.Move(RedMa);
}
else if(selpiece == RED_XIANG)            //生成红象对象
{
PieceRedXiang RedXiang;
RedXiang.Tseatx = curx;
RedXiang.Tseaty = cury;
RedXiang.seatx = m;
RedXiang.seaty = n;
movevalue = RedXiang.Move(RedXiang);
}
else if(selpiece == RED_SHI)            //生成红象对象
{
PieceRedShi RedShi;
RedShi.Tseatx = curx;
RedShi.Tseaty = cury;
RedShi.seatx = m;
RedShi.seaty = n;
movevalue = RedShi.Move(RedShi);
}
else if(selpiece == RED_SHUAI)            //生成红象对象
{
PieceRedShuai RedShuai;
RedShuai.Tseatx = curx;
RedShuai.Tseaty = cury;
RedShuai.seatx = m;
RedShuai.seaty = n;
movevalue = RedShuai.Move(RedShuai);
}
else if(selpiece == RED_ZU)            //生成红象对象
{
PieceRedZu RedZu;
RedZu.Tseatx = curx;
RedZu.Tseaty = cury;
RedZu.seatx = m;
RedZu.seaty = n;
movevalue = RedZu.Move(RedZu);
}
else if(selpiece == RED_PAO)            //生成红象对象
{
PieceRedPao RedPao;
RedPao.Tseatx = curx;
RedPao.Tseaty = cury;
RedPao.seatx = m;
RedPao.seaty = n;
movevalue = RedPao.Move(RedPao);
}
if(movevalue)
{
ChessPiece Judge;
for(i = 0; i < 9; i++)
for(j = 0; j <10; j ++)
{
TemCheckerboard[i][j] = Checkerboard[i][j];
}
Checkerboard[curx][cury] = Checkerboard[m][n];//落子
Checkerboard[m][n] = 0;
status ++;

//重绘棋盘背景,实现棋子移动
CDC thmem2 ;
CClientDC dc(this);
thmem2.CreateCompatibleDC(&dc);
thmem2.SelectObject(m_board);
dc.BitBlt(0,0,460,525,&thmem2,0,0,SRCCOPY);

DoDraw();
GetDlgItem(IDC_HUIQI)->EnableWindow(true);
Judge.Judge();
ButtonColor();
Pstatus = !Pstatus;
}
else
{
//MessageBox(TEXT("不能到达这里"),"出错啦!");
}
}
}
}


//棋盘绘制函数
void CMyDlg::DoDraw()
{
CDC thmem1 ;
CClientDC dc(this);
thmem1.CreateCompatibleDC(&dc);
for(i = 0; i < 9; i ++)
for(j = 0; j < 10; j++)
{
switch(Checkerboard[i][j])
{
case BLACK_JU :
thmem1.SelectObject (m_back);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,MERGEPAINT);
thmem1.SelectObject(m_blackju);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,SRCAND);
break;
case BLACK_MA :
thmem1.SelectObject (m_back);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,MERGEPAINT);
thmem1.SelectObject(m_blackma);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,SRCAND);
break;
case BLACK_XIANG :
thmem1.SelectObject (m_back);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,MERGEPAINT);
thmem1.SelectObject(m_blackxiang);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,SRCAND);
break;
case BLACK_SHI :
thmem1.SelectObject (m_back);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,MERGEPAINT);
thmem1.SelectObject(m_blackshi);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,SRCAND);
break;
case BLACK_JIANG :
thmem1.SelectObject (m_back);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,MERGEPAINT);
thmem1.SelectObject(m_blackjiang);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,SRCAND);
break;
case BLACK_PAO :
thmem1.SelectObject (m_back);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,MERGEPAINT);
thmem1.SelectObject(m_blackpao);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,SRCAND);
break;
case BLACK_ZU :
thmem1.SelectObject (m_back);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,MERGEPAINT);
thmem1.SelectObject(m_blackzu);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,SRCAND);
break;
case RED_JU :
thmem1.SelectObject (m_back);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,MERGEPAINT);
thmem1.SelectObject(m_redju);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,SRCAND);
break;
case RED_MA :
thmem1.SelectObject (m_back);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,MERGEPAINT);
thmem1.SelectObject(m_redma);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,SRCAND);
break;
case RED_XIANG :
thmem1.SelectObject (m_back);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,MERGEPAINT);
thmem1.SelectObject(m_redxiang);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,SRCAND);
break;
case RED_SHI :
thmem1.SelectObject (m_back);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,MERGEPAINT);
thmem1.SelectObject(m_redshi);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,SRCAND);
break;
case RED_SHUAI :
thmem1.SelectObject (m_back);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,MERGEPAINT);
thmem1.SelectObject(m_redshuai);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,SRCAND);
break;
case RED_PAO :
thmem1.SelectObject (m_back);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,MERGEPAINT);
thmem1.SelectObject(m_redpao);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,SRCAND);
break;
case RED_ZU :
thmem1.SelectObject (m_back);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,MERGEPAINT);
thmem1.SelectObject(m_redzu);
dc.BitBlt((i * 51)+5,(j * 51)+7,45,45,&thmem1,0,0,SRCAND);
break;
default :
break;
}
}
}


HCURSOR CMyDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}


//换肤
void CMyDlg::Onchanges()  //开始按钮
{     
if(flag==1)
{

//下面是实现位图的画法 添加棋子
m_board->m_hObject  = (HBITMAP)::LoadImage (NULL,"./1/qipan.bmp",IMAGE_BITMAP,460,525,LR_LOADFROMFILE);
    m_blackma->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/blackma.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackju->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/blackju.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
    m_blackxiang->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/blackxiang.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackshi->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/blackshi.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackpao->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/blackpao.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackzu->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/blackzu.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackjiang->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/blackjiang.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);


m_redma->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/redma.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redju->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/redju.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
    m_redxiang->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/redxiang.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redshi->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/redshi.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redpao->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/redpao.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redzu->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/redzu.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redshuai->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/redshuai.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_select->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/selected.bmp",IMAGE_BITMAP,51,51,LR_LOADFROMFILE);
m_back->m_hObject = (HBITMAP)::LoadImage (NULL,"./1/mark.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
Onstart();
flag++;
}
else if(flag==2)
{
//下面是实现位图的画法 添加棋子
m_board->m_hObject  = (HBITMAP)::LoadImage (NULL,"./2/qipan.bmp",IMAGE_BITMAP,460,525,LR_LOADFROMFILE);
    m_blackma->m_hObject = (HBITMAP)::LoadImage (NULL,"./2/blackma.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackju->m_hObject = (HBITMAP)::LoadImage (NULL,"./2/blackju.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
    m_blackxiang->m_hObject = (HBITMAP)::LoadImage (NULL,"./2/blackxiang.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackshi->m_hObject = (HBITMAP)::LoadImage (NULL,"./2/blackshi.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackpao->m_hObject = (HBITMAP)::LoadImage (NULL,"./2/blackpao.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackzu->m_hObject = (HBITMAP)::LoadImage (NULL,"./2/blackzu.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackjiang->m_hObject = (HBITMAP)::LoadImage (NULL,"./2/blackjiang.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);


m_redma->m_hObject = (HBITMAP)::LoadImage (NULL,"./2/redma.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redju->m_hObject = (HBITMAP)::LoadImage (NULL,"./2/redju.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
    m_redxiang->m_hObject = (HBITMAP)::LoadImage (NULL,"./2/redxiang.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redshi->m_hObject = (HBITMAP)::LoadImage (NULL,"./2/redshi.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redpao->m_hObject = (HBITMAP)::LoadImage (NULL,"./2/redpao.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redzu->m_hObject = (HBITMAP)::LoadImage (NULL,"./2/redzu.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redshuai->m_hObject = (HBITMAP)::LoadImage (NULL,"./2/redshuai.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_select->m_hObject = (HBITMAP)::LoadImage (NULL,"./2/selected.bmp",IMAGE_BITMAP,51,51,LR_LOADFROMFILE);
m_back->m_hObject = (HBITMAP)::LoadImage (NULL,"./2/mark.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
Onstart();
flag++;
}
   else if(flag==3)
   {
    //下面是实现位图的画法 添加棋子
m_board->m_hObject  = (HBITMAP)::LoadImage (NULL,"./3/qipan.bmp",IMAGE_BITMAP,460,525,LR_LOADFROMFILE);
    m_blackma->m_hObject = (HBITMAP)::LoadImage (NULL,"./3/blackma.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackju->m_hObject = (HBITMAP)::LoadImage (NULL,"./3/blackju.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
    m_blackxiang->m_hObject = (HBITMAP)::LoadImage (NULL,"./3/blackxiang.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackshi->m_hObject = (HBITMAP)::LoadImage (NULL,"./3/blackshi.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackpao->m_hObject = (HBITMAP)::LoadImage (NULL,"./3/blackpao.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackzu->m_hObject = (HBITMAP)::LoadImage (NULL,"./3/blackzu.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_blackjiang->m_hObject = (HBITMAP)::LoadImage (NULL,"./3/blackjiang.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);


m_redma->m_hObject = (HBITMAP)::LoadImage (NULL,"./3/redma.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redju->m_hObject = (HBITMAP)::LoadImage (NULL,"./3/redju.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
    m_redxiang->m_hObject = (HBITMAP)::LoadImage (NULL,"./3/redxiang.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redshi->m_hObject = (HBITMAP)::LoadImage (NULL,"./3/redshi.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redpao->m_hObject = (HBITMAP)::LoadImage (NULL,"./3/redpao.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redzu->m_hObject = (HBITMAP)::LoadImage (NULL,"./3/redzu.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_redshuai->m_hObject = (HBITMAP)::LoadImage (NULL,"./3/redshuai.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_select->m_hObject = (HBITMAP)::LoadImage (NULL,"./3/selected.bmp",IMAGE_BITMAP,51,51,LR_LOADFROMFILE);
m_back->m_hObject = (HBITMAP)::LoadImage (NULL,"./3/mark.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
Onstart();
   flag=1;
   }
}
//点击开始响应的函数
void CMyDlg::Onstart()  //开始按钮
{
//flag++;
//重绘棋盘背景,实现棋子移动
CDC thmem2 ;
CClientDC dc(this);
thmem2.CreateCompatibleDC(&dc);
thmem2.SelectObject(m_board);
dc.BitBlt(0,0,460,525,&thmem2,0,0,SRCCOPY);
// 棋盘数组初始化 
for(j = 0; j < 10; j ++)
for(i = 0; i < 9; i ++)
{
if(j == 0) //初始化第0行棋盘
{
if(i < 5)
{
Checkerboard[i][j] = i + 1;//依次跟车马象所在棋格赋值为123
}
else
{
Checkerboard[i][j] = 9 - i;//依次跟将士象所在棋格赋值为543
}
}
else if(j == 2)
{
if(i == 1 || i == 7)
{
Checkerboard[i][j] = 6;
}
else
{
Checkerboard[i][j] = 0;//为第2行其他非跑所在棋格赋值为0
}
}
else if(j == 3)
{
if(i % 2 == 0)
{
Checkerboard[i][j] = 7;//为卒所在棋格赋值为7
}
else
{
Checkerboard[i][j] = 0;
}
}
else if(j == 6)
{
if(i % 2 == 0)
{
Checkerboard[i][j] = 14;
}
else
{
Checkerboard[i][j] = 0;
}
}
else if(j == 7)
{
if(i == 1 || i == 7)
{
Checkerboard[i][j] = 13;
}
else
{
Checkerboard[i][j] = 0;
}
}
else if(j == 9)
{
if(i < 5)
{
Checkerboard[i][j] = i + 8;
}
else
{
Checkerboard[i][j] = 16 - i;
}
}
else
{
Checkerboard[i][j] = 0;
}
}
status = 0; //用于区分第一次点击和第二次点击的变量
selpiece = 0; //用于记录点击选中的棋子的变量
Pstatus = false;//用于切换下棋方得变量
movevalue = false;//用于储存move方法返回的值
gameover = false;//用于判断游戏是否结束
GetDlgItem(IDC_RENSHU)->EnableWindow(true);
GetDlgItem(IDC_QIUHE)->EnableWindow(true);
GetDlgItem(IDC_HUIQI)->EnableWindow(true);
DoDraw();
}


 BOOL PieceBlackJu::Move(PieceBlackJu &BlackJu)
 {
int i, j;
int min, max;
if(BlackJu.seatx == BlackJu.Tseatx && BlackJu.seaty != BlackJu.Tseaty)
{
min = min(BlackJu.seaty,BlackJu.Tseaty);
max = max(BlackJu.seaty,BlackJu.Tseaty);
i = BlackJu.seatx;
for(j = min +1; j <= max; j ++)
{
if(j == max) //循环执行到最后,则表明中间没子
{
return true;
break;
}
  else if(Checkerboard[i][j] == 0)//路径上无棋子的情况
  {
continue;
  }
else //路径上有棋子的情况
{
return false;
break;
}
}
}
else if(BlackJu.seaty == BlackJu.Tseaty && BlackJu.seatx != BlackJu.Tseatx)
{
min = min(BlackJu.seatx,BlackJu.Tseatx);
max = max(BlackJu.seatx,BlackJu.Tseatx);
j = BlackJu.seaty;
for(i = min +1; i <= max; i ++)
{
if(i == max) //循环执行到最后,则返回最后一点的值
{
return true;
break;
}
  else if(Checkerboard[i][j] == 0)//路径上无棋子的情况
  {
  continue;
  }
else //路径上有棋子的情况
{
return false;
break;
}
}
}
else
{
return false;
}
 }


BOOL PieceRedJu::Move(PieceRedJu &RedJu)
 {
int i, j;
int min, max;
if(RedJu.seatx == RedJu.Tseatx && RedJu.seaty != RedJu.Tseaty)
{
min = min(RedJu.seaty,RedJu.Tseaty);
max = max(RedJu.seaty,RedJu.Tseaty);
i = RedJu.seatx;
for(j = min +1; j <= max; j ++)
{
if(j == max) //循环执行到最后,则表明中间无子
{
return true;
break;
}
  else if(Checkerboard[i][j] == 0)//路径上无棋子的情况
  {
  continue;
  }
else //路径上有棋子的情况
{
return false;
break;
}
}
}
else if(RedJu.seaty == RedJu.Tseaty && RedJu.seatx != RedJu.Tseatx)
{
min = min(RedJu.seatx,RedJu.Tseatx);
max = max(RedJu.seatx,RedJu.Tseatx);
j = RedJu.seaty;
for(i = min +1; i <= max; i ++)
{
if(i == max) //循环执行到最后,则返回最后一点的值
{
return true;
break;
}
  else if(Checkerboard[i][j] == 0)//路径上无棋子的情况
  {
  continue;
  }
else //路径上有棋子的情况
{
return false;
break;
}
}
}
else
{
return false;
}
 }




//红马的move()函数
 BOOL PieceRedMa::Move(PieceRedMa &RedMa)
 {
//(x,y)表示原来马的坐标;(Tx,Ty)表示马可能走的坐标
int x = RedMa.seatx;
int tx = RedMa.Tseatx;
int y = RedMa.seaty;
int ty = RedMa.Tseaty;


if(Checkerboard[tx][ty] >= 0 && Checkerboard[tx][ty] <= 7)//当(tx,ty)为空(用0表示)或黑子(1~7表示)时,可下
{
if(Checkerboard[x +1 ][y] == 0 && tx ==x + 2 && ty == y + 1)//(x+1,y)为空,(tx,ty)=(x+2,y+1)
{
return true;
/*个人观点:用如下代码代替上一句return语句,然后直接初始化棋盘或许可以实现棋盘重绘。
Checkerboard[tx][ty]==BLACK_MA;
Checkerboard[x][y]==0;
*/
}
else if(Checkerboard[x + 1][y] == 0 && tx == x + 2 && ty == y - 1)//(x+1,y)为空:表示不蹩马脚;(tx,ty)=(x+2,y-1):马走斜日
{
return true;
}
else if(Checkerboard[x - 1][y] == 0 && tx == x - 2 && ty == y + 1)//(x-1,y)为空,(tx,ty)=(x-2,y+1)
{
return true;
}
else if(Checkerboard[x - 1][y] == 0 && tx == x-2 && ty == y - 1)//(x-1,y)为空,(tx,ty)=(x-2,y-1)
{
return true;
}
else if(Checkerboard[x][y + 1] == 0 && tx == x + 1 && ty == y + 2)//(x,y+1)为空,(tx,ty)=(x+1,y+2)
{
return true;
}
else if(Checkerboard[x][y + 1] == 0 && tx == x - 1 && ty == y + 2)//(x,y+1)为空,(tx,ty)=(x-1,y+2)
{
return true;
}


else if(Checkerboard[x][y - 1] == 0 && tx == x + 1 && ty == y - 2)//(x,y-1)为空,(tx,ty)=(x+1,y-2)
{
return true;
}
else if(Checkerboard[x][y - 1] == 0 && tx == x - 1 && ty == y - 2)//(x,y-1)为空,(tx,ty)=(x-1,y-2)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
 }


 BOOL PieceBlackMa::Move(PieceBlackMa &BlackMa)
 {
//(x,y)表示原来黑马的坐标;(Tx,Ty)表示黑马可能走的坐标
int x = BlackMa.seatx;
int tx = BlackMa.Tseatx;
int y = BlackMa.seaty;
int ty = BlackMa.Tseaty;


if(Checkerboard[tx][ty] == 0 || (Checkerboard[tx][ty] >= 8 && Checkerboard[tx][ty] <= 14))
{
if(Checkerboard[x + 1][y] == 0 && tx == x + 2 && ty == y + 1)//(x+1,y)为空:表示不蹩马脚;(tx,ty)=(x+2,y-1):马走斜日
{
return true;
/*个人观点:用如下代码代替上一句return语句,然后直接初始化棋盘或许可以实现棋盘重绘。
Checkerboard[tx][ty]==BLACK_MA;
Checkerboard[x][y]==0;
*/
}
else if(Checkerboard[x + 1][y] == 0 && tx == x + 2 && ty == y - 1)//(x+1,y)为空,(tx,ty)=(x+2,y-1)
{
return true;
}
else if(Checkerboard[x - 1][y] == 0 && tx == x - 2 && ty == y + 1)//(x-1,y)为空,(tx,ty)=(x-2,y+1)
{
return true;
}
else if(Checkerboard[x - 1][y] == 0 && tx == x - 2 && ty == y - 1)//(x-1,y)为空,(tx,ty)=(x-2,y-1)
{
return true;
}
else if(Checkerboard[x][y + 1] == 0 && tx == x + 1 && ty == y + 2)//(x,y+1)为空,(tx,ty)=(x+1,y+2)
{
return true;
}
else if(Checkerboard[x][y + 1] == 0 && tx == x - 1 && ty == y + 2)//(x,y+1)为空,(tx,ty)=(x-1,y+2)
{
return true;
}


else if(Checkerboard[x][y - 1] == 0 && tx == x + 1 && ty == y - 2)//(x,y-1)为空,(tx,ty)=(x+1,y-2)
{
return true;
}
else if(Checkerboard[x][y - 1] == 0 && tx == x - 1 && ty == y - 2)//(x,y-1)为空,(tx,ty)=(x-1,y-2)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
 }


BOOL PieceBlackXiang::Move(PieceBlackXiang &BlackXiang)
{
  if(BlackXiang.Tseaty <= 4)                                //是否越界判断
  {


if((BlackXiang.Tseatx - BlackXiang.seatx) == 2 && (BlackXiang.Tseaty - BlackXiang.seaty) == 2)//坐标都增加的情况
{
if(Checkerboard[BlackXiang.seatx + 1][BlackXiang.seaty + 1] == 0)
{
return true;
}
else
{
return false;
}
}
else if((BlackXiang.Tseatx - BlackXiang.seatx) == 2 && (BlackXiang.Tseaty-BlackXiang.seaty) == -2)
{
if(Checkerboard[BlackXiang.seatx + 1][BlackXiang.seaty - 1] == 0)
{
return true;
}
else
{
return false;
}
}
else if((BlackXiang.Tseatx - BlackXiang.seatx) == -2 && (BlackXiang.Tseaty - BlackXiang.seaty) == 2)
{


if(Checkerboard[BlackXiang.seatx - 1][BlackXiang.seaty + 1] == 0)
{
return true;
}
else
{
return false;
}
}
else if((BlackXiang.Tseatx - BlackXiang.seatx) == -2 && (BlackXiang.Tseaty-BlackXiang.seaty) == -2)
{


if(Checkerboard[BlackXiang.seatx - 1][BlackXiang.seaty - 1] == 0)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
  }
  else
  {
 return false;
  }
}


BOOL PieceRedXiang::Move(PieceRedXiang &RedXiang)
{
  if(RedXiang.Tseaty >= 5)                                //是否越界判断
  {


if((RedXiang.Tseatx-RedXiang.seatx) == 2 && (RedXiang.Tseaty-RedXiang.seaty) == 2)//坐标都增加的情况
{
if(Checkerboard[RedXiang.seatx + 1][RedXiang.seaty + 1] == 0)
{
return true;
}
else
{
return false;
}
}
else if((RedXiang.Tseatx - RedXiang.seatx) == 2 && (RedXiang.Tseaty-RedXiang.seaty) == -2)
{
if(Checkerboard[RedXiang.seatx + 1][RedXiang.seaty-1] == 0)
{
return true;
}
else
{
return false;
}
}
else if((RedXiang.Tseatx - RedXiang.seatx) == -2 && (RedXiang.Tseaty - RedXiang.seaty) == 2)
{


if(Checkerboard[RedXiang.seatx - 1][RedXiang.seaty+1] == 0)
{
return true;
}
else
{
return false;
}
}
else if((RedXiang.Tseatx - RedXiang.seatx) == -2 && (RedXiang.Tseaty - RedXiang.seaty) == -2)
{


if(Checkerboard[RedXiang.seatx - 1][RedXiang.seaty-1] == 0)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
  }
  else
  {
 return false;
  }
}


//士的move方法
BOOL PieceRedShi::Move(PieceRedShi &RedShi)
{
if((abs(RedShi.seatx - RedShi.Tseatx) == 1) && (abs(RedShi.seaty - RedShi.Tseaty) == 1) && (RedShi.Tseatx >=3 && RedShi.Tseatx <=5 && RedShi.Tseaty >=7 && RedShi.Tseaty <= 9))
return true;
else
return false;
}
BOOL PieceBlackShi::Move(PieceBlackShi &BlackShi)

if((abs(BlackShi.seatx-BlackShi.Tseatx) ==1 ) && (abs(BlackShi.seaty - BlackShi.Tseaty) == 1) && (BlackShi.Tseatx >=3 && BlackShi.Tseatx <= 5 && BlackShi.Tseaty >= 0 && BlackShi.Tseaty <= 2)) 
return true;
else
return false;
}


//将的move方法
BOOL PieceRedShuai::Move(PieceRedShuai &RedShuai)
{
if((RedShuai.Tseatx==RedShuai.seatx) && (Checkerboard[RedShuai.Tseatx][RedShuai.Tseaty] == BLACK_JIANG ) ) 
{
 
  for(int i=RedShuai.seaty-1; i > RedShuai.Tseaty; i-- )
{
                  if( Checkerboard[RedShuai.Tseatx][i]!=0 )//中间有子
  {
  return false;
  break;
  }
 else if(i==(RedShuai.Tseaty+1))           //中间无子
  {
                        return true;
  }
}


}
   else if(RedShuai.Tseatx >= 3 && RedShuai.Tseatx <= 5 && RedShuai.Tseaty >= 7 && RedShuai.Tseaty <= 9)
{
if((abs(RedShuai.Tseatx - RedShuai.seatx) == 1 && (RedShuai.Tseaty == RedShuai.seaty)) || (abs(RedShuai.Tseaty - RedShuai.seaty) == 1) && (RedShuai.Tseatx == RedShuai.seatx))
{
return true;
}
else
{
return false;
}
}
else 
{
return false;
}
}
BOOL PieceBlackJiang::Move(PieceBlackJiang &BlackJiang)
{
//老头子见面
    if((BlackJiang.Tseatx == BlackJiang.seatx) && (Checkerboard[BlackJiang.Tseatx][BlackJiang.Tseaty] == RED_SHUAI ) ) 
{
 
  for(int i = BlackJiang.seaty+1; i < BlackJiang.Tseaty; i ++ )
{
                  if(Checkerboard[BlackJiang.Tseatx][i] != 0 )//中间有子
  {
  return false;
  break;
  }
 else if(i == (BlackJiang.Tseaty-1))           //中间无子
  {
                        return true;
  }
  }
}
else if(BlackJiang.Tseatx >= 3 && BlackJiang.Tseatx <= 5 && BlackJiang.Tseaty >= 0 && BlackJiang.Tseaty <= 2)
{
if((abs(BlackJiang.Tseatx - BlackJiang.seatx) == 1 && (BlackJiang.Tseaty == BlackJiang.seaty)) || (abs(BlackJiang.Tseaty - BlackJiang.seaty) == 1) && (BlackJiang.Tseatx == BlackJiang.seatx))
{
return true;
}
else
{
return false;
}
}
else 
{
return false;
}
}




//卒的move方法
 BOOL PieceBlackZu::Move(PieceBlackZu &BlackZu)
{
if(BlackZu.Tseatx == BlackZu.seatx && BlackZu.Tseaty - BlackZu.seaty == 1)         //向前一步
{
   return true;
}
else if(BlackZu.Tseaty == BlackZu.seaty && abs(BlackZu.Tseatx - BlackZu.seatx) == 1)         //左右一步
{
   if(BlackZu.seaty >= 5 && BlackZu.seaty <= 9)           //过河
{
   return true;
}
else                             //没过河
{
   return false;
}
}
else                                 //既不是向前一步,也不是左右一步
{
   return false;
}
}


BOOL PieceRedZu::Move(PieceRedZu &RedZu)
{
if(RedZu.Tseatx == RedZu.seatx && RedZu.seaty - RedZu.Tseaty == 1)         //向前一步
{
   return true;
}
else if(RedZu.seaty == RedZu.Tseaty && abs(RedZu.seatx - RedZu.Tseatx) == 1)         //左右一步
{
   if(RedZu.seaty <= 4 && RedZu.seaty >= 0)             //过河
{
   return true;
}
else                             //没过河
{
   return false;
}
}
else                                 //既不是向前一步,也不是左右一步
{
   return false;
}
}


//炮的move方法
BOOL PieceBlackPao::Move(PieceBlackPao &BlackPao)
{
    int a,b;
int min,max,flag;
if(BlackPao.seatx == BlackPao.Tseatx && BlackPao.seaty != BlackPao.Tseaty)           //上下移动
{
   min = min(BlackPao.seaty , BlackPao.Tseaty);
max = max(BlackPao.seaty , BlackPao.Tseaty);
a = BlackPao.Tseatx;
flag = 0;
for(b = min + 1; b < max; b++)
   {
   if(Checkerboard[a][b] == 0)
{
   continue;
}
else
{
   flag++;
}
   }
}
else if(BlackPao.seatx != BlackPao.Tseatx && BlackPao.seaty == BlackPao.Tseaty)           //左右移动
{
   min = min(BlackPao.seatx , BlackPao.Tseatx);
max = max(BlackPao.seatx , BlackPao.Tseatx);
b = BlackPao.Tseaty;
flag = 0;
for(a = min + 1; a < max; a++)
   {
   if(Checkerboard[a][b] == 0)
{
   continue;
}
else
{
   flag++;
}
   }
}
else           //斜向移动
{
   return false;
}


a = BlackPao.Tseatx;
b = BlackPao.Tseaty;


if(flag == 1)           //中途有且只有一个棋子
{
   if(Checkerboard[a][b] != 0)           //新地址有对方的红色棋子
{
   return true;
}
else           //新地址没有棋子
{
   return false;
}
}
else           //中途没有棋子或不止一个棋子
{
   if(Checkerboard[a][b] != 0)           //新地址有棋子
{
   return false;
}
else           //新地址没有棋子
{
if(flag == 0)
{
  return true;
}
else
{
return false;
}
}
}
}


BOOL PieceRedPao::Move(PieceRedPao &RedPao)
{
    int a, b;
int min, max, flag;
if(RedPao.seatx == RedPao.Tseatx && RedPao.seaty != RedPao.Tseaty)           //上下移动
{
   min = min(RedPao.seaty, RedPao.Tseaty);
max = max(RedPao.seaty, RedPao.Tseaty);
a = RedPao.Tseatx;
flag = 0;
for(b = min + 1; b < max; b++)
   {
   if(Checkerboard[a][b] == 0)
{
   continue;
}
else
{
   flag++;
}
   }
}
else if(RedPao.seatx != RedPao.Tseatx && RedPao.seaty == RedPao.Tseaty)           //左右移动
{
   min = min(RedPao.seatx , RedPao.Tseatx);
max = max(RedPao.seatx , RedPao.Tseatx);
b = RedPao.Tseaty;
flag = 0;
for(a = min + 1; a < max; a++)
   {
   if(Checkerboard[a][b] == 0)
{
   continue;
}
else
{
   flag++;
}
   }
}
else           //斜向移动
{
   return false;
}


a = RedPao.Tseatx;
b = RedPao.Tseaty;


if(flag == 1)           //中途有且只有一个棋子
{
   if(Checkerboard[a][b] != 0)           //新地址有对方的黑色棋子
{
   return true;
}
else           //新地址没有棋子
{
   return false;
}
}
else           //中途没有棋子或不止一个棋子
{
   if(Checkerboard[a][b] != 0)           //新地址有棋子
{
   return false;
}
else           //新地址没有棋子
{
if(flag == 0)
{
  return true;
}
else
{
return false;
}
}
}
}


void ChessPiece::Judge()
{
int numjiang = 0, numshuai = 0;
for(i = 3; i <= 5; i++)
{
for(j = 0; j <= 2; j++)//扫描将所在区域
{
if(Checkerboard[i][j] == BLACK_JIANG)
{
numjiang ++;
break;
}
else if(Checkerboard[i][j] == RED_SHUAI)
{
numshuai ++;
break;
}
else
{
continue;
}
}
for(j = 7; j <= 9; j++)//扫描帅所在区域
{
if(Checkerboard[i][j] == 12)
{
numshuai ++;
break;
}
else if(Checkerboard[i][j] == 5)
{
numjiang ++;
break;
}
else
{
continue;
}
}
}
if(numjiang == 0)//如果将所在区域没有将的属性,则红方胜
{
MessageBox(TEXT("红方胜!"),"胜负已分");
gameover = true;
}
else if(numshuai == 0)//如果帅所在区域没有帅的属性,则黑方胜
{
MessageBox(TEXT("黑方胜!"),"胜负已分");
gameover = true;
}
else
{
//return true;
}
}


void CMyDlg::DoGaveUp()
{
if(Pstatus)
{
MessageBox(TEXT("黑方认输!"),"投降啦!");
gameover = true;
}
else
{
MessageBox(TEXT("红方认输!"),"投降啦!");
gameover = true;
}
ButtonColor();
}  


void CMyDlg::DoTie()
{
if(IDYES == AfxMessageBox("对方请求和棋,是否同意?",MB_YESNO))
  {
MessageBox(TEXT("双方和棋!"),"结果");
gameover = true;
GetDlgItem(ID_START)->EnableWindow(true);
// GetDlgItem(IDC_BUTTONC)->EnableWindow(true);

  }
else
{
MessageBox(TEXT("对方不同意和棋!"),"结果");
}
ButtonColor();
}


void CMyDlg::DoUndo()
{
if(IDYES == AfxMessageBox("对方请求悔棋,是否同意?",MB_YESNO))
{
for(i = 0; i < 9; i++)
for(j = 0; j <10; j ++)
{
Checkerboard[i][j] = TemCheckerboard[i][j];
}
CDC thmem7 ;
CClientDC dc(this);
thmem7.CreateCompatibleDC(&dc);
thmem7.SelectObject(m_board);
dc.BitBlt(0,0,460,525,&thmem7,0,0,SRCCOPY);
DoDraw();
GetDlgItem(IDC_HUIQI)->EnableWindow(false);
Pstatus = !Pstatus;
}
else
{
MessageBox(TEXT("对方不同意悔棋!"),"结果");
}
}


void CMyDlg::ButtonColor()
{
if(gameover)
{
GetDlgItem(IDC_RENSHU)->EnableWindow(false);
GetDlgItem(IDC_HUIQI)->EnableWindow(false);
GetDlgItem(IDC_QIUHE)->EnableWindow(false);
}
}




void CMyDlg::OnOK() 
{
// TODO: Add extra validation here

exit(0);
}


void CMyDlg::OnButton1() 
{
// TODO: Add your control notification handler code here

CDialog::OnCancel();
    CChange changedlg;
changedlg.DoModal();


}
0 0
原创粉丝点击