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

📄 pukegamewin.pas

📁 基于使用Delphi编写源码的扑克牌游戏源码
💻 PAS
📖 第 1 页 / 共 4 页
字号:
Temp1,Temp2:String;
Ok:Boolean;
OldMax,i,j,k,m:integer;
begin
   //覆盖范围检验
      Result:=False;
      Ok:=False;

    cy:=96 div 2;
    cx:=71 div 2;
    ry:=780 div 2;
    rx:=391 div 2;
    CardCenterY:=cy+Card.Top;
    CardCenterX:=cx+Card.Left;
    rangCenterY:=ry+DownCard_Top;
    RangCenterX:=rx+Card1_Left;

      //      showmessage('当上一行空时检查登录点:'+MyCard[card.Tag].CardName+','+MyCard[8].CardName);
      Temp1:=MyCard[Card.Tag].CardName;
      Delete(temp1,1,1);
      Temp2:=MyCard[8].CardName;
      Delete(Temp2,1,1);
   if (Abs(Card.Top-UpCard_Top)<CardHeight) and (abs(Card.Left-Card1_Left)<591) then
   begin //摆放好的牌范围

     if Abs(Card.Left-UPCard_Left1)<CardWidth then
     begin //-
//         showmessage('上面一列');
         if Ok1Max=0 then
         begin //--
             if Temp1=Temp2 then
             begin //---
                 if not more then
                 begin
                 Ok:=True;
                 Card.Top:=UpCard_Top;
                 Card.Left := UPCard_Left1;
                 MyCard[Card.Tag].Top:=Card.Top;
                 MyCard[Card.Tag].Left:=Card.Left;
                 Ok1Max:=Ok1Max+1;
                 SetLength(OkCard1,Ok1Max);
                 OkCard1[0]:=Card.Tag;
                 Result:=True;
                 end;
             end;//---
          end  //--
          else //--
          begin //--
            if CompareCard(Mycard[OkCard1[Ok1Max-1]].CardName ,MyCard[Card.Tag].CardName,1) then
            begin //----
            Card.Top:=UpCard_Top;
            Card.Left := Card1_Left;
            MyCard[Card.Tag].Top:=UpCard_Top;
            MyCard[Card.Tag].Left:=Card1_Left;

            Ok1Max:=Ok1Max+1;
            SetLength(OkCard1,Ok1Max);
            OkCard1[Ok1Max-1]:=Card.Tag;

            Result:=True;
            exit;
            end; //----
          end;   //--
       end; //-


  if Not Ok then
  begin
     if Abs(Card.Left-Card2_Left)<CardWidth then
     begin
      //   showmessage('上面二列');
           if Ok2Max=0 then
         begin //--
             if Temp1=Temp2 then
             begin //---
                 if not more then
                 begin
                 Ok:=True;
                 Card.Top:=UpCard_Top;
                 Card.Left := UpCard_Left2;
                 MyCard[Card.Tag].Top:=Card.Top;
                 MyCard[Card.Tag].Left:=Card.Left;
                 Ok2Max:=Ok2Max+1;
                 SetLength(OkCard2,Ok2Max);
                 OkCard2[0]:=Card.Tag;
                 Result:=True;
                 end;

             end;//---
          end  //--
          else //--
          begin //--
            if CompareCard(MyCard[OkCard2[Ok2Max-1]].CardName,MyCard[Card.Tag].CardName,1) then
            begin //----
            Ok:=True;
            Card.Top:=UpCard_Top;
            Card.Left := Card2_Left;
            MyCard[Card.Tag].Top:=UpCard_Top;
            MyCard[Card.Tag].Left:=Card2_Left;
            Ok2Max:=Ok2Max+1;
            SetLength(OkCard2,Ok2Max);
            OkCard2[Ok2Max-1]:=Card.Tag;
            Result:=True;
            end; //----
          end;   //--
     end;
   end; //Ok;

  if Not Ok then
  begin
     if Abs(Card.Left-Card3_Left)<CardWidth then
     begin
    //     showmessage('上面三列');
         if Ok3Max=0 then
         begin //--
             if Temp1=Temp2 then
             begin //---
                 if not more then
                 begin

                 Ok:=True;
                 Card.Top:=UpCard_Top;
                 Card.Left := UpCard_Left3;
                 MyCard[Card.Tag].Top:=Card.Top;
                 MyCard[Card.Tag].Left:=Card.Left;
                 Ok3Max:=Ok3Max+1;
                 SetLength(OkCard3,Ok3Max);
                 OkCard3[0]:=Card.Tag;
                 Result:=True;
                 end;
             end;//---
          end  //--
          else //--
          begin //--
            if CompareCard(MyCard[OkCard3[Ok3Max-1]].CardName,MyCard[Card.Tag].CardName,1) then
            begin //----
            Ok:=True;
            Card.Top:=UpCard_Top;
            Card.Left := Card3_Left;
            MyCard[Card.Tag].Top:=UpCard_Top;
            MyCard[Card.Tag].Left:=Card3_Left;
            Ok3Max:=Ok3Max+1;
            Setlength(OkCard3,Ok3Max);
            OkCard3[Ok3Max-1]:=Card.Tag;
            Result:=True;
            end; //----
          end;   //--
     end;
