围棋程序 提子算法 WIN32 API

//围棋算法 ,利用一个围棋类来完成,最后的是一个围棋的提子算法。在WIN32 API中编写,这只是围棋类的代码,如果想得到所有代码和.exe文件,请到网站:  fyyuan.5166.info  中下载。作者:袁飞艳 

#include <strstrea.h>
#include <math.h>
#define  max_num   361    //ÆåÅÌÖÐËùÓеãµÄ¸öÊý
#define  length    19    //ÆåÅ̵ÄÐÐÊýÓëÁÐÊý
static int step=0;     //²½Êý
static int SX[200],SY[200];   //¼Ç¼ÒÑÏÂÆå×Ó×ø±ê
static int blacknum=0,whitenum=0; //ÓÃÀ´±êʶÿɫÆå×Óϵ½µÚ¼¸ÊÖ
static int beatnum=0,weatnum=0;  //±íʾÿɫÆå×ÓÌá¶Ô·½×ӵĴÎÊý

//¼Ç¼Æå×ÓµÄλÖã¬Ìá×Óº¯ÊýֻʹÓÃ
typedef struct positon
{
 int row;
 int col;
}Pos;

//Á´Õ»£¬ÓÃÓÚ»ØËݲéÕÒÊÇ·ñ»¹ÓÐÓ뵱ǰ×ÓÁ¬³É´®µÄͬɫÆå×Ó
typedef struct  stack
 {
  int row;
  int col;
  struct stack *link;   
 }Sqstack;


//Ò»¸öÁ´±í£¬´æ·Å¿ÉÄÜûÆøµÄ×Ó£¬¼´±»ÌáÈ¡µÄÆå×Ó
typedef struct LNode
{
 int row;
 int col;
 struct LNode *next;
}LNode;

//ÔÚ»ØËÝʱ£¬Îª·ÀÖ¹Öظ´£¬ÉèµÄ·ÃÎʱêÖ¾
int visited[length+1][length+1];

/*----------------------------------------------ΧÆåÀඨÒå------------------------------------------*/
class WqQP{
protected:
    int QP[21][21]; //ÆåÅÌ:ÄÚ²¿´ÓQP[1][1]µ½QP[19][19],ÆäÓàΪÍⲿ
    int xPos,yPos; //Êó±ê×ø±ê
 int xP,yP;  //ÆåÅÌ×ø±ê
public:
    WqQP(){   //¹¹Ô캯Êý,ÆåÅ̳õʼ»¯,²¢¶Ôÿ¸öÆå×ÓµÄÆø½øÐгõʼ»¯
  for(int i=1;i<=19;i++)
   for(int j=1;j<=19;j++)
   {QP[i][j]=0;}

  for(int j=0;j<21;j++)
  {
   QP[0][j]=100;
   QP[20][j]=100;
   QP[j][0]=100;
   QP[j][20]=100;
  }
 
 }
 void drawQP(HINSTANCE,HDC,int,int ,int );   //»­ÆåÅÌ
 void drawQP0(HINSTANCE,HDC,int,int,int,int);  //Ìá×ÓʱÖØ»­
 void drawQPRepeat(HINSTANCE,HDC,int,int,int);  //°ÑÌá×ÓλÖø²¸Ç
 void drawBQZ(HINSTANCE,HDC,int,int,int);   //»­ºÚÆå×Ó
 void drawWQZ(HINSTANCE,HDC,int,int,int);   //»­°×Æå×Ó
 void drawQZ(HDC,int,int,int);      //»­Æå×Ó
 void drawQZB(HDC xxx,int xx,int yy,int);   //¸øµ±Ç°Æå×Ó»­ºì±ß
 void transSB(int,int,int);       //½«Êó±ê×ø±ê»»ËãΪÆåÅ̸ñµã×ø±ê
    int XX(){return xP;}        //µÃµ½ÆåÅÌ×ø±ê
 int YY(){return yP;}        //µÃµ½ÆåÅÌ×ø±ê
    int getQP(int i,int j){return QP[i][j];}   //µÃµ½ÆåÅ̵ã(i,j)µÄ״̬£º°××Ó1£¬ºÚ×Ó-1£¬¿Õ0
    void putQP(int i,int j,int n){QP[i][j]=n;}   //ÔÚÆåÅ̵ã(i,j)¸³Öµn£º°××Ón=1£¬ºÚ×Ón=-1£¬¿Õn=0
 void push(Sqstack *,int ,int );      //½øÕ»²Ù×÷
 void pop(Sqstack *);        //³öÕ»²Ù×÷
 int research(Pos*,int);        //²éÕÒ
 
 void play1(HINSTANCE,HWND,HDC,int,int,int,int);  //Á½ÈËÏÂÆå
 void killQZ(HINSTANCE,HWND,HDC,int,int,int,int,int,int); //Ìá×ßËÀ×Ó
 
};
WqQP wqqp;//Éú³ÉÆåÅ̶ÔÏóʵÀý,¸øÆåÅÌÄÚ²¿¸³0£¬Íⲿ¸³100


