成三棋(网络版) | 学步园

成三棋(电力网版)

作者:谈荣辉

在很多游玩网站上,还缺少找到游玩。这是每一普通百姓的常常在我故乡玩的游玩。。

电力网安排的偏袒地.

游玩安排

采取C/S通讯样品,而且用点对点的发送环行的形成..

优点:绝对复杂,省掉重行,编码反复率很小。

缺陷:如今失去嗅迹构造和构造侍者的拨准的快慢。,发展多人典范是不舒服的的。.其实,这种样品制造了更多的难管的。.

WSAAsyncSelect典范,上面是客户机编码,新建MayiClient,用于收执环行的和发送环行的.

case WM_SOCKET:

        if (WSAGETSELECTERROR(lParam))

        {

closesocket( (插座)
wParam);

              break;

        }

      switch(WSAGETSELECTEVENT(lParam))

        {

            case FD_CONNECT :

               WSAAsyncSelect(wParam,hWnd,
WM_SOCKET,FD_READ);

               break;

            case FD_READ:

                g_pMayiClient->RecvMayi(wParam);//收执环行的

               break;

           case FD_WRITE:

               g_pMayiClient->SendMayi(wParam,wStrName);//发送环行的

               break;

           case FD_CLOSE:

               closesocket(
(插座)wParam);   

               break;

      }

      break;

游玩规则

1.      
游玩分为两个阶段,即棋的阶段和车的阶段。。在第一阶段(国际象棋阶段)弈棋的单方9每一国际象棋的棋子,把国际象棋的棋子放在线的横切面上。。轮番玩他们本身的夸张的行动或形象,自然的进入下一阶段(轮到的次)阶段).

2.      
在弈棋和弈棋的审阅中,任何面有三每一国际象棋的棋子陆续邀集垂线时,这是三,这是每一国际象棋的棋子,可以拉出他方。只请注意到,当你拉的时分,你不克不及落后他方的三块。

3.      
弈棋的审阅中,在西洋跳棋盘的评价将不能胜任的再chessed。

4.      
弈棋的审阅中,一次最适当的每一单位.

5.      
弈棋的面,最适当的在被拉上过后2每一国际象棋的棋子或更少,那时的他被抓紧打败了。。

西洋跳棋盘的解释

在网上关照个别的东西,前任的的设计用于以弈西洋跳棋盘作风,.这庞大地累积而成了设计。,和复合物

以西洋跳棋盘心脏为原点运用三维阻碍pt[a][b][c]表现;

a代表三方,从外到内,0,1,2

b缺乏的顶部,或许正面的评价,结果顶峰是0 ,在锋利为1

c在四的顶峰上表现顺时针方向转动地的点。,0在左上角

如图所示.

西洋跳棋盘使习惯于

每个评价都缺少国际象棋。,有棋,蒸馏器每一选择,三种使习惯于.运用Rose方式确定使习惯于

     enum ChessState

     {

         NODRAW,     //无棋

         DRAW,       //有棋

         SELECT,     //国际象棋的棋子的选择

     };

1.       因它是在竞赛单方构筑起来的。,表现单方西洋跳棋盘使习惯于

     ChessState 
MeChessState[3][2][4];
//陈述国际象棋

     ChessState  HeChessState[3][2][4] ;//国际国际象棋的使习惯于

2.       
结果你下国际国际象棋:MeChessState[3][2][4]=DRAW;

国际象棋的棋子的选择:MeChessState[3][2][4]=SELECT,

国际象棋的棋子被他方轻易击败用MeChessState[3][2][4]=NODRAW;

3.       
他方弈棋用HeChessState[3][2][4]=DRAW;

他方国际象棋的棋子被本身轻易击败:HeChessState[3][2][4]=NODRAW;

计数把持

1.       因这是国际象棋的两个阶段。,在第一阶段,轮番使完美本身的9每一国际象棋的棋子,因而在每每一下每一使感动一定断定本身的国际象棋的棋子。.结果MeChessState[a][b][c]!=NODRAW,这中部很评价有风景竞赛。.

有每一国际象棋的棋子计数方式如次:

          int nMeChess=0;

          for(a0;一<=2;a++)

              for(b=0;b<=1;b++)

                   for(c=0;c<=3;c++)

                  {

                        if(mechessstate [A] [B] [C]!=NODRAW)
nMeChess++;

                   }

