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

📄 中国象棋.txt

📁 c高手不要错过呵
💻 TXT
📖 第 1 页 / 共 2 页
字号:
        drawbmp(x,y,chessfile[n]);
      }
      if(redtemppos.x==redoldpos.x&&redtemppos.y==redoldpos.y&&redstate==MOVE)
        drawselecursor(redoldpos);

      drawcursor(redcurpos);
      redtemppos.x=redcurpos.x;
      redtemppos.y=redcurpos.y;
  }
}

redright()
{

  int x,y,n;
  if(redcurpos.y<8)
  {
    redcurpos.y++;
      x=position[redtemppos.x][redtemppos.y].x;
      y=position[redtemppos.x][redtemppos.y].y;
       if(board[redtemppos.x][redtemppos.y]==0)
        drawbmp(x,y,boardfile[redtemppos.x][redtemppos.y]);
      else if(!(redtemppos.x==redoldpos.x&&redtemppos.y==redoldpos.y&&redstate==MOVE))
      {
        n=board[redtemppos.x][redtemppos.y];
        drawbmp(x,y,chessfile[n]);
      }
      if(redtemppos.x==redoldpos.x&&redtemppos.y==redoldpos.y&&redstate==MOVE)
        drawselecursor(redoldpos);
      
      drawcursor(redcurpos);
      redtemppos.x=redcurpos.x;
      redtemppos.y=redcurpos.y;
  }
}

reddo()
{
  int i,j,x,y,n;
  if(redstate==SELECT&&redcanselect())
  {
    if(board[redcurpos.x][redcurpos.y]<=RED&&board[redcurpos.x][redcurpos.y]>0)
    {
      redstate=MOVE;
      drawselecursor(redcurpos);
      redoldpos.x=redcurpos.x;
      redoldpos.y=redcurpos.y;
    }
  }
  else if(redstate==MOVE&&redcanmove())
  {
    x=position[redoldpos.x][redoldpos.y].x;
    y=position[redoldpos.x][redoldpos.y].y;
    drawbmp(x,y,boardfile[redoldpos.x][redoldpos.y]);

    x=position[redcurpos.x][redcurpos.y].x;
    y=position[redcurpos.x][redcurpos.y].y;
    n=board[redoldpos.x][redoldpos.y];
    drawbmp(x,y,chessfile[n]);

    if(board[redcurpos.x][redcurpos.y]==BLACK_JIANG)
    {
      winner=RED;
      finish=1;
      return;
    }
    
    board[redcurpos.x][redcurpos.y]=n;
    board[redoldpos.x][redoldpos.y]=0;
    
    for(i=0;i<=2;i++) 
      for(j=3;j<=5;j++)
        if(board[i][j]==BLACK_JIANG)
          {x=i;y=j;}
    for(i=x+1,j=y,n=0;i<=9;i++)
    {
      if(board[i][j]==RED_JIANG&&n==0) 
      {winner=BLACK;finish=1;break;}
      else if(board[i][j]!=0) n++;
    }
    turn=BLACK;
    blackstate=SELECT;
    drawcursor(blackcurpos);
    drawbmp(30,438,"bmp\\bzq.wfb");           /*转交控制权给黑方*/
  }
}