//**********ÀàWqQPµÄ³ÉÔ±º¯Êý¶¨Ò壺******************************
/*------------------------------------------»­ÆåÅ̽çÃ溯ÊýdrawQP------------------------------------------*/
void WqQP::drawQP(HINSTANCE hInstance,HDC hdc,int t,int cxClient,int cyClient)
{

 int i;
 char temp[50];  //ÁÙʱ×Ö·ûÊý×飬ÓÃÓÚת»»Êä³ö
 //create pens
 HPEN LinePen = CreatePen(PS_SOLID,1,RGB(35,71,107));
 HPEN rectPen = CreatePen(PS_SOLID,1,RGB(0,0,0));
 HPEN OldPen = NULL;

 //create brush
 HBRUSH hBrush = CreateSolidBrush(RGB(216,153,26));
 HBRUSH hBrush1= CreateSolidBrush(RGB(180,133,0));
 HBRUSH hBrush2= CreateSolidBrush(RGB(35,71,107));
 HBRUSH OldBrush = NULL;

 //create help font
 //¸Ãº¯Êý´´½¨Ò»ÖÖÓÐÌØÊâÐÔµÄÂß¼­×ÖÌ壬´ËÂß¼­×ÖÌå¿ÉÒÔÔÚºóÃæ±»ÈκÎÉ豸ѡÔñ
 HFONT w_FontShow1 = CreateFont(25,0,0,0,FW_NORMAL,FALSE,FALSE,FALSE,
   GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
   DEFAULT_QUALITY,FIXED_PITCH | FF_MODERN,"¿¬Ìå_GB2312");
 HFONT w_FontShow3 = CreateFont(18,0,0,0,FW_NORMAL,FALSE,FALSE,FALSE,
   GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
   DEFAULT_QUALITY,FIXED_PITCH | FF_MODERN,"ÐÂËÎÌå");
 HFONT w_fontTitle = CreateFont(50,0,0,0,FW_NORMAL,FALSE,FALSE,FALSE,
   GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
   DEFAULT_QUALITY,FIXED_PITCH | FF_MODERN,"»ªÎIJÊÔÆ");
 HFONT oldFont = NULL;
 //»­ÆåÅÌ×ó°ë²¿·Ö
 OldPen   = (HPEN)SelectObject(hdc,rectPen);   
 OldBrush = (HBRUSH)SelectObject (hdc, hBrush) ;
 Rectangle(hdc,0,0,cyClient,cyClient);
 //»­ÆåÅÌÓҰ벿·Ö
 OldBrush = (HBRUSH)SelectObject(hdc,hBrush1);
 Rectangle(hdc,cyClient,0,cxClient,cyClient);
 
 //»­ÆåÅÌÏߺÍËıߵÄ×Ö·û±êºÅ
 OldPen = (HPEN)SelectObject(hdc,LinePen); 
 for(i=1; i<20; i++)
 {
  itoa(i,temp,10);
  SetBkColor(hdc,RGB(216,153,26));     //Éè±êºÅ×ÖÌå±³¾°£¬ÓëÆåÅ̱³¾°Ïàͬ
  TextOut(hdc,t-18,i*t-8,temp,strlen(temp));   //×ó±ß±êºÅ
  TextOut(hdc,t*19+5,i*t-8,temp,strlen(temp)); //Óұ߱êºÅ   
  //ÀûÓÃASCIIÂ룬Êä³öÉÏϱêºÅ
  temp[0]=i+64;  
  TextOut(hdc,i*t-5,t-22,temp,1);      //ÉϱêºÅ
  TextOut(hdc,i*t-5,19*t+5,temp,1);    //ϱêºÅ
  SetBkColor(hdc,RGB(255,255,255));     //»¹Ô­×ÖÌå±³¾°
  //»­ÆåÅÌÏß
  MoveToEx(hdc,i*t,t,NULL);       
  LineTo(hdc,i*t,19*t+1);   
  MoveToEx(hdc,t,i*t,NULL);
  LineTo(hdc,19*t+1,i*t); 
 }//for
 
 for(i=0; i<3; i++)
 {
  //»­ÆåÅÌÖеľŸöÐÇ룬ÐÇ볤¿í·Ö±ðΪ6
  OldBrush = (HBRUSH)SelectObject(hdc,hBrush2);    
  Rectangle(hdc,4*t-3,(4+6*i)*t-3,4*t+3,(4+6*i)*t+3);
  Rectangle(hdc,10*t-3,(4+6*i)*t-3,10*t+3,(4+6*i)*t+3);
  Rectangle(hdc,16*t-3,(4+6*i)*t-3,16*t+3,(4+6*i)*t+3);   
 }
 //ÓÒ²àÎÄ×Ö˵Ã÷
 SetBkColor(hdc,RGB(180,133,0));   //ÉèÎÄ×Ö±³¾°ÓëÆåÅÌÓҲ౳¾°Ïàͬ
 sprintf(temp,"Χ Æå");
 SetTextColor(hdc,RGB(0,136,184));
 oldFont = (HFONT)SelectObject(hdc,w_fontTitle);
 TextOut(hdc,cyClient+(cxClient-cyClient)/4,30,temp,strlen(temp)); 
 
 SetTextColor(hdc,RGB(121,220,225));
 sprintf(temp,"°´ space ¼üÖØпªÊ¼"); 
 oldFont = (HFONT)SelectObject(hdc,w_FontShow3);
 TextOut(hdc,cyClient+(cxClient-cyClient)/20,cyClient/5,temp,strlen(temp));

 sprintf(temp,"ºÚ ·½");
 SetTextColor(hdc,RGB(0,0,0));
 oldFont = (HFONT)SelectObject(hdc,w_FontShow1);
 TextOut(hdc,cyClient+(cxClient-cyClient)/2,7*(cyClient/20)-10,temp,strlen(temp));
 sprintf(temp,"°× ·½");
 SetTextColor(hdc,RGB(255,255,255));
 oldFont = (HFONT)SelectObject(hdc,w_FontShow1);
 TextOut(hdc,cyClient+(cxClient-cyClient)/2,12*(cyClient/20)-10,temp,strlen(temp));

 sprintf(temp,"µÚ    ÊÖ");
 SetTextColor(hdc,RGB(0,199,246));
 TextOut(hdc,cyClient+(cxClient-cyClient)/3,9*(cyClient/20),temp,strlen(temp));
 TextOut(hdc,cyClient+(cxClient-cyClient)/3,14*(cyClient/20),temp,strlen(temp));
 sprintf(temp,"Ìá×Ó   ´Î");
 TextOut(hdc,cyClient+(cxClient-cyClient)/3,10*(cyClient/20),temp,strlen(temp));
 TextOut(hdc,cyClient+(cxClient-cyClient)/3,15*(cyClient/20),temp,strlen(temp));

 SetTextColor(hdc,RGB(0,0,0));                  //»¹Ô­×ÖÌåÑÕÉ«
 SetBkColor(hdc,RGB(255,255,255));      //»¹Ô­×ÖÌå±³¾°
 SelectObject(hdc,GetStockObject(SYSTEM_FONT)); //»¹Ô­ÏµÍ³×ÖÌå´óС 


 //³õʼ»¯Ìáʾ:ÏÔʾÆåͲ
 static HBITMAP   hBitmap1,hBitmap2,hOldBitmap;
 static BITMAP  bmpinfo;
 static int       cxBitmap,cyBitmap;
 static HDC       hdcBackBuffer;
 hBitmap1 = (HBITMAP)LoadImage(hInstance,"whitepan.BMP",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); 
 hBitmap2 = (HBITMAP)LoadImage(hInstance,"blackpan.BMP",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); 
 hdcBackBuffer  = CreateCompatibleDC (NULL) ;//ÉêÇ뻺´æ¿Õ¼ä
 //Ë¢ÐÂʱ¸ù¾Ýµ±Ç°²½ÊýstepÅжÏÓ¦¸ÃÏÔʾʲôÆåͲ
 if(step%2==1)
 {
  GetObject (hBitmap1, sizeof (BITMAP), &bmpinfo) ;
  cxBitmap = bmpinfo.bmWidth ;
  cyBitmap = bmpinfo.bmHeight ;
  hOldBitmap=(HBITMAP)SelectObject(hdcBackBuffer,hBitmap1);
  StretchBlt (hdc,22*(cyClient/20)-(cyClient/20)/2,12*(cyClient/20)-(cyClient/20)/2,3*(cyClient/20)/2,3*(cyClient/20)/2,hdcBackBuffer,0,0,cxBitmap,cyBitmap,SRCCOPY);
 }
 else
 {
  GetObject (hBitmap2, sizeof (BITMAP), &bmpinfo) ;
  cxBitmap = bmpinfo.bmWidth ;
  cyBitmap = bmpinfo.bmHeight ;
  hOldBitmap=(HBITMAP)SelectObject(hdcBackBuffer,hBitmap2);
  StretchBlt (hdc,22*(cyClient/20)-(cyClient/20)/2,7*(cyClient/20)-(cyClient/20)/2,3*(cyClient/20)/2,3*(cyClient/20)/2,hdcBackBuffer,0,0,cxBitmap,cyBitmap,SRCCOPY);
 }
 //³õʼ»¯ÆåÅÌ£¬½çÃæ´óС»¯Ê±µ÷Ó㬶ÔÆå×ÓÖØ»­

 for( i=1;i<=19;i++)
    for(int j=1;j<=19;j++)
    {
     if(QP[i][j]==1) drawWQZ(hInstance,hdc,i,j,t);
     if(QP[i][j]==-1)drawBQZ(hInstance,hdc,i,j,t);
    }
 //ÖØ»­µ±Ç°Æå×Ó±êÖ¾
 if(step>0)
 drawQZB(hdc,SX[step-1],SY[step-1],cyClient/20);
  

 // ³õʼ»¯ÏÔʾµÚ¼¸ÊÖ
 itoa(whitenum,temp,10); 
 SetBkColor(hdc,RGB(180,133,0));  
 TextOut(hdc,cyClient+(cxClient-cyClient)/3+55,9*(cyClient/20),temp,strlen(temp));
 itoa(blacknum,temp,10);     
 TextOut(hdc,cyClient+(cxClient-cyClient)/3+55,14*(cyClient/20),temp,strlen(temp));
 // ³õʼ»¯ÏÔʾÌá×Ó´ÎÊý
 itoa(weatnum,temp,10); 
 TextOut(hdc,cyClient+(cxClient-cyClient)/3+55,15*(cyClient/20),temp,strlen(temp));
 itoa(beatnum,temp,10);     
 TextOut(hdc,cyClient+(cxClient-cyClient)/3+55,10*(cyClient/20),temp,strlen(temp));
 SetBkColor(hdc,RGB(255,255,255));
 //ÊÍ·ÅËùʹÓõÄ×ÊÔ´
     DeleteObject(LinePen);
  DeleteObject(rectPen);
  DeleteObject(OldPen);
  DeleteObject(hBrush);
  DeleteObject(hBrush1);
  DeleteObject(hBrush2);
  DeleteObject(OldBrush);
  DeleteObject(w_fontTitle);
  DeleteObject(w_FontShow3);
  DeleteObject(oldFont);
  DeleteObject(hBitmap2);
  DeleteDC(hdcBackBuffer);

  

}