所选国际象棋的棋子的计数方式:

          int nMeChessSelect=0;

          for(a0;一<=2;a++)

               for(b=0;b<=1;b++)

                   for(c=0;c<=3;c++)

                   {

                        if(mechessstate [A] [B] [C]!=NODRAW)
nMeChess
Select++;

              }

2.       另一边的国际象棋的棋子数int nHeChess.

3.       国际象棋的棋子的总额,国际象棋的棋子的数被轻易击败了。.

int nMe;       //国际象棋的棋子的国际象棋的棋子数

int nHe;       //国际象棋的棋子数

int EatMeNum;  //国际象棋的棋子的数是由宁静吃的

int EatHeNum;  //吃每一国际象棋的棋子数

在国际象棋的使感动

分两个阶段.

1.       在第一阶段(国际象棋阶段)弈棋的单方9每一国际象棋的棋子,把国际象棋的棋子放在线的横切面上。。轮番下每一片西洋跳棋盘过后,自然的进入下一阶段(轮到的次)阶段)。辨析,确定每个西洋跳棋盘的第一阶段,不只要断定nMeChess假设为9结果以内,在第一阶段,断定鼠标点击假设有游玩,最适当的在缺少国际象棋的位置下才干种植。.着陆记载位.交易所棋的双边,使MyTurn =TRUE,发送下每一评价环行的切换到另每一评价。.方式如次:

for(a0;一<=2;a++)

     for(b=0;b<=1;b++)

         for(c=0;c<=3;c++)

         {

              mechessstate [A] [B] [C] =画  //画每一国际象棋的棋子

              goto loop;                         //记载所画每一国际象棋的棋子评价

         }

loop:

         sprintf(po ,“%d%d%d%c”,a,b,c,aa,bb,cc,”/0”);

2.       第二阶段(国际国际象棋的活动或斗争的场所或场面):一次最适当的每一单位.鉴于斜纹的.因而效劳开场白很评价。,上面的评价.

三种包围:在程度,铅直下,前后法.

if(pt[aa][bb][cc].x==pt[a][b][c].x||pT [ aa ]。//程度或竖直下

{

     if(bb==0)//国际象棋的棋子在矩形的顶峰

     {

         if(b==1)

         {                                   

              mechessstate [ ] [ ] [ AA BB CC ] = nodraw//整理期末考试一步

              mechessstate [A] [B] [C] =画      //水流评价草拟    

              goto loop;

         }

     }

     if(bb==1)//国际象棋的棋子的边界上的

     {

         if(b==1)//下降到边界上的

         {

              if(cc==c)

              {

                   if((aa-a)==1||(a-aa)==1)

                   {

                       mechessstate [ ] [ ] [ AA BB CC ] = nodraw//整理期末考试一步

                       mechessstate [A] [B] [C] =画      //水流评价草拟    

                       goto loop;

                   }

              }

         }

         if(b==0)//降到顶峰

         {

              mechessstate [ ] [ ] [ AA BB CC ] = nodraw//整理期末考试一步

              mechessstate [A] [B] [C] =画      //在当前评价图    

              goto loop;

         }

     }

}

else//侧身下

{

     if(cc==c)//侧身下

     {

         if(bb==b)

         {

              if((aa-a)==1||(a-aa)==1)

              {

                   mechessstate [ ] [ ] [ AA BB CC ] = nodraw//整理期末考试一步

                   mechessstate [A] [B] [C] =画      //水流评价草拟    

                   goto loop;

              }

         }

     }

}                          

上面是安排图:

假设成三

面有三每一国际象棋的棋子陆续邀集垂线时,号码是三。,有西洋跳棋盘意识到有5种子的位置,有三种在三种水质使习惯于,铅直三,倾向成三.当程度成三和铅直三时,想想在左边和恰当地,左右.断定程度和铅直三时,它首要是经过三点同等的。x完整的y完整的平等的.

for(a10;一1<=2;a1++)

for(b1=0;b1<=1;b1++)

      for(c1=0;c1<=3;c1++)

      {

           if(b2==0&&MeChessState[a1][b1][c1]==DRAW)//下风景竞赛在拐角处。

           {

               if(铂)][b1][c1].x)sum1++;

               if(pt[a2][b2][c2].y==pt[a1][b1][c1].y)sum2++;

           }

           if(b2==1&&MeChessState[a1][b1][c1]==DRAW)