end;//Ok;
   if Not Ok then
   begin
     if Abs(Card.Left-Card4_Left)<CardWidth then
     begin
  //       showmessage('上面四列');
        if Ok4Max=0 then
         begin //--
             if Temp1=Temp2 then
             begin //---
                 if not more then
                 begin
                 Ok:=True;
                 Card.Top:=UpCard_Top;
                 Card.Left :=UpCard_Left4;
                 MyCard[Card.Tag].Top:=Card.Top;
                 MyCard[Card.Tag].Left:=Card.Left;
                 Ok4Max:=Ok4Max+1;
                 SetLength(OkCard4,Ok4Max);
                 OkCard4[0]:=Card.Tag;
                 Result:=True;
                 end;
             end;//---
          end  //--
          else //--
          begin //--
            if CompareCard(MyCard[OkCard4[Ok4Max-1]].CardName,MyCard[Card.Tag].CardName,1) then
            begin //----
            Ok:=True;
            Card.Top:=UpCard_Top;
            Card.Left := Card4_Left;
            MyCard[Card.Tag].Top:=UpCard_Top;
            MyCard[Card.Tag].Left:=Card4_Left;
            Ok4Max:=Ok4Max+1;
            SetLength(OkCard4,Ok4Max);
            OkCard4[Ok4Max-1]:=Card.Tag;
            Result:=True;
            end; //----
          end;   //--
     end;
   end; //Ok;
   end;


     //下面排列的牌的检验;


  if (abs(CardCenterY-RangCenterY)<cy+ry) and (abs(CardCenterX-RangCenterX)<Cx+rx) then
    begin

if Not Ok then
begin
        if Abs(Card.Left-Card1_Left)<CardWidth then
        begin