/*---------------------------------------------ÖØ»­º¯ÊýdrawQP0----------------------------------------------*/

void WqQP::drawQP0(HINSTANCE hInstance,HDC hdc,int t,int cxClient,int cyClient,int w_count)
{
 int i,j;
 //µ±Ë¢ÐÂʱ£¬°ÑËùÓеIJÎÊý¶¼ÉèΪ0
 if(w_count==0)
 {
  for(i=1;i<=19;i++)
   for(j=1;j<=19;j++)
   {
    QP[i][j]=0;
   }
   step=0;
   blacknum= 0;
   whitenum= 0;
   beatnum = 0;
   weatnum = 0;
 }
 //µ±Ìá×Óʱ£¬ËùÓÐQP[i][j]Ϊ2,¼´ÎªÒªÌá×ßµÄ×Ó£¬¶ÔÆäλÖÃÀûÓÃdrawQPRepeatº¯Êý½øÐÐÖØ»­
 else{

  for(i=1;i<=19;i++)
     for(j=1;j<=19;j++)
     {
    if(QP[i][j]==2) drawQPRepeat(hInstance,hdc,t,i*t,j*t);
     }
    
  }
 

}

/*------------------------------------ÖØ»­Ìá×ÓµÄλÖÃdrawQP0------------------------------*/