redundo()
{
  int x,y,n;
  if(redstate==MOVE)
  {
    x=position[redoldpos.x][redoldpos.y].x;
    y=position[redoldpos.x][redoldpos.y].y;
    n=board[redoldpos.x][redoldpos.y];
    drawbmp(x,y,chessfile[n]);
    redoldpos.x=redcurpos.x;
    redoldpos.y=redcurpos.y;
    drawcursor(redcurpos);
    redstate=SELECT;
  }
}
/*--------------------黑方操作----------------------*/
int blackcanselect()
{
  int x,y;
  x=blackcurpos.x;
  y=blackcurpos.y;
  if(board[x][y]>=BLACK_JU&&board[x][y]<=BLACK_BIN)
    return 1;
  else 
    return 0;
}
int blackcanmove()
{
  int i,j,min,max,oldx,oldy,x,y;
  oldx=blackoldpos.x;
  oldy=blackoldpos.y;
  x=blackcurpos.x;
  y=blackcurpos.y;
/*case1  目标位置是否是自己人*/  
  if(board[x][y]>=BLACK_JU&&board[x][y]<=BLACK_BIN)
    return 0;
  /*  军、马、炮、相、士、将、卒的走法正确性的判断*/
  switch(board[oldx][oldy])
  {
    case BLACK_JU:                              /*完成*/
         if(x!=oldx&&y!=oldy) return 0;
         else if(x!=oldx)
           { min=(x>oldx)?oldx:x;
             max=(x>oldx)?x:oldx;
               for(i=min+1;i<max;i++) 
                 if(board[i][y]!=0) return 0;
           }
         else if(y!=oldy)
           { min=(y>oldy)?oldy:y;
             max=(y>oldy)?y:oldy;
               for(i=min+1;i<max;i++) 
                 if(board[x][i]!=0) return 0;
           }
         break;
    case BLACK_MA:                             /*完成*/
         if((x-oldx)==2&&((y-oldy)==1||(oldy-y)==1))
         { 
	   if(board[oldx+1][oldy]!=0) return 0;
         }else
         if((oldx-x)==2&&((y-oldy)==1||(oldy-y)==1))
         {
	   if(board[oldx-1][oldy]!=0) return 0;
         }else
         if((y-oldy)==2&&((x-oldx)==1||(oldx-x)==1))
         {
	   if(board[oldx][oldy+1]!=0) return 0;
         }else
         if((oldy-y)==2&&((x-oldx)==1||(oldx-x)==1))
         {
	   if(board[oldx][oldy-1]!=0) return 0;
         }else
           return 0;
         break;
    case BLACK_PAO:                        /*完成*/
         if(x!=oldx&&y!=oldy) return 0;
         if(board[x][y]==0)
           {
             if(x!=oldx)
             { min=(x>oldx)?oldx:x;
               max=(x>oldx)?x:oldx;
               for(i=min+1;i<max;i++) 
                 if(board[i][y]!=0) return 0;
             }
             else if(y!=oldy)
             { min=(y>oldy)?oldy:y;
               max=(y>oldy)?y:oldy;
               for(i=min+1;i<max;i++) 
                 if(board[x][i]!=0) return 0;
             }          
           }
           else
           {
             j=0;
             if(x!=oldx)
             { min=(x>oldx)?oldx:x;
               max=(x>oldx)?x:oldx;
               for(i=min+1;i<max;i++) 
                 if(board[i][y]!=0) j++;
               if(j!=1) return 0;
             }
             else if(y!=oldy)
             { min=(y>oldy)?oldy:y;
               max=(y>oldy)?y:oldy;
               for(i=min+1;i<max;i++) 
                 if(board[x][i]!=0) j++;
               if(j!=1) return 0;
             }         
           }
         break;


    case BLACK_XIANG:
         if(x>4) return 0;
         if(x!=oldx&&y!=oldy)
         {
           if((x-oldx)==2&&(y-oldy)==2) 
             {i=oldx+1;j=oldy+1;}
           else if((x-oldx)==2&&(oldy-y)==2)
             {i=oldx+1;j=oldy-1;}
           else if((oldx-x)==2&&(y-oldy)==2)
             {i=oldx-1;j=oldy+1;}
           else if((oldx-x)==2&&(oldy-y)==2)
             {i=oldx-1;j=oldy-1;}
           else return 0;
           if(board[i][j]!=0) return 0;     
         }
         else return 0;
         break;

    case BLACK_SHI:
         if(oldx==0||oldx==2)
         {if(x!=1||y!=4) return 0;}
         else if(oldx==1)
         {if(x==0&&y==3) return 1;
          else
          if(x==0&&y==5) return 1;
          else
          if(x==2&&y==3) return 1;
          else
          if(x==2&&y==5) return 1;
          else return 0;
         }else return 0;
         break;
        
    case BLACK_JIANG:
         if(x!=oldx&&y!=oldy) return 0;
         if(x!=oldx)
           if((x-oldx)>1||(oldx-x)>1) return 0;
           else if(x>2) return 0;  
         else if(y!=oldy)
           if((y-oldy)>1||(oldy-y)>1) return 0;
           else if(y<3||y>5) return 0; 
         break;

    case BLACK_BIN:
         if(oldx<=4)
         { if(y!=oldy||(x-oldx)!=1) return 0;}
         else
         { if(x==(oldx+1)&&y==oldy) return 1;
           else 
           if(x==oldx&&y==(oldy+1)) return 1;
           else 
           if(x==oldx&&y==(oldy-1)) return 1;
           else
           return 0; 
         }
         break;
  }
  return 1;
}
blackup()
{
  int x,y,n;
  if(blackcurpos.x>0)
  {
    blackcurpos.x--;
      x=position[blacktemppos.x][blacktemppos.y].x;
      y=position[blacktemppos.x][blacktemppos.y].y;
      if(board[blacktemppos.x][blacktemppos.y]==0)
        drawbmp(x,y,boardfile[blacktemppos.x][blacktemppos.y]);
      else if(!(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE))
      {
        n=board[blacktemppos.x][blacktemppos.y];
        drawbmp(x,y,chessfile[n]);
      }
      if(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE)
        drawselecursor(blackoldpos); 
      drawcursor(blackcurpos);
      blacktemppos.x=blackcurpos.x;
      blacktemppos.y=blackcurpos.y;
  }
}

