⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 这是用vc++编写的五子棋程序
💻
📖 第 1 页 / 共 2 页
字号:
					{
						 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 + -