void WqQP::drawQPRepeat(HINSTANCE hinstance,HDC hdc,int t,int x,int y)
{
 //create pens
 HPEN LinePen = CreatePen(PS_SOLID,1,RGB(35,71,107)); //ÆåÅÌÏßÑÕÉ«
 HPEN rectPen = CreatePen(PS_SOLID,1,RGB(216,153,26)); //¾ØÐαßÑÕÉ«
 HPEN OldPen = NULL;
 //create brush
 HBRUSH hBrush = CreateSolidBrush(RGB(216,153,26));  //¾ØÐÎÄÚ²¿ÑÕÉ«
 HBRUSH OldBrush = NULL;

 OldPen = (HPEN)SelectObject(hdc,rectPen);
 OldBrush = (HBRUSH)SelectObject(hdc,hBrush);
 Rectangle(hdc,x-t/2,y-t/2,x+t/2,y+t/2);     //»­¾ØÐΣ¬¸²¸ÇÆå×Ó
 
 OldPen = (HPEN)SelectObject(hdc,LinePen);
 char temp[6];//ÖØÊä±êºÅ
 //ÔÚ×î×ó±ßÇÒ²»ÊǽÇ
 if(x/t==1 && y/t!=1 && y/t!= 19)
 {
  MoveToEx(hdc,x,y,NULL);       
  LineTo(hdc,x+t/2+1,y); 
  MoveToEx(hdc,x,y-t/2-1,NULL);
  LineTo(hdc,x,y+t/2+1);
  itoa(y/t,temp,10);
  SetBkColor(hdc,RGB(216,153,26));     //Éè±êºÅ×ÖÌå±³¾°£¬ÓëÆåÅ̱³¾°Ïàͬ
   TextOut(hdc,t-18,y-8,temp,strlen(temp));   //ÖØ»­±¾Æå×Ó×ó±ß±êºÅ
 }
 //ÔÚ×îÓÒ±ßÇÒ²»ÊǽÇ
 else if(x/t==19 && y/t!=1 && y/t!= 19)
 {
  MoveToEx(hdc,x-t/2-1,y,NULL);       
  LineTo(hdc,x,y); 
  MoveToEx(hdc,x,y-t/2-1,NULL);
  LineTo(hdc,x,y+t/2+1);
  itoa(y/t,temp,10);
  SetBkColor(hdc,RGB(216,153,26));     //Éè±êºÅ×ÖÌå±³¾°£¬ÓëÆåÅ̱³¾°Ïàͬ
  TextOut(hdc,t*19+5,y-8,temp,strlen(temp));   //ÖØ»­±¾Æå×ÓÓұ߱êºÅ
 }
 //ÔÚ×îÉϱßÇÒ²»ÊǽÇ
 else if(y/t==1 && x/t!=1 && x/t!= 19)
 {
  MoveToEx(hdc,x-t/2-1,y,NULL);       
  LineTo(hdc,x+t/2+1,y); 
  MoveToEx(hdc,x,y,NULL);
  LineTo(hdc,x,y+t/2+1);
  temp[0]=x/t+64;
  SetBkColor(hdc,RGB(216,153,26));
  TextOut(hdc,x-5,t-22,temp,1);      //ÖØ»­±¾Æå×ÓÉϱêºÅ
 }
 //ÔÚ×îϱßÇÒ²»ÊǽÇ
 else if(y/t==19 && x/t!=1 && x/t!= 19)
 {
  MoveToEx(hdc,x-t/2-1,y,NULL);       
  LineTo(hdc,x+t/2+1,y); 
  MoveToEx(hdc,x,y-t/2-1,NULL);
  LineTo(hdc,x,y);
  temp[0]=x/t+64;
  SetBkColor(hdc,RGB(216,153,26));
  TextOut(hdc,x-5,19*t+5,temp,1);      //ÖØ»­±¾Æå×ÓϱêºÅ
 }
 //ÔÚ×óÉϽÇ
 else if (x/t==1 && y/t==1) 
 { 
  MoveToEx(hdc,x,y,NULL);       
  LineTo(hdc,x+t/2+1,y); 
  MoveToEx(hdc,x,y,NULL);
  LineTo(hdc,x,y+t/2+1);  
  sprintf(temp,"1");
  SetBkColor(hdc,RGB(216,153,26));     //Éè±êºÅ×ÖÌå±³¾°£¬ÓëÆåÅ̱³¾°Ïàͬ
   TextOut(hdc,t-18,y-8,temp,strlen(temp));   //ÖØ»­±¾Æå×Ó×ó±ß±êºÅ
  sprintf(temp,"A");         //ÖØ»­±¾Æå×ÓÉϱ߱êºÅ
  TextOut(hdc,x-5,t-22,temp,1);
 }
 //µãÔÚÓÒÉϽÇ
 else if (x/t==19 && y/t==1) 
 { 
  MoveToEx(hdc,x-t/2-1,y,NULL);       
  LineTo(hdc,x,y); 
  MoveToEx(hdc,x,y,NULL);
  LineTo(hdc,x,y+t/2+1);
  itoa(y/t,temp,10);
  SetBkColor(hdc,RGB(216,153,26));     //Éè±êºÅ×ÖÌå±³¾°£¬ÓëÆåÅ̱³¾°Ïàͬ
  TextOut(hdc,t*19+5,y-8,temp,strlen(temp));   //ÖØ»­±¾Æå×ÓÓұ߱êºÅ
  sprintf(temp,"S");         //ÖØ»­±¾Æå×ÓÉϱ߱êºÅ
  TextOut(hdc,x-5,t-22,temp,1);
 }
 //µãÔÚÓÒϽÇ
 else if (x/t==19 && y/t==19) 
 { 
  MoveToEx(hdc,x-t/2-1,y,NULL);       
  LineTo(hdc,x,y); 
  MoveToEx(hdc,x,y-t/2-1,NULL);
  LineTo(hdc,x,y);
  itoa(y/t,temp,10);
  SetBkColor(hdc,RGB(216,153,26));     //Éè±êºÅ×ÖÌå±³¾°£¬ÓëÆåÅ̱³¾°Ïàͬ
  TextOut(hdc,t*19+5,y-8,temp,strlen(temp));   //ÖØ»­±¾Æå×ÓÓұ߱êºÅ
  temp[0]=x/t+64;
  TextOut(hdc,x-5,19*t+5,temp,1);      //ÖØ»­±¾Æå×ÓϱêºÅ
 }
 //µãÔÚ×óϽÇ
 else if (x/t==1 && y/t==19) 
 { 
  MoveToEx(hdc,x,y,NULL);       
  LineTo(hdc,x+t/2+1,y); 
  MoveToEx(hdc,x,y-t/2-1,NULL);
  LineTo(hdc,x,y);
  itoa(y/t,temp,10);
  SetBkColor(hdc,RGB(216,153,26));     //Éè±êºÅ×ÖÌå±³¾°£¬ÓëÆåÅ̱³¾°Ïàͬ
   TextOut(hdc,t-18,(y/t)*t-8,temp,strlen(temp));  //ÖØ»­±¾Æå×Ó×ó±ß±êºÅ
  temp[0]=x/t+64;
  TextOut(hdc,x-5,19*t+5,temp,1);      //ÖØ»­±¾Æå×ÓϱêºÅ
 }
 //²»ÔÚËÄÖÜ
 else
 {
  MoveToEx(hdc,x-t/2-1,y,NULL);       //»­¸²¸ÇµÄÆå×ÓλÖõĺᡢ×ÝÆåÅÌÏß
  LineTo(hdc,x+t/2+1,y); 
  MoveToEx(hdc,x,y-t/2-1,NULL);
  LineTo(hdc,x,y+t/2+1);
 }
 SetBkColor(hdc,RGB(255,255,255));     //»¹Ô­×ÖÌå±³¾°
 
 //ÊÍ·ÅËùÓÃ×ÊÔ´
 DeleteObject(LinePen);
 DeleteObject(rectPen);
 DeleteObject(hBrush);
 DeleteObject(OldBrush);
 DeleteObject(OldPen);

}


