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

📄 chessmain.java

📁 JAVA编写的中国象棋,供初学者学习使用
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
                  activecolor=255;
              }
            }
          }
          else
          {
            if(trace(activeid,idX,idY,activeX,activeY)==0)
            {
              chessitem[(activeid-1)*6+1]=idX;
              chessitem[(activeid-1)*6+2]=idY;

              isPress=0;
              activeid=0;
              activecolor=0;
            }
            if(trace(activeid,idX,idY,activeX,activeY)==1)
            {
              SMessage=activeid*1000000+activeX*1000+activeY;
              if(socketthread.B_Socketthread == true)
              {
                socketthread.accept();
                socketthread.sendmessage(Integer.toString(SMessage));
               }
              isPress=0;
              activeid=0;
              activecolor=0;
              sTime=300;
              yesno=0;
              for(int i=0;i<32;i++)
              {
                if(self==1)
                {
                  if(chessitem[i*6+1]==activeX && chessitem[i*6+2]==activeY && i!=(activeid-1)&&chessitem[i*6+5]==0)
                    chessitem[i*6+3]=0;
                }
                if(self==0)
                {
                  if(chessitem[i*6+1]==activeX && chessitem[i*6+2]==activeY && i!=(activeid-1)&&chessitem[i*6+5]==1)
                    chessitem[i*6+3]=0;
                }
              }
            }
            if(trace(activeid,idX,idY,activeX,activeY)==2)
            {
              isPress=0;
              activeid=0;
              activecolor=0;
            }
          }
        }
        break;
      }
      case GAME_A:
      {
        ((chess)omidlet).exit();
      }
    }
    }
    if(activeid!=0&&yesno==1&&activecolor==255)
    {
      chessitem[(activeid-1)*6+1]=activeX;
      chessitem[(activeid-1)*6+2]=activeY;
    }
  }
  /*****************************************************/
  // 激活棋子
  //
  /*****************************************************/
  public void active(Graphics g, int x,int y,int color,int h)
  {
    int i=0,x0,y0,x1,y1;
    x0=x;y0=y;
    x1=x+13;y1=y+13;
    //g.setGrayScale(color);
    g.setColor(color);
    while(i<=(h-1))
    {
      g.drawLine(x0+i,y0+i,x1-i,y0+i);
      g.drawLine(x1-i,y0+i,x1-i,y1-i);
      g.drawLine(x1-i,y1-i,x0+i,y1-i);
      g.drawLine(x0+i,y1-i,x0+i,y0+i);
      i++;
    }
    //    g.drawRect(x+1,y+1,x+12,y+12);
  }

  /*****************************************************/
  // 分析各个棋子的走法规则
  //
  //
  /*****************************************************/
  public int trace(int id,int oldX,int oldY,int X,int Y)
  {
    if(oldX==X&&oldY==Y)
      return 2;
    if(chessitem[(id-1)*6+4]==1)//车
    {
      for(int i=0;i<32;i++)
      {
        if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==self)
                return 0;
        if((oldX-X)*(oldY-Y)==0 && (oldX-X)==0 && chessitem[i*6+1]==X &&chessitem[i*6+3]==1&&((chessitem[i*6+2]>oldY&&chessitem[i*6+2]<Y)||(chessitem[i*6+2]<oldY&&chessitem[i*6+2]>Y)))
          return 0;
        if((oldX-X)*(oldY-Y)==0 && (oldY-Y)==0 && chessitem[i*6+2]==Y &&chessitem[i*6+3]==1&&((chessitem[i*6+1]>oldX&&chessitem[i*6+1]<X)||(chessitem[i*6+1]<oldX&&chessitem[i*6+1]>X)))
          return 0;
      }

      if((oldX-X)*(oldY-Y)==0)
        return 1;
      else
        return 0;
    }
    if(chessitem[(id-1)*6+4]==2)//马
    {
      //判断落点处是否有棋子
      for(int i=0;i<32;i++)
      {
        if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==self)
          return 0;
      }
      //判断是否便腿
      if((oldX-X)*(oldY-Y)==338||(oldX-X)*(oldY-Y)==-338)
      {
        if((oldX-X)*(oldX-X)==169&&((oldY-Y)==26||(oldY-Y)==-26))
        {
          for(int i=0;i<32;i++)
          {
            if(chessitem[i*6+1]==oldX&&chessitem[i*6+2]==(oldY+Y)/2&&chessitem[i*6+3]==1)//便腿处理
              return 0;
          }
          return 1;
        }
        if((oldY-Y)*(oldY-Y)==169&&((oldX-X)==26||(oldX-X)==-26))
        {
          for(int i=0;i<32;i++)
          {
            if(chessitem[i*6+1]==(oldX+X)/2&&chessitem[i*6+2]==oldY&&chessitem[i*6+3]==1)//便腿处理
              return 0;
          }
          return 1;
        }
      }
      else
        return 0;
    }
    if(chessitem[(id-1)*6+4]==3)//象
    {
      //判断落点处是否有棋子
      for(int i=0;i<32;i++)
      {
        if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==self)
          return 0;
      }

      if(((oldX-X)==26||(oldX-X)==-26)&&((oldY-Y)==26||(oldY-Y)==-26))
      {
        for(int i=0;i<32;i++)
        {
          if(chessitem[i*6+1]==(oldX+X)/2&&chessitem[i*6+2]==(oldY+Y)/2)
            return 0;
        }
        if(chessitem[(id-1)*6+5]==0&&Y<65)
          return 1;

        if(chessitem[(id-1)*6+5]==1&&Y>52)
          return 1;
        else
          return 0;
      }
      else
        return 0;
    }
    if(chessitem[(id-1)*6+4]==4)//士
    {
      //判断落点处是否有棋子
      for(int i=0;i<32;i++)
      {
        if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==self)
          return 0;
      }

      if(chessitem[(id-1)*6+5]==0)
      {
        if(((oldX-X)==13||(oldX-X)==-13)&&((oldY-Y)==13||(oldY-Y)==-13)&&(X>=39&&X<78&&Y>=0&&Y<39))
          return 1;
        else
          return 0;
      }
      if(chessitem[(id-1)*6+5]==1)
      {
        if(((oldX-X)==13||(oldX-X)==-13)&&((oldY-Y)==13||(oldY-Y)==-13)&&(X>=39&&X<78&&Y>=91&&Y<130))
          return 1;
        else
          return 0;
      }
    }
    if(chessitem[(id-1)*6+4]==5)//将
    {
      //判断落点处是否有棋子
      for(int i=0;i<32;i++)
      {
        if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==self)
          return 0;
      }

      if(chessitem[(id-1)*6+5]==0)
      {
        if((((oldX-X)==13||(oldX-X)==-13)||((oldY-Y)==13||(oldY-Y)==-13))&&(oldX-X)*(oldY-Y)==0&&(X>=39&&X<78&&Y>=0&&Y<39))
          return 1;
        else
          return 0;
      }
      if(chessitem[(id-1)*6+5]==1)
      {
        if((((oldX-X)==13||(oldX-X)==-13)||((oldY-Y)==13||(oldY-Y)==-13))&&(oldX-X)*(oldY-Y)==0&&(X>=39&&X<78&&Y>=91&&Y<130))
          return 1;
        else
          return 0;
      }
    }
    int pos=0,count=0;
    if(chessitem[(id-1)*6+4]==6)//炮
    {
      for(int i=0;i<32;i++)//判断中间是否隔棋子
      {
        if((oldX-X)*(oldY-Y)==0 && (oldX-X)==0 && chessitem[i*6+1]==X &&chessitem[i*6+3]==1&&((chessitem[i*6+2]>oldY&&chessitem[i*6+2]<Y)||(chessitem[i*6+2]<oldY&&chessitem[i*6+2]>Y)))
          count++;
        if((oldX-X)*(oldY-Y)==0 && (oldY-Y)==0 && chessitem[i*6+2]==Y &&chessitem[i*6+3]==1&&((chessitem[i*6+1]>oldX&&chessitem[i*6+1]<X)||(chessitem[i*6+1]<oldX&&chessitem[i*6+1]>X)))
          count++;
      }
      for(int i=0;i<32;i++)
      {
              //判断落点处是否有棋子
              if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1)
                pos=1;
              //判断落点是否为自己棋子
              if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==self)
                return 0;
              //判断落点是否为敌方棋子
              if(self==1)
              {
                if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==0&&count==1)
                {
                  return 1;
                }
              }
              if(self==0)
              {
                if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==1&&count==1)
                  return 1;
              }
      }
      if((oldX-X)*(oldY-Y)==0&&count==0&&pos==0)
        return 1;
      else
        return 0;
    }
    if(chessitem[(id-1)*6+4]==7&&chessitem[(id-1)*6+5]==0)//红兵
    {
      //判断落点处是否有棋子
      for(int i=0;i<32;i++)
      {
        if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==self)
          return 0;
      }

      if(oldY>65)
      {
        if((((oldX-X)==13||(oldX-X)==-13)||((oldY-Y)==-13))&&(oldX-X)*(oldY-Y)==0)
          return 1;
        else
          return 0;
      }
      else
      {
        if(oldX==X&&(oldY-Y)==-13)
          return 1;
        else
          return 0;
      }
    }
    if(chessitem[(id-1)*6+4]==7&&chessitem[(id-1)*6+5]==1)//兵
    {
      //判断落点处是否有棋子
      for(int i=0;i<32;i++)
      {
        if(X==chessitem[i*6+1]&&Y==chessitem[i*6+2]&&(id-1)!=i&&chessitem[i*6+3]==1&&chessitem[i*6+5]==self)
          return 0;
      }

      if(oldY<65)
      {
      if((((oldX-X)==13||(oldX-X)==-13)||((oldY-Y)==13))&&(oldX-X)*(oldY-Y)==0)
          return 1;
        else
          return 0;
      }
      else
      {
        if(oldX==X&&(oldY-Y)==13)
          return 1;
        else
          return 0;
      }
    }
    return 1;
  }
  ////////////////////////////////////////////////////////////
  // 主引擎
  //
  ////////////////////////////////////////////////////////////
  public void run()
  {
    int tempID,tempX,tempY,temp;
    Graphics g=imageall.getGraphics();
    g.setGrayScale(255);
    g.fillRect(0,0,width,height);
    g.setGrayScale(0);
    if(isFirst==1)
    {

⌨️ 快捷键说明

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