//        showmessage('下面一列');
           if Not1Max=0 then
           begin
               Ok:=true;
               if Not More then
               begin
               Card.Top:=DownCard_Top;
               Card.Left := Card1_Left;
               MyCard[Card.Tag].Top:=DownCard_Top;
               MyCard[Card.Tag].Left:=Card1_Left;
               Not1Max:=Not1Max+1;
               SetLength(NotCard1,Not1Max);
               NotCard1[Not1Max-1]:=Card.Tag;
               end
               else
               begin
               Not1Max:=High(Currently.Card)+1;
               Setlength(NotCard1,Not1Max);
               j:=0;
               k:=DownCard_Top;
               for i:=0 to High(NotCard1)do
                 begin
                  MyImage[Currently.Card[j]].top:=K;
                  MyImage[Currently.Card[j]].Left :=Card1_Left;
                  NotCard1[i]:=Currently.Card[j];
                  MyCard[Currently.Card[j]].Top :=K;// Myimage[Currently.Card[j]].Top;
                  MyCard[Currently.Card[j]].Left:=Card1_Left;//Myimage[currently.Card[j]].Left;
                  K:=K+15;
                  j:=j+1;
                 end;
               end; //end of more=true
               Result:=True;
           end
           else
           begin
               if CompareCard(MyCard[NotCard1[Not1Max-1]].CardName,MyCard[Card.Tag].CardName,2) then
               begin //----
                  Ok:=True;
                  if Not More then
                  begin
                    Card.Top:=MyCard[NotCard1[Not1Max-1]].Top+15;
                    Card.Left := Card1_Left;
                    MyCard[Card.Tag].Top:=Card.Top;
                    MyCard[Card.Tag].Left:=Card1_Left;
                    Not1Max:=Not1Max+1;
                    SetLength(NotCard1,Not1Max);
                    NotCard1[Not1Max-1]:=Card.Tag;
                    Result:=True;
                  end
                  else
                  begin
                    OldMax:=Not1Max;
                    Not1Max:=Not1Max+High(Currently.Card)+1;
                    Setlength(NotCard1,Not1Max);
                    j:=0;
                    k:=MyCard[NotCard1[OldMax-1]].Top+15;
                    for i:=OldMax to High(NotCard1)do
                    begin
                         MyImage[Currently.Card[j]].top:=K;
                         MyImage[Currently.Card[j]].Left :=Card1_Left;
                         NotCard1[i]:=Currently.Card[j];
                         MyCard[Currently.Card[j]].Top :=K;// Myimage[Currently.Card[j]].Top;
                         MyCard[Currently.Card[j]].Left:=Card1_Left;//Myimage[currently.Card[j]].Left;
                         k:=K+15;
                         j:=j+1;
                    end;
                    Result:=True;
                  end; //end of more = true
              end; //----
            end;
     end;
 end;//Ok;

 if Not Ok then
 begin
     if abs(Card.Left-Card2_Left)<CardWidth then
     begin
        //  showmessage('下面二列');
           if Not2Max=0 then
           begin
               Ok:=True;
               if Not More then
               begin
               Card.Top:=DownCard_Top;
               Card.Left := Card2_Left;
               MyCard[Card.Tag].Top:=DownCard_Top;
               MyCard[Card.Tag].Left:=Card2_Left;
               Not2Max:=Not2Max+1;
               SetLength(NotCard2,Not2Max);
               NotCard2[Not2Max-1]:=Card.Tag;
               Result:=True;
               end
               else
               begin
               Not2Max:=High(Currently.Card)+1;
               Setlength(NotCard2,Not2Max);
               j:=0;
               k:=DownCard_Top;
               for i:=0 to High(NotCard2)do
                 begin
                  MyImage[Currently.Card[j]].top:=K;
                  MyImage[Currently.Card[j]].Left :=Card2_Left;
                  NotCard2[i]:=Currently.Card[j];
                  MyCard[Currently.Card[j]].Top := K;//Myimage[Currently.Card[j]].Top;
                  MyCard[Currently.Card[j]].Left:=Card2_Left;//Myimage[currently.Card[j]].Left;
                  K:=K+15;
                  j:=j+1;
                 end;
               Result:=True;
               end;//end of more=true;
           end
           else
           begin

               if CompareCard(MyCard[NotCard2[Not2Max-1]].CardName,MyCard[Card.Tag].CardName,2) then
               begin //----
                  Ok:=True;
      //            showmessage('第二列个数:'+inttostr(High(NotCard2)+1)+' 顶点坐标='+inttostr(MyCard[NotCard2[Not2Max-1]].Top));
                  if Not More then
                  begin
                    Card.Top:=MyCard[NotCard2[Not2Max-1]].Top+15;
                    Card.Left := Card2_Left;
                    MyCard[Card.Tag].Top:=Card.Top;
                    MyCard[Card.Tag].Left:=Card2_Left;
                    Not2Max:=Not2Max+1;
                    SetLength(NotCard2,Not2Max);
                    NotCard2[Not2Max-1]:=Card.Tag;
                    Result:=True;
                   end
                   else
                   begin
                    OldMax:=Not2Max;
                    Not2Max:=Not2Max+High(Currently.Card)+1;
                    Setlength(NotCard2,Not2Max);
                    j:=0;
                    k:=MyCard[NotCard2[OldMax-1]].Top+15;
                    for i:=OldMax to High(NotCard2)do
                    begin
                         MyImage[Currently.Card[j]].top:=K;
                         MyImage[Currently.Card[j]].Left :=Card2_Left;
                         NotCard2[i]:=Currently.Card[j];
                         MyCard[Currently.Card[j]].Top :=K; // Myimage[Currently.Card[j]].Top;
                         MyCard[Currently.Card[j]].Left:=card2_Left; //Myimage[currently.Card[j]].Left;
                         k:=K+15;
                         j:=j+1;
                    end;
                    Result:=True;
                   end;//end of more = true
               end; //----
            end;
     end;
 end; //Ok;
 if Not Ok then
 begin
     if abs(Card.Left-Card3_Left)<CardWidth then
     begin
    //    showmessage('下面三列');

            if Not3Max=0 then
           begin
               Ok:=True;
               if Not More then
               begin
               Card.Top:=DownCard_Top;
               Card.Left := Card3_Left;
               MyCard[Card.Tag].Top:=DownCard_Top;
               MyCard[Card.Tag].Left:=Card3_Left;
               Not3Max:=Not3Max+1;
               SetLength(NotCard3,Not3Max);
               NotCard3[Not3Max-1]:=Card.Tag;
               Result:=True;
               end
               else
               begin
               Not3Max:=High(Currently.Card)+1;
               Setlength(NotCard3,Not3Max);
               j:=0;
               k:=DownCard_Top;
               for i:=0 to High(NotCard3)do
                 begin
                  MyImage[Currently.Card[j]].top:=K;
                  MyImage[Currently.Card[j]].Left :=Card3_Left;
                  NotCard3[i]:=Currently.Card[j];
                  MyCard[Currently.Card[j]].Top := K;//Myimage[Currently.Card[j]].Top;
                  MyCard[Currently.Card[j]].Left:=Card3_Left;//Myimage[currently.Card[j]].Left;
                  K:=K+15;
                  j:=j+1;
                 end;
                Result:=True;
               end;//end of More = true;

           end
           else
           begin

               if CompareCard(MyCard[NotCard3[Not3Max-1]].CardName,MyCard[Card.Tag].CardName,2) then
               begin //----
                  Ok:=True;
                  if Not More then
                  begin
                  Card.Top:=MyCard[NotCard3[Not3Max-1]].Top+15;
                  Card.Left := Card3_Left;
                  MyCard[Card.Tag].Top:=Card.Top;
                  MyCard[Card.Tag].Left:=Card3_Left;
                  Not3Max:=Not3Max+1;
                  SetLength(NotCard3,Not3Max);
                  NotCard3[Not3Max-1]:=Card.Tag;
                  Result:=True;
                  end
                  else
                  begin
                    OldMax:=Not3Max;
                    Not3Max:=Not3Max+High(Currently.Card)+1;
                    Setlength(NotCard3,Not3Max);
                    j:=0;
                    k:=MyCard[NotCard3[OldMax-1]].Top+15;
                    for i:=OldMax to High(NotCard3)do
                    begin
                         MyImage[Currently.Card[j]].top:=K;
                         MyImage[Currently.Card[j]].Left :=Card3_Left;
                         NotCard3[i]:=Currently.Card[j];
                         MyCard[Currently.Card[j]].Top :=K; // Myimage[Currently.Card[j]].Top;
                         MyCard[Currently.Card[j]].Left:=card3_Left; //Myimage[currently.Card[j]].Left;
                         k:=K+15;
                         j:=j+1;
                    end;
                    Result:=True;
                  end;//end of more
              end; //----
            end;
     end;
 end;//Ok;
 if Not ok then
 begin
     if Abs(Card.Left-Card4_Left)<CardWidth then
     begin

//         showmessage('下面四列');
            if Not4Max=0 then
           begin
               if Not More then
               begin
               Card.Top:=DownCard_Top;
               Card.Left := Card4_Left;
               MyCard[Card.Tag].Top:=DownCard_Top;
               MyCard[Card.Tag].Left:=Card4_Left;
               Not4Max:=Not4Max+1;
               SetLength(NotCard4,Not4Max);
               NotCard4[Not4Max-1]:=Card.Tag;
               Result:=True;
               end
               else
               begin
               Not4Max:=High(Currently.Card)+1;
               Setlength(NotCard4,Not4Max);
               j:=0;
               k:=DownCard_Top;
               for i:=0 to High(NotCard4)do
                 begin

⌨️ 快捷键说明

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