📄
字号:
{
switch(win[1][k])
{
case 1:
ccgrade[i][j] +=5;
break;
case 2:
ccgrade[i][j] +=50;
break;
case 3:
ccgrade[i][j] +=100;
break;
case 4:
ccgrade[i][j] +=400;
break;
}
}
}
if(start)
{
//选择计算机开始落子的位子
if( board[7][7] == 2)
{
m = 7;
n = 7;
}
else{
m = 8 ;
n = 8;
}
start = false;
}
else
{
for(i= 0 ; i<14 ; i++)
for( j = 0 ; j<14;j++)
if(board[i][j] ==2)
{
//以下是选择计算机权值最大的点,和当时的权值
if(ccgrade[i][j] >= cgrade)
{
cgrade = ccgrade[i][j];
mat = i;
nat = j;
}
//以下是选择个人权值最大的点,和当时的权值
if(ppgrade[i][j] >= pgrade)
{
pgrade = ppgrade[i][j];
mde = i;
nde = j;
}
}
//看计算机最大的值跟个人最大的值那个大,如果计算机大的话,那就进攻
if(cgrade >= pgrade) //for attack;
{
m = mat;
n = nat;
}
//否则的话那就防守
else
{
m = mde;
n = nde;
}
}
cgrade = 0 ;
pgrade = 0 ;
board[m][n] = 1; //paste the computer chess in this position;
ccount ++;
if((ccount ==98 )&&(pcount ==98))
{
tie = true;
over = true;
}
//跟人下好一个棋后所做的处理是一致的
for( i= 0 ; i<480 ; i++)
{
if(ctable[m][n][i]&&win[1][i] !=8 )
win[1][i]++;
if(ptable[m][n][i])
{
ptable[m][n][i] = false;
win[0][i] = 8;
}
}
player = true; //call the player to start
computer = false;
}
void CMyDlg::dostep()
{
// TODO: Add your message handler code here and/or call default
CDC thmem2 ; //thmem3
CClientDC dc(this);
thmem2.CreateCompatibleDC(&dc);
// thmem3.CreateCompatibleDC(&dc);
int ii,jj,kk;
if(!over)
{
if(computer)
Computer();
for(i=0 ; i<=1 ;i++)
for(j=0 ; j<480 ; j++)
{
if(win[i][j] == 5)// 看是否5子连书了,是的话,用红色的棋子显示以下,然后打出一句话
if(i==0)
{ //人赢了
pwin = true;
over = true;
for(ii= 0 ; ii <=13 ;ii++)
for(jj = 0 ; jj <=13 ;jj++)
if(ptable[ii][jj][j] == true)
{
thmem2.SelectObject(m_temp);
dc.BitBlt(jj*20+25,ii*20+15,20,20,&thmem2,0,0,MERGEPAINT);
thmem2.SelectObject(m_red);
dc.BitBlt(jj*20+25,ii*20+15,20,20,&thmem2,0,0,SRCAND);
}
// MessageBox("恭喜你,你赢了");
for(ii= 0 ; ii <10000 ; ii++)
for(jj = 0 ; jj <30000 ; jj++);
break;
}
else
{
//计算机赢了
cwin = true;
over = true;
for(ii= 0 ; ii <=13 ;ii++)
for(jj = 0 ; jj <=13 ;jj++)
if(ctable[ii][jj][j] == true)
{
thmem2.SelectObject (m_temp);
dc.BitBlt(jj*20+25,ii*20+15,20,20,&thmem2,0,0,MERGEPAINT);
thmem2.SelectObject (m_red);
dc.BitBlt(jj*20+25,ii*20+15,20,20,&thmem2,0,0,SRCAND);
}
// MessageBox("你输了 ,要继续请从新开始!");
for(ii= 0 ; ii <10000 ; ii++)
for(jj = 0 ; jj <15000 ; jj++);
break;
}
if(over)
break;
}
}
//没有五子连书的情况的下,那就简单的把子显示一下了
for(i = 0 ; i <=13 ; i++)
for( j = 0 ; j<= 13 ; j++)
{
if(board[i][j]==0)
{
thmem2.SelectObject (m_temp);
dc.BitBlt(j*20+25,i*20+15,20,20,&thmem2,0,0,MERGEPAINT);
thmem2.SelectObject (m_black);
dc.BitBlt (j*20+25,i*20+15,20,20,&thmem2,0,0,SRCAND);
// m_byColour = white ;
// UpdataData(FALSE);
for(ii= 0 ; ii <1000 ; ii++)
for(jj = 0 ; jj <1000 ; jj++);
// dc.TextOut (50,400," 。。。。。。。。。。该你下了。。。。。。。。。。。");
}
if(board[i][j] == 1)
{
thmem2.SelectObject (m_temp);
dc.BitBlt(j*20+25,i*20+15,20,20,&thmem2,0,0,MERGEPAINT);
thmem2.SelectObject (m_white);
dc.BitBlt (j*20+25,i*20+15,20,20,&thmem2,0,0,SRCAND);
m_byColour = black;
// UpdateData();
for(ii= 0 ; ii <1000 ; ii++)
for(jj = 0 ; jj <1000 ; jj++);
}
}
//人赢,打出这句话
if(pwin)
{ MessageBox("看来你还挺聪明的嘛,继续努力吧");
// dc.TextOut (50,360,"你赢了,按下restart键,重新开始!");
// KillTimer(1);
}
// 计算机赢,打出这句话
if(cwin)
{ MessageBox("看来你是水平还比较差,不服再来!!!!");
//dc.TextOut (50,360,"你输了,按下restart键,重新开始!");
// KillTimer(1);
}
// CDialog::OnTimer(nIDEvent);
}
//自己改变光标的显示
BOOL CMyDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
CPoint point, pt;
::GetCursorPos(&point);
ScreenToClient(&point);
if (point.y>=15 && point.x>=25 && point.y <= 315 && point.x <=325&& !over)
{
::SetCursor(AfxGetApp()->LoadCursor(m_byColour ? IDC_BLACK_CURSOR:IDC_WHITE_CURSOR));
return TRUE;
}
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
/*BOOL CMyDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}*/
//当点击重新开始是的所作的工作
void CMyDlg::Onrestart()
{
// TODO: Add your control notification handler code here
for(i = 0 ; i<14; i++)
for(j= 0 ;j <14 ;j++)
board[i][j] = 2;
for(i = 0 ; i <14 ; i++)
for(j=0 ; j <10 ; j++)
{
for( k = 0 ; k <5 ;k++)
{
ptable[j+k][i][count] = true;
ctable[j+k][i][count] = true;
}
count ++;
}
for(i = 0 ; i <14 ; i++)
for(j=0 ; j <10 ; j++)
{
for( k = 0 ; k <5 ;k++)
{
ptable[i][j+k][count] = true;
ctable[i][j+k][count] = true;
}
count ++;
}
for(i = 0 ; i <10; i++)
for(j=0 ; j <10 ; j++)
{
for( k = 0 ; k <5 ;k++)
{
ptable[j+k][i+k][count] = true;
ctable[j+k][i+k][count] = true;
}
count ++;
}
for(i = 0 ; i <10 ; i++)
for(j=13 ; j >= 4 ; j--)
{
for( k = 0 ; k <5 ;k++)
{
ptable[j-k][i+k][count] = true;
ctable[j-k][i+k][count] = true;
}
count ++;
}
//说明 在这里到底是人先下还是计算机先下,可以自己设定
pwin = false;
cwin = false;
player = true;
over = false;
computer = false;
cgrade = 0 ;
pgrade = 0 ;
for(i = 0 ;i <14; i++)
for(j = 0 ; j <14 ; j++)
{ ppgrade[i][j] = 0 ;
ccgrade[i][j] = 0 ;
}
for(i=0 ; i <=1 ;i++)
for(j=0 ; j<480 ; j++)
win[i][j] = 0 ;
count = 0 ;
CDC thmem2 ; //thmem3
CClientDC dc(this);
thmem2.CreateCompatibleDC(&dc);
thmem2.SelectObject(m_board);
dc.BitBlt (0,0,320,320,&thmem2,0,0,SRCCOPY);
Invalidate(false);
}
//点击开始时弹出一个对话框,内容为你让你执黑先下
void CMyDlg::Onstart()
{
MessageBox("让 你 执 黑 先 下 ");
m_byColour = black;
// TODO: Add your control notification handler code here
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -