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

📄 doudizhuyuanma.txt

📁 斗地主源码(字符界面,包括出牌算法
💻 TXT
📖 第 1 页 / 共 2 页
字号:
          for(int j=0;j<card_face.length;j++)
           s.clearCardIDarray(card_face[j]);
          //设置未出牌数
           s.setsqunout(card_face.length);    
           return true;
          }
      //未找到匹配的连子
      else   return false;         
          
     }//playLianZi2()
     
 


 //分析方法
    public void analyse(SPlayers s){
     for(int m=0;m<2;m++)
       for(int i=0;i<13;i++)
          tmp[i][m]=0;
          //分析出各组各种牌个数,并记录每组非空起始位置:tmp[][1]中存起始位置
       for(int i=0,count=0;i<4;i++){
            if(s.cardID_Player[i]==1) tmp[0][0]++;
            if(tmp[0][0]==1&&count==0) {tmp[0][1]=i;count=1;}
           }
       for(int i=4,count=0;i<8;i++){
           if(s.cardID_Player[i]==1) tmp[1][0]++;
           if(tmp[1][0]==1&&count==0) {tmp[1][1]=i;count=1;}
           }
       for(int i=8,count=0;i<12;i++){
           if(s.cardID_Player[i]==1) tmp[2][0]++;
           if(tmp[2][0]==1&&count==0) {tmp[2][1]=i;count=1;}
           }    
       for(int i=12,count=0;i<16;i++){
           if(s.cardID_Player[i]==1) tmp[3][0]++;
           if(tmp[3][0]==1&&count==0) {tmp[3][1]=i; count=1;}
            }    
       for(int i=16,count=0;i<20;i++){
           if(s.cardID_Player[i]==1) tmp[4][0]++;
           if(tmp[4][0]==1&&count==0) {tmp[4][1]=i;count=1;}
           }    
       for(int i=20,count=0;i<24;i++){
           if(s.cardID_Player[i]==1) tmp[5][0]++;
           if(tmp[5][0]==1&&count==0) {tmp[5][1]=i;count=1;}
           }    
       for(int i=24,count=0;i<28;i++){
           if(s.cardID_Player[i]==1) tmp[6][0]++;
           if(tmp[6][0]==1&&count==0) {tmp[6][1]=i;count=1;}
           }    
           
       for(int i=28,count=0;i<32;i++){
           if(s.cardID_Player[i]==1) tmp[7][0]++;
           if(tmp[7][0]==1&&count==0) {tmp[7][1]=i;count=1;}
           }    
       for(int i=32,count=0;i<36;i++){
           if(s.cardID_Player[i]==1) tmp[8][0]++;
           if(tmp[8][0]==1&&count==0) {tmp[8][1]=i;count=1;}
           }    
       for(int i=36,count=0;i<40;i++){
           if(s.cardID_Player[i]==1) tmp[9][0]++;
           if(tmp[9][0]==1&&count==0) {tmp[9][1]=i;count=1;}
           }    
       for(int i=40,count=0;i<44;i++){
           if(s.cardID_Player[i]==1) tmp[10][0]++;
           if(tmp[10][0]==1&&count==0) {tmp[10][1]=i;count=1;}
           }    
       for(int i=44,count=0;i<48;i++){
           if(s.cardID_Player[i]==1) tmp[11][0]++;
           if(tmp[11][0]==1&&count==0) {tmp[11][1]=i;count=1;}
           }
       for(int i=48,count=0;i<52;i++){
           if(s.cardID_Player[i]==1) tmp[12][0]++;
           if(tmp[12][0]==1&&count==0) {tmp[12][1]=i;count=1;}
           }    
           
        
    }
    //出连子
    public void playLianZi(SPlayers s){
       int start=-1;
       start=last-len+1;//连子开始组号
       int[] a1=new int[12];
       for(int i=0;start<=last;start++,i++){
             a1[i]=tmp[start][1];    
           }
       setCardFaceArray(len,a1);
           //出牌后对玩家手中的牌进行相应清理
          for(int j=0;j<card_face.length;j++)
           s.clearCardIDarray(card_face[j]);
          //设置未出牌数
           s.setsqunout(card_face.length);    
        
    }
    //找连子(不包括从其他类型组中取单张)
    public  boolean searchLianZi(int[][] tmp){
            int[] tmp2=new int[12];//tmp2记录单牌组组号
             last=-1;
            len=1;
            
            int j=0;
           for(int i=0;i<12;i++,j++)
               if(tmp[i][0]==1) 
                     tmp2[j]=i;
          
            int k=j;
            //找连子
            for(j=0;k>=5&&j<k;j++){
                 while(j+1<k&&tmp2[j+1]==tmp2[j]+1){
                     len++;
                     if(len>=5) last=j+1;
                      j++;
                     }
                if(j+1<k&&len<5) len=1;
                    
            }//for
            if(len>=5)  return true;
            else 
            return false;
      }
      //找单张
      public boolean searchDanZhang(int[][] tmp){
          start_s=-1;
          for(int i=0;i<13;i++)
              if(tmp[i][0]==1){
                start_s=i;
                break;    
              }
           if(start_s!=-1) return true;
           else return false;
          }
      //出单张
      public void playDanZhang(SPlayers s){
          int[] a1=new int[1];
          a1[0]=tmp[start_s][1];
          setCardFaceArray(1,a1);
          //出牌后对玩家手中的牌进行相应清理
          s.clearCardIDarray(card_face[0]);
          //设置未出牌数
          s.setsqunout(1);    
          
      } 
      //找对子
      public boolean searchDuiZi(int[][] tmp){
        start_s=-1;
        for(int i=0;i<13;i++)
              if(tmp[i][0]==2){
                start_s=i;
                break;    
              }    
        if(start_s!=-1) return true;
           else return false;        
          
      }
      //出对子
      public void playDuiZi(SPlayers s){
          int[] a1=new int[2];
          int ans=tmp[start_s][1];
          for(int i=0;i<2;i++)
           a1[i]=ans++;
          setCardFaceArray(2,a1); 
          //出牌后对玩家手中的牌进行相应清理
          s.clearCardIDarray(card_face[0]);
          s.clearCardIDarray(card_face[1]);
          //设置未出牌数
          s.setsqunout(2);    
      }
      //找三张
      public boolean searchSanZhang(int[][] tmp){
         start_s=-1;
        for(int i=0;i<13;i++)
              if(tmp[i][0]==3){
                start_s=i;
                break;    
              }    
        if(start_s!=-1) return true;
           else return false;          
          
      }
      //出三张
      public void playSanZhang(SPlayers s){
          int[] a1=new int[3];
          int ans=tmp[start_s][1];
          for(int i=0;i<3;i++)
           a1[i]=ans++;
          setCardFaceArray(3,a1); 
          //出牌后对玩家手中的牌进行相应清理
          s.clearCardIDarray(card_face[0]);
          s.clearCardIDarray(card_face[1]);
          s.clearCardIDarray(card_face[2]);
          //设置未出牌数
          s.setsqunout(3);    
      }
      //找炸弹
      public boolean searchZhaDan(int[][] tmp){
         start_s=-1;
        for(int i=0;i<13;i++)
              if(tmp[i][0]==4){
                start_s=i;
                break;    
              }    
        if(start_s!=-1) return true;
           else return false;          
      }
      //出炸弹
      public void playZhaDan(SPlayers s){
          int[] a1=new int[4];
          int ans=tmp[start_s][1];
          for(int i=0;i<4;i++)
           a1[i]=ans++;
          setCardFaceArray(4,a1); 
          //出牌后对玩家手中的牌进行相应清理
          s.clearCardIDarray(card_face[0]);
          s.clearCardIDarray(card_face[1]);
          s.clearCardIDarray(card_face[2]);
          s.clearCardIDarray(card_face[3]);
          //设置未出牌数
          s.setsqunout(4);    
      }
      //找单王
      public boolean searchDanJoker(SPlayers s){
        if(s.cardID_Player[52]==1&&s.cardID_Player[53]==0){    
            start_s=52;
            
            return true;
            }
        else if(s.cardID_Player[52]==0&&s.cardID_Player[53]==1){
            start_s=53;
            return true;  
            }
        else return false;
      }
      //出单王
      public void playDanJoker(SPlayers s){
          int[] a1=new int[1];
          a1[0]=start_s;
          setCardFaceArray(1,a1); 
          //出牌后对玩家手中的牌进行相应清理
          s.clearCardIDarray(card_face[0]);
          //设置未出牌数
          s.setsqunout(1);    
      }
      //找双王
      public boolean searchJoker(SPlayers s){
       if(s.cardID_Player[52]==1&&s.cardID_Player[53]==1)
           return true;
       else return false;
          
      }
      //出双王
      public void playJoker(SPlayers s){
           int[] a1=new int[2];
          a1[0]=52;
          a1[1]=53;
          setCardFaceArray(2,a1); 
          //出牌后对玩家手中的牌进行相应清理
          s.clearCardIDarray(card_face[0]);
          s.clearCardIDarray(card_face[1]);
          //设置未出牌数
          s.setsqunout(2);    
/显示牌面
    public void displayCardFace(Squeezer[] sq1){
        
        System.out.println("上次牌面是:");    
      for(int i=0;i<card_face.length;i++)
        System.out.print(sq1[card_face[i]].getsqcolor()+sq1[card_face[i]].getsqpoint()+" ");    
          System.out.println(" ");
        System.out.println("------------");    
        System.out.println(" ");
    }
     
     
     
    //构造函数
    public PlaySqueezer(SPlayers s1,SPlayers s2,SPlayers s3,Squeezer[] sq1){
       
       if(s1.Ishost()==true) {lord=s1; ger1=s2; ger2=s3;}
       else if(s2.Ishost()==true) {lord=s2; ger1=s3; ger2=s1;}
       else {lord=s3; ger1=s1; ger2=s2;}
       
       while(s1.getsqunout()!=0&&s2.getsqunout()!=0&&s3.getsqunout()!=0){
          //地主开始出牌
         
          if(lord.getsqunout()==20){
             if(lord.getpid()==1) {
                 ring_token=1;
                 personPlay(s1,sq1);
                 
                 
             }
                else if(lord.getpid()==2){
                  ring_token=2;
                  computerPlay(s2,sq1);
                  
              }
             else {
                  ring_token=3;
                  computerPlay(s3,sq1);
                  
                 }
           }        
          //非第一轮出牌
          else {
          
            if(token==1)  
              personPlay(s1,sq1); 
              
             
            else if(token==2) 
              computerPlay(s2,sq1); 
               
             
          
            else if(token==3) 
              computerPlay(s3,sq1); 
           }
       
       
       
       }//while     
       System.out.println("游戏结束!");
       int lsp=lord.getscore();
       int lsp1=ger1.getscore();
       int lsp2=ger2.getscore();  
       if(lord.getsqunout()==0) 
        { 
          lord.setscore(100);
          lord.setscore(ger1.getscore()+ger2.getscore());
          int g1=2*lsp1+50+lsp2+lsp;
          g1=0-g1;
          int g2=2*lsp2+50+lsp1+lsp;
          g2=0-g2;
          ger1.setscore(g1);
          
          ger2.setscore(g2);
          System.out.println("地主: "+lord.getname()+" 胜!");
          }
       else {
            
            int g1=50+lsp2+lsp;
            int g2=50+lsp1+lsp;
            ger1.setscore(g1);
            ger2.setscore(g2);  
            lsp=2*lsp+lsp1+lsp2+100;
            lsp=0-lsp;
            lord.setscore(lsp);
           System.out.println("玩家1: "+ger1.getname()+" 和 "+"玩家2:"+ger2.getname()+" 胜!");
           }
       
      System.out.println("玩家得分:");
      System.out.println("玩家姓名           分数     ");
      System.out.println(lord.getname()+"         "+lord.getscore()+"          ");
      System.out.println(ger1.getname()+"         "+ger1.getscore()+"          ");
      System.out.println(ger2.getname()+"         "+ger2.getscore()+"          ");
      System.exit(0);
    }//PlaySqueezer()

  }//PlaySqueezerClass 

⌨️ 快捷键说明

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