/*------------------------------------------»­°×Æå×Óº¯Êý-----------------------------------*/
void WqQP::drawWQZ(HINSTANCE hInstance,HDC hdc,int xx,int yy,int tt)
{
  
 PlaySound("1.wav", NULL, SND_FILENAME | SND_ASYNC );
 //ÔÚ×ø±ê£¨xx,yy£©ÏÔʾһ¸öÆå×Ó£¬ÓÃÒ»¸öºÚÆå×ÓͼƬ±íʾ
 static HBITMAP   hBitmap1,hOldBitmap;//ÔÚ×ø±ê£¨xx,yy£©ÏÔʾһ¸öÆå×Ó£¬ÓÃÒ»¸ö°×Æå×ÓͼƬ±íʾ
 static BITMAP  bmpinfo;
 static int cxBitmap,cyBitmap;
 static HDC hdcBackBuffer;
 hBitmap1 = (HBITMAP)LoadImage(hInstance,"white.BMP",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); 
 hdcBackBuffer  = CreateCompatibleDC (NULL) ;//ÉêÇ뻺´æ¿Õ¼ä
 GetObject (hBitmap1, sizeof (BITMAP), &bmpinfo) ;
 cxBitmap = bmpinfo.bmWidth ;
 cyBitmap = bmpinfo.bmHeight ;
 hOldBitmap=(HBITMAP)SelectObject(hdcBackBuffer,hBitmap1);
 StretchBlt (hdc,xx*tt-tt/2+3,yy*tt-tt/2+3,tt/2+10,tt/2+10,hdcBackBuffer,0,0,cxBitmap,cyBitmap,SRCCOPY);
 
 DeleteObject(hBitmap1);
 DeleteObject(hOldBitmap);
 DeleteDC(hdcBackBuffer);
}


/*------------------------------------------»­ºÚÆå×Óº¯Êý-----------------------------------*/
void WqQP::drawBQZ(HINSTANCE hInstance,HDC hdc,int xx,int yy,int tt)
{
 PlaySound("1.wav", NULL, SND_FILENAME | SND_ASYNC );
 static HBITMAP   hBitmap1,hOldBitmap;//ÔÚ×ø±ê£¨xx,yy£©ÏÔʾһ¸öÆå×Ó£¬ÓÃÒ»¸ö°×Æå×ÓͼƬ±íʾ
 static BITMAP  bmpinfo;
 static int cxBitmap,cyBitmap;
 static HDC hdcBackBuffer;
 hBitmap1 = (HBITMAP)LoadImage(hInstance,"black.BMP",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); 
 hdcBackBuffer  = CreateCompatibleDC (NULL) ;//ÉêÇ뻺´æ¿Õ¼ä
 GetObject (hBitmap1, sizeof (BITMAP), &bmpinfo) ;
 cxBitmap = bmpinfo.bmWidth ;
 cyBitmap = bmpinfo.bmHeight ;
 hOldBitmap = (HBITMAP)SelectObject(hdcBackBuffer,hBitmap1);
 StretchBlt (hdc,xx*tt-tt/2+3,yy*tt-tt/2+3,tt/2+8,tt/2+8,hdcBackBuffer,0,0,cxBitmap,cyBitmap,SRCCOPY);
 
 DeleteObject(hBitmap1);
 DeleteObject(hOldBitmap);
 DeleteDC(hdcBackBuffer);
}

/*------------------------------------------¶Ôµ±Ç°Æå×Ó×ö¡°Ê®¡±×Ö±ê¼Ç-----------------------------------*/
void WqQP::drawQZB(HDC xxx,int xx,int yy,int tt)
{
    static int  fnPenStyle       = PS_SOLID;
 static int  nPenWidth        = 2;
 static COLORREF crPenColor   = 255;//Ê®×ÖµÄÑÕÉ«:ºì
 HPEN h0Pen; 
 h0Pen = CreatePen(fnPenStyle, nPenWidth, crPenColor);
 SelectObject(xxx, h0Pen);
 //»æÖÆÊ®×Ö
 MoveToEx(xxx,xx*tt-5,yy*tt,NULL);
 LineTo(xxx,xx*tt+5,yy*tt);
 MoveToEx(xxx,xx*tt,yy*tt-5,NULL);
 LineTo(xxx,xx*tt,yy*tt+5);
    DeleteObject(h0Pen);
}


/*----------------------½«Êó±ê×ø±ê(xPos,yPos)»»ËãΪÆåÅ̸ñµã×ø±ê(xP,yP)-----------*/
void WqQP::transSB(int xPos,int yPos,int tt)
{
   if(xPos % tt > (tt/2)){xPos=xPos-xPos%tt+tt-1;}else {xPos=xPos-xPos%tt-1;}
      if(yPos % tt > (tt/2)){yPos=yPos-yPos%tt+tt-1;}else {yPos=yPos-yPos%tt-1;}
      xP=(xPos)/tt+1; yP=(yPos)/tt+1;
 
}

/*----------------------------------------¶þÈ˶ÔÞÄ---------------------------------------*/
void WqQP::play1(HINSTANCE hInstance,HWND hwnd,HDC hdc,int tt,int cxClient,int cyClient,int w_count)
{
 //ÎÄ×ÖÇøÏÂÆåÌáʾ(ºÚ,°×Æå×Ó) 
 //ÉêÇë»­±ÊÓë»­Ë¢×ÊÔ´
 char   temp[10]; 
 HPEN   hpen = CreatePen(PS_SOLID,0,RGB(180,133,0));
 HBRUSH hBrush1= CreateSolidBrush(RGB(180,133,0));
 HBRUSH hBrush2= CreateSolidBrush(RGB(35,71,107));
 HBRUSH OldBrush = NULL;
 HPEN   OldPen = NULL;
 //°Ñ°×ÆåͲÓëºÚÆåͲ³õʼ»¯µ½Á½¸öͼƬ¾ä±úÖУ¨hBitmap1,hBitmap2£©   
 static HBITMAP   hBitmap1,hBitmap2,hOldBitmap;
 static BITMAP  bmpinfo;
 static int   cxBitmap,cyBitmap;
 static HDC       hdcBackBuffer; 
 hBitmap1 = (HBITMAP)LoadImage(hInstance,"whitepan.BMP",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);  
 hBitmap2 = (HBITMAP)LoadImage(hInstance,"blackpan.BMP",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); 
 hdcBackBuffer  = CreateCompatibleDC (NULL) ;  //ÉêÇ뻺´æ¿Õ¼ä
    
 OldBrush = (HBRUSH)SelectObject(hdc,hBrush1);
 OldPen = (HPEN)SelectObject(hdc,hpen);
 SetBkColor(hdc,RGB(180,133,0));
 //Èç¹ûΪżÊý²½£¬Ó¦³ö°×Æ壬¹ÊÏÔʾ°×ÆåͲ
 if(step%2==0 && QP[XX()][YY()]==0)
 {     
  Rectangle(hdc,22*tt-tt,7*tt-tt,23*tt+tt,7*tt+tt); //°ÑÉÏÒ»´ÎÏÔʾµÄºÚÆåͲ¸²¸Ç
  //ÔÚËùÐèλÖÃÏÔʾ°×ÆåͲ
  GetObject (hBitmap1, sizeof (BITMAP), &bmpinfo) ;
  cxBitmap = bmpinfo.bmWidth ;
  cyBitmap = bmpinfo.bmHeight ;
  hOldBitmap=(HBITMAP)SelectObject(hdcBackBuffer,hBitmap1);
  StretchBlt (hdc,22*tt-tt/2,12*tt-tt/2,3*tt/2,3*tt/2,hdcBackBuffer,0,0,cxBitmap,cyBitmap,SRCCOPY);
  //°×Æå´ÎÊý¼Ó1,²¢½«ÆäÊä³ö   
  whitenum++;
  itoa(whitenum,temp,10);     
  TextOut(hdc,cyClient+(cxClient-cyClient)/3+55,9*(cyClient/20),temp,strlen(temp));
 }
 //Èç¹ûΪÆæÊý²½£¬ÔòÓ¦³öºÚÆ壬¹ÊÏÔʾºÚÆåͲ
 else if(step%2==1 && QP[XX()][YY()]==0)
 {     
  Rectangle(hdc,22*tt-tt,12*tt-tt,22*tt+tt,12*tt+tt);  °ÑÉÏÒ»´ÎÏÔʾµÄ°×ÆåͲ¸²¸Ç
  //ÔÚËùÐèλÖÃÏÔʾºÚÆåͲ
  GetObject (hBitmap2, sizeof (BITMAP), &bmpinfo) ;
  cxBitmap = bmpinfo.bmWidth ;
  cyBitmap = bmpinfo.bmHeight ;
  hOldBitmap=(HBITMAP)SelectObject(hdcBackBuffer,hBitmap2);
  StretchBlt (hdc,22*tt-tt/2,7*tt-tt/2,3*tt/2,3*tt/2,hdcBackBuffer,0,0,cxBitmap,cyBitmap,SRCCOPY);
  //ºÚÆå´ÎÊý¼Ó1,²¢½«ÆäÊä³ö
  blacknum++;
  itoa(blacknum,temp,10);
  TextOut(hdc,cyClient+(cxClient-cyClient)/3+55,14*(cyClient/20),temp,strlen(temp));
     
 }
 SetBkColor(hdc,RGB(255,255,255));
 //ÊÍ·Å×ÊÔ´
 DeleteObject(hpen);
 DeleteObject(OldPen);
 DeleteObject(hBrush1);
 DeleteObject(OldBrush);
 DeleteObject(hBitmap2);
 DeleteObject(hBitmap1);
 DeleteDC(hdcBackBuffer);
    
 //°Ñµ±Ç°µÄÊó±êËùÔÚÆåÅÌ×ø±ê´æ´¢   
 SX[step]=XX();SY[step]=YY();
 //żÊý²½£¬´ÓµÚstep=0²½¿ªÊ¼£¬ÏºÚÆå
 if(step%2==0 && QP[XX()][YY()]==0)
 {
  //ÉÏÒ»²½ÊÇÏÔʾµÄ°×Æ壬ÖØ»­Ò»´Î¸²¸ÇÉϴε±Ç°Æå×Ӻ조ʮ¡±×ּǺÅ,step=0ʱ²»¸²¸Ç
  if(step>1)
   drawWQZ(hInstance,hdc,SX[step-1],SY[step-1],tt);
  drawBQZ(hInstance,hdc,XX(),YY(),tt);//»­ºÚ×Ó
  drawQZB(hdc,XX(),YY(),tt);//»­ºì±ê¼Ç£¬±íʾµ±Ç°Æå×Ó
  putQP(XX(),YY(),-1);
  ++step;
  //µ÷ÓÃÌá×Óº¯Êý£¬¿´ÊÇ·ñ¿É¶Ô°×Æå½øÐÐÌá×Ó
  killQZ(hInstance,hwnd,hdc,SX[step-1],SY[step-1],tt,cxClient,cyClient,w_count);
 }
 //ÆæÊý²½£¬Ï°×Æå
 else if(step%2==1 && QP[XX()][YY()]==0)
 {
  //ÉÏÒ»²½ÏÔʾºÚÆ壬ÖØ»­Ò»´Î¸²¸ÇÉϴε±Ç°Æå×Ӻ조ʮ¡±×ּǺŠ 
  drawBQZ(hInstance,hdc,SX[step-1],SY[step-1],tt);        
  drawWQZ(hInstance,hdc,XX(),YY(),tt);//»­°××Ó
  drawQZB(hdc,XX(),YY(),tt);//»­ºì±ê¼Ç£¬±íʾµ±Ç°Æå×Ó
  putQP(XX(),YY(),1);
  ++step; 
  //µ÷ÓÃÌá×Óº¯Êý£¬¿´ÊÇ·ñ¿É¶ÔºÚÆå½øÐÐÌá×Ó
  killQZ(hInstance,hwnd,hdc,SX[step-1],SY[step-1],tt,cxClient,cyClient,w_count);
 }   
}

/*----------------------------------------Ìá×ÓËã·¨---------------------------------------*/

LNode *p1,*p2,*head;  //¶¨ÒåÁ´±í±äÁ¿
Sqstack *t,*q,*top;   //¶¨ÒåÁ´Õ»±äÁ¿
Pos *s = (Pos *) malloc (sizeof(Pos));  //ÉêÇëÒ»¸ö½áµã¿Õ¼ä

void WqQP::killQZ(HINSTANCE hInstance,HWND hwnd,HDC hdc,int sx,int sy,int tt,int cxClient,int cyClient,int w_count)
{  
 //¶ÔÁ´±í³õʼ»¯
 head = (LNode *) malloc (sizeof (LNode));//Í·½áµã 
 head->next = NULL;
 p1 = head;
 //¶ÔÁ´Õ»³õʼ»¯
 t=(Sqstack *) malloc (sizeof(Sqstack));
 t->link=NULL;
 q = t;
 //´æ·Åµ±Ç°ËùÏÂÆå×ÓÖÜΧµÄ²»Í¬É«Æå×Ó
 int aa[20]; //´æÆäºá¡¢×Ý×ø±ê
 int count=0;
 int i;
 int tag;     //±íʾµ±Ç°ËùÏÂÆå×ÓÈç°×Æå 1,ºÚÆå -1
 int temp;     //µ±Ç°²½Êý
    char temp0[10],temp1[10]; //ת»»Êý×Ö£¬ÓÃÓÚÊä³ö
 int flag=0;
 temp=step-1;
 if((temp%2==0) && (temp>0)) //Õâ²½ÊÇϵĺÚÆå
  tag=-1;
 else //Õâ²½ÊÇϵİ×Æå
  tag=1;
 //³õʼ»¯aaÊý×é
 for(i=0; i<10; i++)
  aa[i]=0;

 //¶Ôµ±Ç°ËùÏÂÆå×ÓµÄËÄÖܽøÐÐÅжϣ¬ÈôÓÐÓëÆ䲻ͬɫµÄÆå×Ó£¬½«Æäºá¡¢×Ý×ø±ê´æÈëaaÊý×éÖÐ
 if(QP[sx-1][sy]==(-1)*tag) { aa[count++]=sx-1;aa[count++]=sy;}
 if(QP[sx+1][sy]==(-1)*tag) { aa[count++]=sx+1;aa[count++]=sy;}
 if(QP[sx][sy-1]==(-1)*tag) { aa[count++]=sx;aa[count++]=sy-1;}
 if(QP[sx][sy+1]==(-1)*tag) { aa[count++]=sx;aa[count++]=sy+1;}
 
 //¶ÔÆäÖеÄÿ¸ö²»Í¬É«Æå×Ó¶¼½øÐмì²é£¬¿´ÄÜ·ñÂú×ãÌá×ÓÌõ¼þ
  i=0;  
  while(aa[i]>0)
  { 
  //µ±Ç°Æå×ÓËÄÖܵÄÆå×Ó¶¼ÉèΪδ·ÃÎʹý,ΪÁË·ÀÖ¹Ò»¸öÆå×ÓͬʱÂú×ãÁ½¸ö´®µÄÌõ¼þ¡£
  for(int ii=1; ii<20; ii++)
   for(int jj=1; jj<20; jj++)
    visited[ii][jj]=0;

   //È¡³öÒ»¸öÆå×Ó×ø±ê
   s->row = aa[i++];
   s->col = aa[i++];  
      //½«×ø±êÈëÕ»
   push(q,s->row,s->col);
   visited[s->row][s->col]=1;
   
   flag=research(s,tag);
   
   while(flag==1) //ËÄÖܶ¼Âú,ÇÒÓÐÓëÆäÏàÁ¬µÄͬɫÆå×Ó
   {
    push(q,s->row,s->col);
    visited[s->row][s->col]=1;
    flag=research(s,tag);    
   }

   if(flag==-1)  //»¹ÓÐÆø
   {
    head->next = NULL;
    p1 = head;
    t->link=NULL;
    q = t;
    continue;
   }
   //ÀûÓÃÕ»½øÐеݹé²Ù×÷
   while(q->link!=t )
   {
    pop(q);
    s->row = q->row;
    s->col = q->col;
    flag=research(s,tag);
    
    while(flag==1)
    {
     push(q,s->row,s->col);
     visited[s->row][s->col]=1;
     flag=research(s,tag);    
    }
   
    if(flag==-1)
    {
     head->next = NULL;
     p1=head;
     t->link=NULL;
     q = t;
     break ;
    }
   }
  //ÈôÕÒµ½Âú×ãÌá×ÓÌõ¼þµÄÆå×Ó£¬Ôò½øÐÐÌá×Ó²Ù×÷
  
   //°ÑÐèÌá×ÓµÄQPÖµ¸ÄΪ2
   p1=head;
   while(p1->next!=NULL)
   {
    int i,j;
    p2=p1->next;
    p1=p2->next;
    head->next=p1;
    i = p2->row;
    j = p2->col;
    QP[i][j]=2;
    p1=head;    
   }
   head->next = NULL;
   p1=head;
   t->link=NULL;
   q = t;
   
    //ÓÃÓÚÊä³öÌá×Ó´ÎÊý
   if(flag==0)
   {   
    if(tag==1)
     weatnum++;itoa(beatnum,temp0,10);
    if(tag == -1)
     beatnum++;itoa(weatnum,temp1,10);
        
    SetBkColor(hdc,RGB(180,133,0));
    itoa(beatnum,temp1,10);
    itoa(weatnum,temp0,10);
    TextOut(hdc,cyClient+(cxClient-cyClient)/3+55,10*(cyClient/20),temp1,strlen(temp1));
    TextOut(hdc,cyClient+(cxClient-cyClient)/3+55,15*(cyClient/20),temp0,strlen(temp0));
    SetBkColor(hdc,RGB(255,255,255));   
   }
    //ÀûÓÃdrawQP0º¯Êý¶ÔÆÁÄ»½øÐÐˢУ¬¼´°ÑûÆøµÄ×ÓÌáµô
    drawQP0(hInstance,hdc,tt,cxClient,cyClient,w_count);
    drawQZB(hdc,sx,sy,tt); //±ê¼Çµ±Ç°Æå×Ó
   
  }
  return;
}
 
 //²éѯ,¿´Æå×ÓsËÄÖܵÄÇé¿ö£¬ÓÐÆø£¬·µ»Ø£­1,ÎÞÆø·µ»Ø0,»¹ÓÐͬɫÆå×Ó·µ»Ø1