//在中部

           {

               if(c2==c1&&pt[a2][b2][c2].x==pt[a1][b1][c1].x)sum3++;

               if(c2==c1&&pt[a2][b2][c2].y==pt[a1][b1][c1].y)sum4++;

           }

           if(b2==0&&b1==0&&c2==c1&&MeChessState[a1][b1][c1]==DRAW)//倾向

           {

               sum5++;

           }

      }

吃每一国际象棋的棋子

率先,确定假设要点击他方的国际象棋的棋子,最适当的他方的国际象棋的棋子在它。DRAW陈述可以吃

if(hechessstate [A] [B] [C] = =画 )  //每一国际象棋的棋子是另。DRAW使习惯于

{

     hechessstate [A] [B] [C] = nodraw ; //消灭

}  

界间的图画

它分为三个州。,游玩界间的的开端,游玩的进食,游玩的进食,游玩完毕

游玩开端时游玩角色清晰度的解释,装载背景图像.

enum INITSTATE

{

     INIT,      //初使化

     WAIT,      //推迟直到到达衔接

     PLAY,      //游玩的进食

     END,       //游玩完毕

};

1.       地在INIT,由用户填写清晰度,装载背景图像,当用户写清晰度次登记时WAIT使习惯于

2.       WAIT使习惯于:推迟直到到达他方衔接到环行的通讯,当另每一衔接,显示本身和另一个的名字,点击开端,可以举行游玩的开端.举行PLAY使习惯于.

3.       PLAY里示单方西洋跳棋盘使习惯于,,激励棋,吃剩的国际象棋的棋子数.定货次,玩游玩参量等。,修正游玩界间的,拉西洋跳棋盘等

把持变量

对弈棋假设有两个首要的把持。,

BOOL MyTurn;   //假设弈棋

BOOL bEatHe;   //你能吃吗?他方

1.       MyTurn 为真,那你就可以下国际国际象棋了。,下国际象棋MyTurn FALSE 等对方弈棋;当他方完棋,西洋跳棋盘评价,当我收到对方西洋跳棋盘的评价,并在西洋跳棋盘上显示,MyTurnTRUE那时的竞赛瀑布了他本身。

2.       bEatHe,当我所下的国际象棋的棋子,思索假设可以是三,结果可以是三,那时的设置MyTurn 为真,bEatHe为真,这中部你可以轻易击败宁静孩子达到目标每一。.相互吃了以来,收回的国际象棋的棋子块,当他方

环行的发送

彼此率先运用。WSAAsyncSelect样品,举行通讯衔接.

解释环行的安排:

     typedefstruct _packethdr

     {

         char type;

         char POS [ 7 ]

     }packethdr,*PACKETHDR;

1.      
WAIT使习惯于,单方早已成地举行了环行的通讯。.相互发送用户名,解释环行的类型B发送

packethdr sendHdr;

”B”;              

memcpy();
//用户

成地收执源自单方的环行的,解析用户名,显示摆脱,次进入PLAY使习惯于

2.       PLAY使习惯于里,下一步的每一步,记载上面的评价,发派人他方.鄙人每一西洋跳棋盘上,已用char 作业[ 7 ]变量防护用品水流所下的评价此外上一步的评价.解释环行的类型A.

        ' ';

memcpy(sendHdr.pos,po,7); //用户

char po1[7];变量防护用品,相互吃的西洋跳棋盘变量.那时的环行的他方.每一国际象棋的棋子,在西洋跳棋盘的另一边去吃,解释环行的类型C

”C”;

memcpy();
//用户

3.       由收执环行的发送的西洋跳棋盘评价数据.断定环行的类型,当环行的类型为B防护用品环行的HeInfo变量,当环行的类型为A,DrawHeChess处置; 当环行的类型为C,DrawHeChess1处置,详细的赚得方式如次:

char recvbuf[1024];

nReadLen=recv(wParam,(char*)&recvbuf,sizeof(recvbuf),0);

memset(&recvHdr, 0, sizeof(.recvHdr));

memcpy(&recvHdr,recvbuf,8);

switch()

{

case' ':

  {

       DrawHeChess();           

  }

  break;

case”C”:

  {

       if(bRecvC==TRUE)

       DrawHeChess1();      

  }

  break;

case”B”:

  {

       memset(HeInfo,0,strlen(HeInfo));

       memcpy(HeInfo,,strlen());

  }

发表评论

电子邮件地址不会被公开。 必填项已用*标注