blackdown()
{
  int x,y,n;
  if(blackcurpos.x<9)
  {
    blackcurpos.x++;
      x=position[blacktemppos.x][blacktemppos.y].x;
      y=position[blacktemppos.x][blacktemppos.y].y;
      if(board[blacktemppos.x][blacktemppos.y]==0)
        drawbmp(x,y,boardfile[blacktemppos.x][blacktemppos.y]);
      else if(!(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE))
      {
        n=board[blacktemppos.x][blacktemppos.y];
        drawbmp(x,y,chessfile[n]);
      }
      if(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE)
        drawselecursor(blackoldpos); 
      drawcursor(blackcurpos);
      blacktemppos.x=blackcurpos.x;
      blacktemppos.y=blackcurpos.y;
  }
}

blackleft()
{
  int x,y,n;
  if(blackcurpos.y>0)
  {
    blackcurpos.y--;
    
      x=position[blacktemppos.x][blacktemppos.y].x;
      y=position[blacktemppos.x][blacktemppos.y].y;
      if(board[blacktemppos.x][blacktemppos.y]==0)
        drawbmp(x,y,boardfile[blacktemppos.x][blacktemppos.y]);
      else if(!(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE))
      {
        n=board[blacktemppos.x][blacktemppos.y];
        drawbmp(x,y,chessfile[n]);
      }
      if(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE)
        drawselecursor(blackoldpos); 
      drawcursor(blackcurpos);
      blacktemppos.x=blackcurpos.x;
      blacktemppos.y=blackcurpos.y;

  }
}

blackright()
{
  int x,y,n;
  if(blackcurpos.y<8)
  {
    blackcurpos.y++;
    
      x=position[blacktemppos.x][blacktemppos.y].x;
      y=position[blacktemppos.x][blacktemppos.y].y;
      if(board[blacktemppos.x][blacktemppos.y]==0)
        drawbmp(x,y,boardfile[blacktemppos.x][blacktemppos.y]);
      else if(!(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE))
      {
        n=board[blacktemppos.x][blacktemppos.y];
        drawbmp(x,y,chessfile[n]);
      }
      if(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE)
        drawselecursor(blackoldpos); 
      drawcursor(blackcurpos);
      blacktemppos.x=blackcurpos.x;
      blacktemppos.y=blackcurpos.y;
  }
}