int WqQP::research(Pos *s, int tag)
{
 int row,col;
 row = s->row;
 col = s->col;
 if((QP[row-1][col]==0 ) || (QP[row+1][col]==0) || (QP[row][col-1]==0 ) || (QP[row][col+1]==0)
  ||(QP[row-1][col]==2 ) || (QP[row+1][col]==2) || (QP[row][col-1]==2 ) || (QP[row][col+1]==2)
  )
 {
  return -1; //Õâ¸öÆå×ÓËÄÖÜÖÁÉÙÓÐÒ»±ßΪ¿Õ
 } 
 else
 { 
  if((QP[row-1][col]==(-1)*tag) && (visited[row-1][col]!=1))
  {
   s->row = row-1;
   s->col = col;
   return 1;
  }
  
    if((QP[row+1][col]==(-1)*tag) && (visited[row+1][col]!=1))
  { 
   s->row = row+1;
   s->col = col;
   return 1;
  }

    if((QP[row][col-1]==(-1)*tag) && (visited[row][col-1]!=1))
  {
   s->row = row;
   s->col = col-1;
   return 1;
  }
  
    if((QP[row][col+1]==(-1)*tag) && (visited[row][col+1]!=1))
  {
   s->row = row;
   s->col = col+1;
   return 1;
  }
  }
 
    return 0;  //Æå×ÓËÄÖܶ¼²»Îª¿Õ£¬ÇÒ¶¼Óës²»Í¬É«£¬»òͬɫµ«ÒѾ­·ÃÎʹý

}

//ÈëÕ»
void WqQP::push(Sqstack *qq,int i,int j)//ÈëÕ»²Ù×÷

 
 p2   = (LNode *) malloc (sizeof (LNode));//Ôö¼ÓµÄ½áµã
 top  = (Sqstack *)malloc(sizeof(Sqstack));
 

 top->row=i;
 top->col=j; 
    top->link=q;
 q=top;

 p2->row = i;
 p2->col = j;
 p2->next= p1->next;
 p1->next= p2;

 
}

void WqQP::pop(Sqstack *qq)//³öÕ»²Ù×÷
{
 Sqstack *top;
 if(q->link!=NULL)
 {
  top=q;
  q=q->link;  
  free(top);
 }
 else
 {  
  exit(0);
 }
 
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值