FiveChess.c
上传用户:cssyzk
上传日期:2022-06-30
资源大小:54k
文件大小:14k
源码类别:

棋牌游戏

开发平台:

C/C++

  1. // DEMO7_18.CPP Windowed DirectDraw Demo
  2. //#define WIN32_LEAN_AND_MEAN  // just say no to MFC
  3. //#include <windows.h>   // include important windows stuff
  4. //#include <windowsx.h> 
  5. //#include <iostream.h> // include important C/C++ stuff
  6. #include <stdlib.h>
  7. #include <stdio.h> 
  8. #include <math.h>
  9. //#include "resource.h"
  10. //void MainWnd_Paint(HWND hwnd);
  11. #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
  12. #define WINDOW_CLASS_NAME "WINCLASS1"
  13. #define WINDOW_WIDTH    382
  14. #define WINDOW_HEIGHT   422
  15. #define MM()    MessageBox(my_hwnd,"sdlfk","sldkfj",MB_OK | MB_ICONQUESTION)
  16. #define Poit_Sco         10
  17. #define Step_Sco          20
  18. #define Left_Sco         0.6
  19. #define Down_Sco         11//减分
  20. #define Down_Sco2        7//减分2
  21. #define Sco_50           1000
  22. #define Sco_51           900
  23. #define Sco_40           800
  24. #define Sco_41           700
  25. #define Sco_40_0         600
  26. #define Sco_41_0         500
  27. //#define 
  28. int my_sco[20];
  29. typedef struct sss
  30.  {int stat;//2是Computer,是白色的。1是玩家,是黑色的。0就是空。
  31.  }my_stru,*lpmy_stru;
  32. my_stru bb[15][15]; 
  33. typedef struct sssj
  34. {int sco;
  35.  int stat;
  36. }sco_stru,*lpsco_stru;
  37. sco_stru p_bb[15][15],c_bb[15][15];
  38. int xx[15],ww[20],mouse_x,mouse_y,p_num=0,c_num=0;
  39. int my_stat=0;//my_stat=0表示到电脑走了 my_stat=1表示到玩家走了
  40. HWND      my_hwnd        =  NULL; // globally track main window
  41. HINSTANCE my_hinstance   =  NULL; // globally track hinstance
  42. #include "ShowBmp.h"
  43. extern void* qipanBmp, *whiteBmp, *blackBmp;
  44. //void ShowBMP(char* bmpcontent, int XPos, int YPos);
  45. //void ShowBMP(void* bmpcontent, int XPos, int YPos, bool fromfile);
  46. int Pain_back(int i,int j)
  47. {
  48. ShowBMP(blackBmp, xx[j],xx[i], 0);
  49. return (0);
  50. }
  51. int Pain_white(int i,int j)
  52. ShowBMP(whiteBmp,xx[j],xx[i], 0);
  53. return (0);
  54. }
  55. ///////////////////////////////////////////////////////////
  56. int My_work(int mouse_x,int mouse_y)
  57. {  int flag=0,i,j;
  58. for(i=0;i<15;i++)
  59.  {if((mouse_y>=xx[i]) & (mouse_y<=xx[i]+21))
  60.      {flag=1;
  61.          break;
  62.  }
  63.   }
  64. if(i==15)//如果mouse_y不在选定范畴,则返回0(即要用户重新输入)
  65.    return (0);
  66. if(flag==1)
  67.  {for(j=0;j<15;j++)
  68.       {flag=0;
  69.        if((mouse_x>=xx[j]) & (mouse_x<=xx[j]+21))
  70.       {flag=1;
  71.        break;
  72.   }
  73.   }
  74.     }
  75.    if(flag==0)
  76. return (0);//用户输入不在范畴内,重新输入,返回0
  77.    else 
  78.    {if(bb[i][j].stat==0)
  79.    {
  80. bb[i][j].stat=1;
  81.     Pain_back(i,j);
  82. }
  83.    else 
  84.    return (0);
  85.    }
  86.    p_num++;
  87.    return (1);//用户输入合法,返回1
  88. }
  89. int Check_11(int i,int j,int stat)
  90. {
  91. int b;
  92. int cx,cy,mm,num;
  93.  for (mm=0;mm<8;mm++)
  94.    { switch (mm)
  95.       {case 0:
  96.          cx=-1;cy=0;break;
  97.    case 1:
  98.  cx=-1;cy=1;break;
  99.    case 2:
  100.  cx=0;cy=1;break;
  101.    case 3:
  102.  cx=1;cy=1;break;
  103.    case 4:
  104.  cx=1;cy=0;break;
  105.    case 5:
  106.  cx=1;cy=-1;break;
  107.    case 6:
  108.  cx=0;cy=-1;break;
  109.    case 7:
  110.   cx=-1;cy=-1;break;
  111.    default:break;
  112.   }
  113.  num=1;
  114.     for(b=1;b<5;b++)
  115.      {if((bb[i+b*cx][j+b*cy].stat==stat) & (((i+b*cx)>=0) &((i+b*cx)<15)) & (((j+b*cy)>=0) &((j+b*cy)<15)))
  116.          num++;
  117.  }
  118.  if(num==5)
  119.         return(stat);
  120.    }
  121.  return 0;
  122. // return stat;
  123. }
  124. int Check_win()
  125. {
  126. int flag=0;
  127. int i,j;
  128. for(i=0;i<15;i++)
  129. {
  130. for(j=0;j<15;j++)
  131. {
  132. if(bb[i][j].stat!=0)
  133. {
  134. if(Check_11(i,j,bb[i][j].stat)==bb[i][j].stat)    
  135. return(bb[i][j].stat);     
  136. }
  137. }
  138. }
  139. return (0);
  140. }
  141. int sco_mm(int m,int n,int stat)
  142. { int cx,cy,mm;
  143.   int nn,nnn;
  144.   int i,j;
  145.   for (mm=0;mm<8;mm++)
  146.    { switch (mm)
  147.       {case 0:cx=-1;cy=0;break;
  148.    case 1:cx=-1;cy=1;break;
  149.    case 2:cx=0;cy=1;break;
  150.    case 3:cx=1;cy=1;break;
  151.    case 4:cx=1;cy=0;break;
  152.    case 5:cx=1;cy=-1;break;
  153.    case 6:cx=0;cy=-1;break;
  154.    case 7:cx=-1;cy=-1;break;
  155.    default:break;
  156.   }
  157. nnn=2;nn=Poit_Sco;
  158. i=m;j=n;
  159.     i+=cx;j+=cy;
  160.     if(stat==2)
  161.     {
  162.       while(i>=0 && i<15 && j>=0 && j<15 && nnn>0)
  163.         {  if(c_bb[i][j].stat==stat)
  164.              {//nn+=Step_Sco;
  165.             if (nnn==2)
  166.        nn+=Step_Sco;
  167.             else if (nnn==1)
  168.       {c_bb[i-cx][j-cy].sco+=10;
  169.         nnn=-3;//不做了,退出。
  170.       }
  171.      }
  172.         else if(c_bb[i][j].stat==0)
  173.            {if(nnn<2)
  174.             nn=(int)(nn*Left_Sco);
  175.      c_bb[i][j].sco+=nn;
  176.                  nnn--;
  177.        }
  178.         else 
  179.         nnn=-3;//不做了,退出。
  180.         i+=cx;
  181.         j+=cy;
  182. }
  183.       
  184.      }
  185.     else if(stat==1)
  186.     {
  187.        while(i>=0 && i<15 && j>=0 && j<15 && nnn>0)
  188.          {  if(p_bb[i][j].stat==stat)
  189.               {//nn+=Step_Sco;
  190.             if (nnn==2)
  191.        nn+=Step_Sco;
  192.             else if (nnn==1)
  193.       {p_bb[i-cx][j-cy].sco+=10;
  194.        nnn=-3;
  195.       }
  196.   }
  197.         else if(p_bb[i][j].stat==0)
  198.            {if(nnn<2)
  199.            nn=(int)(nn*Left_Sco);
  200.      p_bb[i][j].sco+=nn;
  201.                  nnn--;
  202.         }
  203.          else 
  204.         nnn=-3;//不做了,退出。
  205.        i+=cx;
  206.    j+=cy;
  207.  }
  208. }
  209.    }
  210. return (0);
  211. }
  212. int my_sco_add(int m,int n)
  213. { int cx,cy,mm;
  214.   int nn,nnn;
  215.   int i,j;
  216.   for (mm=0;mm<8;mm++)
  217.    { switch (mm)
  218.       {case 0:cx=-1;cy=0;break;
  219.    case 1:cx=-1;cy=1;break;
  220.    case 2:cx=0;cy=1;break;
  221.    case 3:cx=1;cy=1;break;
  222.    case 4:cx=1;cy=0;break;
  223.    case 5:cx=1;cy=-1;break;
  224.    case 6:cx=0;cy=-1;break;
  225.    case 7:cx=-1;cy=-1;break;
  226.    default:break;
  227.   }
  228.      i=m;j=n;
  229.  nn=0;
  230.  i+=ww[8]*cx;j+=ww[8]*cx;
  231.  //if(i<0 | i>14 | j<0 | j>14)
  232. // continue;
  233.  for(nnn=0;nnn<ww[9];nnn++)
  234.     {  if(c_bb[i][j].stat==ww[nnn])
  235.              nn++;
  236.        else 
  237.   break;
  238.        i+=cx;j+=cy;
  239.    if(i<0 || i>14 || j<0 || j>14)
  240.        break;
  241. }
  242.  if(nn==ww[9])//说明配对成功;下一步是加分
  243.     { i=m;j=n;
  244.       i+=ww[8]*cx;j+=ww[8]*cx;
  245.   if(ww[19]==2)//要求加电脑的分,c_bb[i][j].sco+=?--------
  246.      {for(nnn=0;nnn<ww[9];nnn++)
  247.           {c_bb[i][j].sco+=ww[10+nnn];
  248.                    i+=cx;j+=cy;
  249.   }
  250.  }
  251.   else if (ww[19]==1) //要求加玩家的分,p_bb[i][j].sco+=?--------
  252.      {for(nnn=0;nnn<ww[9];nnn++)
  253.           { p_bb[i][j].sco+=ww[10+nnn];
  254.         i+=cx;j+=cy;
  255.   }
  256.  }
  257. }//----end 加分---------
  258.    }//----end  for (mm=0;mm<8;mm++)------
  259.    return (1);
  260. }
  261. int Computer_think()
  262. {int i,j;
  263. for( i=0;i<15;i++)
  264.     {for( j=0;j<15;j++)
  265.         {p_bb[i][j].sco=0;
  266.          p_bb[i][j].stat=bb[i][j].stat;
  267.  c_bb[i][j].sco=0;
  268.  c_bb[i][j].stat=bb[i][j].stat;
  269. }
  270. }
  271.  for( i=0;i<15;i++)
  272.    {for(j=0;j<15;j++)
  273.        {if(bb[i][j].stat!=0)
  274.          {
  275.  sco_mm(i,j,bb[i][j].stat);
  276.  /* Sco_0_j(i,j,bb[i][j].stat);
  277.           Sco_1_j(i,j,bb[i][j].stat);
  278.           Sco_2_j(i,j,bb[i][j].stat);
  279.           Sco_3_j(i,j,bb[i][j].stat);
  280.           Sco_4_j(i,j,bb[i][j].stat);
  281.           Sco_5_j(i,j,bb[i][j].stat);
  282.           Sco_6_j(i,j,bb[i][j].stat);
  283.           Sco_7_j(i,j,bb[i][j].stat);*/
  284. //关于四个子的--------------------------------我我我我空---  
  285.   memset(ww,0,20*sizeof(int));
  286.   ww[0]=2; ww[1]=2; ww[2]=2; ww[3]=2; ww[4]=0;   ww[8]=0; ww[9]=5;
  287.                                       ww[14]=Sco_50;      ww[19]=2;
  288.           my_sco_add(i,j);
  289.   memset(ww,0,20*sizeof(int));
  290.   ww[0]=1; ww[1]=1; ww[2]=1; ww[3]=1; ww[4]=0;   ww[8]=0;ww[9]=5;
  291.                                               ww[14]=Sco_51;     ww[19]=1;
  292.           my_sco_add(i,j);
  293. //------------------------------我我我空我-------------
  294.   memset(ww,0,20*sizeof(int));
  295.   ww[0]=2;  ww[1]=2;  ww[2]=2;  ww[3]=0;       ww[4]=2; ww[8]=0; ww[9]=5;
  296.                                 ww[13]=Sco_50;                   ww[19]=2;
  297.           my_sco_add(i,j);
  298.   memset(ww,0,20*sizeof(int));
  299.   ww[0]=1;  ww[1]=1;  ww[2]=1;  ww[3]=0;       ww[4]=1; ww[8]=0; ww[9]=5;
  300.                                 ww[13]=Sco_51;                   ww[19]=1;
  301.           my_sco_add(i,j);
  302. //------------------------------------------我我空我我---------
  303.   memset(ww,0,20*sizeof(int));
  304.   ww[0]=2;  ww[1]=2;  ww[2]=0;         ww[3]=2;  ww[4]=2; ww[8]=0; ww[9]=5;
  305.                       ww[12]=Sco_50/2;                             ww[19]=2;
  306.           my_sco_add(i,j);
  307.           memset(ww,0,20*sizeof(int));
  308.   ww[0]=1;ww[1]=1;ww[2]=0;ww[3]=1;ww[4]=1;ww[8]=0;ww[9]=5;
  309.                   ww[14]=Sco_51/2;                  ww[19]=1;
  310.           my_sco_add(i,j);
  311. //end  关于四子----------------------------------
  312. //关于三子--------------------------------------------------
  313. //---------------------------------------------敌我我我空-----------
  314.   memset(ww,0,20*sizeof(int));
  315.   ww[0]=2;ww[1]=2;ww[2]=2;ww[3]=0;ww[8]=0;ww[9]=4;
  316.                           ww[13]=Sco_40;  ww[19]=2;
  317.           my_sco_add(i,j);
  318.   memset(ww,0,20*sizeof(int));
  319.   ww[0]=1;ww[1]=1;ww[2]=1;ww[3]=0;ww[8]=0;ww[9]=4;
  320.                           ww[13]=Sco_41;  ww[19]=1;
  321.           my_sco_add(i,j);
  322. //----------------------------------------------敌我我我空敌------
  323.   memset(ww,0,20*sizeof(int));
  324.   ww[0]=1;ww[1]=2;ww[2]=2;ww[3]=2;ww[4]=0;ww[5]=1;ww[8]=0;ww[9]=6;
  325.                                   ww[14]=-(Sco_40+90);  ww[19]=2;
  326.           my_sco_add(i,j);
  327.   memset(ww,0,20*sizeof(int));
  328.   ww[0]=2;ww[1]=1;ww[2]=1;ww[3]=1;ww[4]=0;ww[5]=2;ww[8]=0;ww[9]=6;
  329.                                   ww[14]=-(Sco_41+90);    ww[19]=1;
  330.           my_sco_add(i,j);
  331. //---------------------------------------敌我我我空空------
  332.   memset(ww,0,20*sizeof(int));
  333.   ww[0]=1;ww[1]=2;ww[2]=2;ww[3]=2;ww[4]=0;ww[5]=0;ww[8]=0;ww[9]=6;
  334.                                   ww[14]=-(Sco_40-Sco_40_0);ww[15]=ww[14];ww[19]=2;
  335.           my_sco_add(i,j);
  336.   memset(ww,0,20*sizeof(int));
  337.   ww[0]=2;ww[1]=1;ww[2]=1;ww[3]=1;ww[4]=0;ww[5]=0;ww[8]=0;ww[9]=6;
  338.                                   ww[14]=-(Sco_41-Sco_41_0);ww[15]=ww[14];ww[19]=1;
  339.           my_sco_add(i,j);
  340. //---------------------------------------敌空我我我空-------------
  341.   memset(ww,0,20*sizeof(int));
  342.   ww[0]=1;ww[1]=0;ww[2]=2;ww[3]=2;ww[4]=2;ww[5]=0;ww[8]=0;ww[9]=6;
  343.           ww[11]=-(Sco_40-Sco_40_0);                   ww[19]=2;
  344.           my_sco_add(i,j);
  345.   memset(ww,0,20*sizeof(int));
  346.   ww[0]=2;ww[1]=0;ww[2]=1;ww[3]=1;ww[4]=1;ww[5]=0;ww[8]=0;ww[9]=6;
  347.           ww[11]=-(Sco_41-Sco_41_0);                   ww[19]=1;
  348.           my_sco_add(i,j);
  349. //---------------------------------------空我我空我空-------------
  350.   memset(ww,0,20*sizeof(int));
  351.   ww[0]=0; ww[1]=2; ww[2]=2; ww[3]=0; ww[4]=2; ww[5]=0;ww[8]=0;  ww[9]=6;
  352.   ww[10]=Sco_40_0;           ww[13]=Sco_40;    ww[15]=Sco_40_0;  ww[19]=2;
  353.           my_sco_add(i,j);
  354.   memset(ww,0,20*sizeof(int));
  355.   ww[0]=0; ww[1]=1; ww[2]=1; ww[3]=0; ww[4]=1; ww[5]=0; ww[8]=0; ww[9]=6;
  356.   ww[10]=Sco_41_0;           ww[13]=Sco_41;    ww[15]=Sco_41_0;  ww[19]=1;
  357.           my_sco_add(i,j);
  358.  //---------------------------------------敌我我空我敌-------------
  359.   memset(ww,0,20*sizeof(int));
  360.   ww[0]=1; ww[1]=2; ww[2]=2; ww[3]=0; ww[4]=2; ww[5]=1; ww[8]=0;  ww[9]=6;
  361.                              ww[13]=-50;                          ww[19]=2;
  362.           my_sco_add(i,j);
  363.   memset(ww,0,20*sizeof(int));
  364.   ww[0]=2; ww[1]=1; ww[2]=1; ww[3]=0; ww[4]=1; ww[5]=2; ww[8]=0; ww[9]=6;
  365.                              ww[13]=-50;                         ww[19]=1;
  366.           my_sco_add(i,j);
  367.  //---------------------------------------敌我我空我空-------------
  368.   memset(ww,0,20*sizeof(int));
  369.   ww[0]=1; ww[1]=2; ww[2]=2; ww[3]=0; ww[4]=2; ww[5]=0; ww[8]=0;  ww[9]=6;
  370.                              ww[13]=Sco_40_0;  ww[15]=Sco_40_0;   ww[19]=2;
  371.           my_sco_add(i,j);
  372.   memset(ww,0,20*sizeof(int));
  373.   ww[0]=2; ww[1]=1; ww[2]=1; ww[3]=0; ww[4]=1; ww[5]=0; ww[8]=0; ww[9]=6;
  374.                              ww[13]=Sco_41_0;  ww[15]=Sco_41_0;      ww[19]=1;
  375.           my_sco_add(i,j);
  376.  //---------------------------------------敌我空我我空-------------
  377.   memset(ww,0,20*sizeof(int));
  378.   ww[0]=1; ww[1]=2; ww[2]=0; ww[3]=2; ww[4]=2; ww[5]=0; ww[8]=0;  ww[9]=6;
  379.                     ww[12]=Sco_40_0;           ww[15]=Sco_40_0;   ww[19]=2;
  380.           my_sco_add(i,j);
  381.   memset(ww,0,20*sizeof(int));
  382.   ww[0]=2; ww[1]=1; ww[2]=0; ww[3]=1; ww[4]=1; ww[5]=0; ww[8]=0; ww[9]=6;
  383.                     ww[12]=Sco_41_0;           ww[15]=Sco_41_0;  ww[19]=1;
  384.           my_sco_add(i,j);
  385. //----------------ene 关于三子------------------------
  386. //
  387.  }
  388.    }
  389.    }
  390. return (0);
  391. }
  392. int Computer_work()
  393. {int i,j,m=0,n=0,max=0,m1=0,n1=0,max1=0;
  394.  for(i=0;i<15;i++)
  395.     {for(j=0;j<15;j++)
  396.   {if(max<c_bb[i][j].sco)
  397.           {max=c_bb[i][j].sco;
  398.            m=i;
  399.    n=j;
  400.   }
  401.    else if(max==c_bb[i][j].sco)
  402.        {if(p_bb[i][j].sco>max)
  403.                {max=c_bb[i][j].sco;
  404.                 m=i;
  405. n=j;
  406.    }
  407.    }
  408.         if(max1<p_bb[i][j].sco)
  409.           {max1=p_bb[i][j].sco;
  410.            m1=i;
  411.    n1=j;
  412.   }
  413. else if(max1==p_bb[i][j].sco)
  414.    {if(c_bb[i][j].sco>max1)
  415.       {max1=p_bb[i][j].sco;
  416.        m1=i;
  417.    n1=j;
  418.   }
  419.    }
  420.   }
  421.     
  422. }
  423. if(max1>max && max1>=50)
  424.     {max=max1;
  425.  m=m1;
  426.  n=n1;
  427. }
  428.  if(max>0)
  429.     { if(bb[m][n].stat==0)
  430.          {bb[m][n].stat=2;
  431.       Pain_white(m,n);
  432.           return (1);
  433.  }
  434. }
  435. if(max<=0 )
  436. {if(max1<=0)
  437.         {bb[7][7].stat=2;
  438.          Pain_white(7,7);
  439.      return (1);
  440. }
  441. else 
  442.    {bb[m1][n1].stat=2;
  443.         Pain_white(m1,n1);
  444. return (1);
  445.    }
  446. }
  447.  MessageBox(my_hwnd,"我没有走","sldfkjsldf",MB_OK | MB_ICONQUESTION);
  448.    return (0);
  449. }
  450. ////////////////////////////////////////////////////////////
  451. void Update_all()
  452. {
  453. int i = 0, j = 0;
  454. ShowBMP(qipanBmp, 0, 0, 0);
  455. for(i=0;i<15;i++)
  456. {
  457. for(j=0;j<15;j++)
  458. if( bb[i][j].stat==1)
  459. //BitBlt(hDC,xx[j],xx[i],21,21,hMemDC,0,0,SRCAND);
  460. Pain_back(i,j);
  461. }
  462. else if( bb[i][j].stat==2)
  463. //BitBlt(hDC,xx[j],xx[i],21,21,hMemDC,0,0,SRCAND);
  464. Pain_white(i,j);
  465. }        
  466. }
  467. }
  468. }
  469. int Game_Init()
  470. {
  471. int i, j;
  472. for(i=0;i<15;i++)
  473. {
  474. for(j=0;j<15;j++)
  475. {
  476. bb[i][j].stat=0;
  477. }
  478. xx[i]=8+i*24;
  479. }
  480. Update_all();   
  481. return(1);    
  482. } // end Game_Init
  483. /////////////////////////////////////////////////////////////
  484. ///////////////////////////////////////////////////////////