blackdo()
{
  int i,j,x,y,n;
  if(blackstate==SELECT&&blackcanselect())
  {
    if(board[blackcurpos.x][blackcurpos.y]<=BLACK&&board[blackcurpos.x][blackcurpos.y]>0)
    {
      blackstate=MOVE;
      drawselecursor(blackcurpos);
      blackoldpos.x=blackcurpos.x;
      blackoldpos.y=blackcurpos.y;
    }
  }
  else if(blackstate==MOVE&&blackcanmove())
  {
    x=position[blackoldpos.x][blackoldpos.y].x;
    y=position[blackoldpos.x][blackoldpos.y].y;
    drawbmp(x,y,boardfile[blackoldpos.x][blackoldpos.y]);

    x=position[blackcurpos.x][blackcurpos.y].x;
    y=position[blackcurpos.x][blackcurpos.y].y;
    n=board[blackoldpos.x][blackoldpos.y];
    drawbmp(x,y,chessfile[n]);

    if(board[blackcurpos.x][blackcurpos.y]==RED_JIANG)
    {
      winner=BLACK;
      finish=1;
      return;
    }
    board[blackcurpos.x][blackcurpos.y]=n;
    board[blackoldpos.x][blackoldpos.y]=0;
    for(i=0;i<=2;i++)
      for(j=3;j<=5;j++)
        if(board[i][j]==BLACK_JIANG)
          {x=i;y=j;}
    for(i=x+1,j=y,n=0;i<=9;i++)
    {
      if(board[i][j]==RED_JIANG&&n==0) 
      {winner=RED;finish=1;break;}
      else if(board[i][j]!=0) n++;
    }
    

    turn=RED;
    redstate=SELECT;
    drawcursor(redcurpos);
    drawbmp(30,438,"bmp\\rzq.wfb");               /*转交控制权给红方*/
  }
  
}
blackundo()
{
  int x,y,n;
  if(blackstate==MOVE)
  {
    x=position[blackoldpos.x][blackoldpos.y].x;
    y=position[blackoldpos.x][blackoldpos.y].y;
    n=board[blackoldpos.x][blackoldpos.y];
    drawbmp(x,y,chessfile[n]);
    blackoldpos.x=blackcurpos.x;
    blackoldpos.y=blackcurpos.y;
    drawcursor(blackcurpos);
    blackstate=SELECT;
  }
}

/*----------------------------------------------------*/
start()
{
  drawcursor(blackcurpos);
  drawbmp(30,438,"bmp\\bzq.wfb");
  while(!finish)
  {
    key=getkey();
    switch(key){
      case RED_UP:
           if(turn==RED)
	     redup();
	   break;
      case RED_DOWN:
           if(turn==RED)
	     reddown();
	   break;
      case RED_LEFT:
           if(turn==RED)
	     redleft();
	   break;
      case RED_RIGHT:
           if(turn==RED)
	     redright();
	   break;
      case RED_DO:
           if(turn==RED)
	     reddo();
	   break;
      case RED_UNDO:
           if(turn==RED)
	     redundo();
	   break;
	   
      case BLACK_UP:
           if(turn==BLACK)
	     blackup();
	   break;
      case BLACK_DOWN:
           if(turn==BLACK)
	     blackdown();
	   break;
      case BLACK_LEFT:
           if(turn==BLACK)
	     blackleft();
	   break;
      case BLACK_RIGHT:
           if(turn==BLACK)
	     blackright();
	   break;
      case BLACK_DO:
	   if(turn==BLACK)
	     blackdo();
	   break;
      case BLACK_UNDO:
	   if(turn==BLACK)
	     blackundo();
	   break;
      case ESCAPE:  finish=1;break;
    }
    
  }
}

main()
{


  init();
  initpos();
  initchessmap();
  drawbmp(0,0,"bmp\\board.wfb");
  initdrawchess();
  /*初始化光标位置*/
  redcurpos.x=redoldpos.x=redtemppos.x=9;
  redcurpos.y=redoldpos.y=redtemppos.y=8;
  blackcurpos.x=blackoldpos.x=blacktemppos.x=0;
  blackcurpos.y=blackoldpos.y=blacktemppos.y=0;
/*开始*/
  start();
  if(winner==RED)
    drawbmp(200,200,"bmp\\redwin.wfb");
  else if(winner==BLACK)
    drawbmp(200,200,"bmp\\blackwin.wfb");
  else
    drawbmp(200,200,"bmp\\exit.wfb");
  getch();
  end();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -