www.pudn.com > 扑克牌游戏源码PlayingCard.rar > pukeGamewin.pas
unit pukeGamewin;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, ExtCtrls, StdCtrls, Gamewin;
const
UpCard_Top = 16;
UpCard_Left1 = 240;
UpCard_Left2 = 330;
UpCard_Left3 = 420;
UPCard_Left4 = 510;
DownCard_Top = 130;
Card0_Left= 16;
Card1_Left= 250;
Card2_Left= 340;
Card3_left= 430;
Card4_Left= 520;
CardWidth= 71;
CardHeight=96;
type
TPlayCard = Record
CardName: String;
Top: integer;
Left: Integer;
end;
type TMatter = Record
Ground:integer;
Index:Integer;
Card:Array of integer;
end;
type
TForm1 = class(TForm)
ClickBmp: TImage;
MainMenu1: TMainMenu;
N1: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N9: TMenuItem;
N2: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
A1: TMenuItem;
Button1: TButton;
Shape1: TShape;
Shape2: TShape;
Shape3: TShape;
Shape4: TShape;
Shape5: TShape;
Label1: TLabel;
Label2: TLabel;
Shape6: TShape;
Timer1: TTimer;
C1: TMenuItem;
S1: TMenuItem;
U1: TMenuItem;
Label3: TLabel;
procedure N9Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ClickBmpDblClick(Sender: TObject);
procedure MyMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure MyMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure MyMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure A1Click(Sender: TObject);
procedure S1Click(Sender: TObject);
procedure C1Click(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure N10Click(Sender: TObject);
published
procedure SetCard;
procedure DelhandCard(Cardvar: integer);
function CheckGround(Card: Timage):bool;
function CompareCard(S1, S2: String;UpDown:integer): Boolean;
procedure MoveCard(GroundName, ColVar,CardVar: integer);
function MoreMove(Card: Timage): TMatter;
private
Bitmap:TBitmap;
procedure WMEraseBkgnd(var m: TWMEraseBkgnd); message WM_ERASEBKGND;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Closeword:Boolean;
my:integer;
MyCard,UnDoCard: Array[0..51] of TPlayCard;
OkCard1,OkCard2,OkCard3,OkCard4:Array of integer;
NotCard1,NotCard2,NotCard3,NotCard4:Array of integer;
Ok1Max,
Ok2Max,
Ok3Max,
Ok4Max,
Not1Max,
Not2Max,
Not3Max,
Not4Max,
Flag,
VarX,
VarY,
OldTop,
OldLeft:integer;
MyImage :Array[0..51] of TImage;
HandCard,BackCard:Array of Integer; //手牌
Playing:Boolean;
PlayingCardList:TList;
//DQhigh,DQLow,DQStep:integer;
Pointer,Step:integer;
More:Boolean;
Currently:TMatter;
Counts:integer;
implementation
uses about;
{$R *.DFM}
{$R PuKe.Res}
procedure TForm1.N9Click(Sender: TObject);
begin
close;
end;
procedure TForm1.N3Click(Sender: TObject);
var
i,j:integer;
Temp:TImage;
begin
Form1.Shape1.Visible :=True;
Form1.Shape2.Visible :=True;
Form1.Shape3.Visible :=True;
Form1.Shape4.Visible :=True;
Form1.Shape5.Visible :=True;
Form1.Shape6.Visible :=False;
clickbmp.Visible:=True;
Clickbmp.BringToFront;
Button1.Visible :=True;
Counts:=0;
Ok1Max:=0;
Ok2Max:=0;
Ok3Max:=0;
Ok4Max:=0;
Not1MaX:=0;
Not2Max:=0;
Not3Max:=0;
Not4Max:=0;
More:=False;
SetCard;
ClickBmp.Picture.Bitmap.LoadFromResourceName(Hinstance,'Pic2');
ClickBmp.Enabled :=True;
Pointer:=0;
Step:=3;
if PlayingCardList<>nil then
begin
j:=PlayIngCardList.Count;
if j>0 then
begin
for I:=0 to j-1 do
begin
Temp:=PlayingCardList.Items[I];
Temp.free;
end;
PlayingCardList.Clear;
end;
end;
for i:=0 to 51 do
begin
MyImage[i]:= TImage.Create(Self);
Myimage[i].Parent:=self;
MyImage[i].Top:=UpCard_Top;
MyCard[i].Top :=UpCard_Top;
MyImage[i].Left := Card0_Left;
MYCard[i].Left := Card0_Left;
MyImage[i].Tag :=i;
MyImage[i].Visible := False;
MyImage[i].Picture.Bitmap.LoadFromResourceName(Hinstance,MyCard[i].CardName);
MYimage[i].AutoSize := True;
MYimage[i].Transparent := True;
MyImage[i].OnMouseDown :=MyMOuseDown;
MyImage[i].OnMouseMove := MyMouseMove;
MyImage[i].OnMouseUp := MyMouseUp;
PlayingCardList.Add(MyImage[i]);
end;
Label2.Caption:='剩余牌数:'+inttostr(8);
SetLength(BackCard,8);
for i:=0 to 7 do
begin
BackCard[7-i]:= i;
MyCard[i].Top := DownCard_Top;
MyCard[i].Left := Card0_Left;
MyImage[i].Top :=MyCard[i].Top;
MyImage[i].Left := MyCard[i].Left;
Myimage[i].Visible :=True;
Myimage[i].Enabled :=False;
Myimage[i].BringToFront;
end;
Myimage[8].Top :=UpCard_Top;
Myimage[8].Left:= UPCard_Left1;
MYimage[8].Visible := True;
Ok1Max:=1;
SetLength(OkCard1,Ok1Max);
OkCard1[0]:=8;
MyCard[8].Top := UpCard_Top;
MYCard[8].Left := Card1_Left;
Myimage[9].Top:=DownCard_Top;
MYimage[9].Left:=Card1_Left;
MYimage[9].Visible := True;
Not1Max:=1;
SetLength(NotCard1,Not1Max);
NotCard1[0]:=9;
MyCard[9].Top := DownCard_Top;
MyCard[9].Left := Card1_Left;
MYimage[10].Top:=DownCard_Top;
MYimage[10].Left:=Card2_Left;
Myimage[10].Visible := True;
Not2Max:=1;
SetLength(NotCard2,Not2Max);
NotCard2[0]:=10;
Mycard[10].Top := DownCard_Top;
MyCard[10].Left := Card2_Left;
MYimage[11].Top := DownCard_Top;
Myimage[11].Left:=Card3_Left;
Myimage[11].Visible := True;
Not3Max:=1;
SetLength(NotCard3,Not3Max);
NotCard3[0]:=11 ;
MyCard[11].Top := DownCard_Top;
MyCard[11].Left := Card3_Left;
MYimage[12].Top := DownCard_Top;
MYimage[12].Left := Card4_Left;
MYimage[12].Visible := True;
Not4Max:=1;
SetLength(NotCard4,Not4Max);
NotCard4[0]:=12;
MyCard[12].Top := DownCard_Top;
MyCard[12].Left := Card4_Left;
label1.Caption :='剩余牌数:'+inttostr(39);
//未翻牌赋值
SetLength(HandCard,39);
for i:=0 to high(HandCard) do
begin
HandCard[i]:=i+13;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i,j: integer;
PukeColor: array[0..3] of String;
begin
Bitmap:=TBitmap.Create;
Bitmap.LoadFromFile('bor6.bmp');
CloseWord:=True;
Timer1.Enabled:=True;
Timer1.Interval :=10;
My:=Form1.Width+20 ;
Form1.Repaint;
Ok1Max:=0;
Ok2Max:=0;
Ok3Max:=0;
Ok4Max:=0;
Not1MaX:=0;
Not2Max:=0;
Not3Max:=0;
Not4Max:=0;
ClickBmp.Enabled :=False;
PlayingCardList:=Tlist.Create;
Playing:=False;
PuKeColor[0] := 'B';
PuKeColor[1] := 'R';
PuKeColor[2] := 'H';
PuKeColor[3] := 'P';
for i:=0 to 12 do
begin
for j:=0 to 3 do
begin
MyCard[i*4+j].CardName :=PukeColor[j]+IntToStr(i+1);
end;
end;
end;
procedure TForm1.SetCard;
var i,oldval,newval:integer;
Temp:String;
// s:String;
begin
Randomize;
for i:=1 to 500 do
begin
oldval:=StrToint(FloatToStr(Random(52)));
newVal:=StrToint(FloatToStr(Random(52)));
Temp:=MyCard[OldVal].CardName ;
MyCard[OldVal].CardName :=MyCard[NewVal].CardName;
MyCard[NewVal].CardName :=Temp;
end;
{ s:='';
for i:=0 to 51 do
begin
if (i+1) mod 13 = 0 then
S:=S+MyCard[i].CardName+#13#10 //PuKeSet[i]+#13#10
else
s:=s+MyCard[i].CardName+',' // PukeSet[i]+',';
end;
showmessage(s);
}
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
PlayingCardList.Free;
Bitmap.Free;
end;
procedure TForm1.ClickBmpDblClick(Sender: TObject);
Var
i,j,LeftY:integer;
Temp:Array of integer;
begin
if (Step=0) then
begin
form1.Shape6.Visible :=True;
Form1.Shape6.BringToFront;
clickbmp.Visible :=False;
Exit;
end;
if (Pointer)>high(HandCard) then
begin
Pointer:=0;
Step:=Step-1;
if Step>0 then
begin
for i:=0 to high(HandCard) do
begin
Myimage[HandCard[i]].Top:=16;
Myimage[HandCard[i]].Left:=16;
Myimage[HandCard[i]].Visible := False;
MyCard[HandCard[i]].Top :=16;
MYCard[handCard[i]].Left:=16;
end;
end;
end
else
begin
for i:=0 to Pointer-1 do //整理翻完未拿的牌至一处
begin
Myimage[HandCard[i]].Top:=16;
MYimage[HandCard[i]].Left:=104;
Myimage[HandCard[i]].BringToFront ;
MYCard[HandCard[i]].Top:=16;
MyCard[handCard[i]].Left:=104;
end;
end;
//重新排列数组的次序;
i:=0;
SetLength(Temp,0);
while i<=Step-1 do
begin
if (Pointer+i)>High(HandCard) then
break;
SetLength(Temp,i+1);
Temp[i]:=HandCard[pointer+i];
Inc(i);
end;
Counts:=High(Temp)+1;
j:=0;
for i:=High(Temp) downto 0 do
begin
HandCard[Pointer+j]:=Temp[i];
J:=J+1;
end;
LeftY:=104;
j:=0;
i:=Pointer;
while i<=High(handCard) do
begin
if j>Step-1 then
break;
MYimage[HandCard[i]].Top :=UpCard_Top+j;
Myimage[HandCard[i]].left:=LeftY;
Myimage[HandCard[i]].Visible :=True;
Myimage[HandCard[i]].BringToFront;
MyCard[HandCard[i]].Top := UpCard_Top+j;
MYCard[handCard[i]].Left:=LeftY;
LeftY:=LeftY+16;
inc(i);
inc(Pointer);
inc(j);
end;
end;
procedure TForm1.MyMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
MyPoint:TMatter;
begin
Flag:=0;
varX:=X;
VarY:=Y;
OldTop:=(Sender as Timage).Top;
OldLeft:=(Sender as Timage).Left;
MyPoint:=MoreMove((Sender as Timage));
Currently:=MyPoint;
More:=False;
Case MyPoint.Ground of
1:begin
if Counts=0 then
counts:=1;
if (MyPoint.Index+1)=Counts then
Flag:=1;
end;
2:begin
Flag:=1;
end;
3:begin
//上边第一列
if MyPoint.Index+1=Ok1Max then
begin
Flag:=1;
(Sender as Timage).BringToFront;
end;
end;
//---
4:begin
//上边第二列
if MyPoint.Index+1=Ok2Max then
begin
Flag:=1;
(Sender as Timage).BringToFront;
end;
end;
//----
5:begin
//上边第三列
if MyPoint.Index+1=Ok3Max then
begin
Flag:=1;
(Sender as Timage).BringToFront;
end;
end;
6:begin
//上边第四列
if MyPoint.Index+1=Ok4Max then
begin
Flag:=1;
(Sender as Timage).BringToFront;
end;
end;
7:begin
//下边第一列
if MyPoint.Index+1<>Not1Max then
begin
More:=True;
Flag:=1;
end
else
begin
Flag:=1;
(Sender as Timage).BringToFront;
end;
end;
8:begin
//下边第二列
if MyPoint.Index+1<>Not2Max then
begin
More:=True;
Flag:=1;
end
else
begin
Flag:=1;
(Sender as Timage).BringToFront;
end;
end;
9:begin
//下边第三列
if MyPoint.Index+1<>Not3Max then
begin
More:=True;
Flag:=1;
end
else
begin
Flag:=1;
(Sender as Timage).BringToFront;
end;
end;
10:begin
//下边第四列
if MyPoint.Index+1<>Not4Max then
begin
More:=True;
Flag:=1;
end
else
begin
Flag:=1;
(Sender as Timage).BringToFront;
end;
end;
end;//end of Case;
end;
procedure TForm1.MyMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
i,j:integer;
begin
if Flag = 1 then
begin
if More then
begin
Case Currently.Ground of
1,2,3,4,5,6:begin
end;
7:begin
j:=0;
for i:=Currently.Index to High(NotCard1) do
begin
Myimage[NotCard1[i]].Top:=(Sender as Timage).Top+Y-VarY+j;
Myimage[NotCard1[i]].Left:=(Sender as Timage).Left+X-VarX;
Myimage[NotCard1[i]].BringToFront ;
J:=J+15;
end;
end;
8:begin
j:=0;
for i:=Currently.Index to High(NotCard2) do
begin
Myimage[NotCard2[i]].Top:=(Sender as Timage).Top+Y-VarY+j;
Myimage[NotCard2[i]].Left:=(Sender as Timage).Left+X-VarX;
Myimage[NotCard2[i]].BringToFront ;
J:=J+15;
end;
end;
9:begin
j:=0;
for i:=Currently.Index to High(NotCard3) do
begin
Myimage[NotCard3[i]].Top:=(Sender as Timage).Top+Y-VarY+j;
Myimage[NotCard3[i]].Left:=(Sender as Timage).Left+X-VarX;
Myimage[NotCard3[i]].BringToFront ;
J:=J+15;
end;
end;
10:begin
j:=0;
for i:=Currently.Index to High(NotCard4) do
begin
Myimage[NotCard4[i]].Top:=(Sender as Timage).Top+Y-VarY+j;
Myimage[NotCard4[i]].Left:=(Sender as Timage).Left+X-VarX;
Myimage[NotCard4[i]].BringToFront ;
J:=J+15;
end;
end;
end;//end of Case;
end
else // more = flag;
begin
(Sender as Timage).Top :=(Sender as Timage).Top + Y - VarY;
(Sender as Timage).Left :=(Sender as Timage).Left + X - VarX;
(Sender as timage).BringToFront;
end; //end of if more = true;
end; //Flag=1
end;
procedure TForm1.MyMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var i:integer;
begin
if Flag = 1 then Flag:=0;
if CheckGround((Sender as Timage)) then
begin
if (OldTop >= UpCard_Top) and ( OldTop<=UpCard_Top+99)
and (OldLeft>=104) and (OldLeft<= 152) then
begin
Counts:=Counts-1;
if Counts<=0 then
counts:=1;
DelHandCard((Sender as Timage).Tag);
Label1.Caption:='剩余牌数:'+inttostr(High(HandCard)+1);
end;
if (OldTop=DownCard_Top) and (OldLeft=Card0_Left) then
begin
MoveCard(1,1,1);
end;
if (OldTop>=DownCard_Top) and (OldLeft=Card1_Left) then
begin
//下面第一列;
MoveCard(3,1,(Sender as Timage).Tag);
end;
if (OldTop>=DownCard_Top) and (OldLeft=Card2_Left) then
begin
//下面第二列;
MoveCard(3,2,(Sender as Timage).Tag);
end;
if (OldTop>=DownCard_Top) and (OldLeft=Card3_Left) then
begin
//下面第三列;
MoveCard(3,3,(Sender as Timage).Tag);
end;
if (OldTop>=DownCard_Top) and (OldLeft=Card4_Left) then
begin
//下面第四列;
MoveCard(3,4,(Sender as Timage).Tag);
end;
if (OldTop=UPCard_Top) And ((OldLeft=Card1_Left) or (OldLeft=UpCard_Left1)) then
begin
//上面第一列;
MoveCard(2,1,Ok1Max);
end;
if (OldTop=UPCard_Top) And ((OldLeft=Card2_Left) or (OldLeft=UpCard_Left2)) then
begin
//上面第二列;
MoveCard(2,2,Ok2Max);
end;
if (OldTop=UPCard_Top) And ((OldLeft=Card3_Left) or (OldLeft= UpCard_Left3)) then
begin
//上面第三列;
MoveCard(2,3,Ok3Max);
end;
if (OldTop=UPCard_Top) And ((OldLeft=Card4_Left) or (OldLeft=UpCard_Left4))then
begin
//上面第四列;
MoveCard(2,4,Ok4Max);
end;
//自动送牌-------------------------
if NotCard1=nil then
begin
if BackCard<>nil then
begin
MyImage[BackCard[0]].top:=DownCard_Top;
MyImage[BackCard[0]].Left:=Card1_Left;
Myimage[BackCard[0]].Visible:=True;
Myimage[BackCard[0]].Enabled :=True;
Myimage[BackCard[0]].BringToFront ;
Not1Max:=1;
SetLength(NotCard1,Not1Max);
NotCard1[0]:=BackCard[0];
MyCard[BackCard[0]].Top:=DownCard_Top;
MyCard[BackCard[0]].Left:=Card1_Left;
MoveCard(1,0,0);
Label2.Caption:='剩余牌数:'+inttostr(High(BackCard)+1);
end
else
begin
if HandCard<>nil then
begin
Myimage[HandCard[0]].Top :=DownCard_Top;
MYimage[HandCard[0]].Left:=Card1_Left;
MYimage[HandCard[0]].Visible :=true;
Myimage[HandCard[0]].Enabled :=True;
Not1Max:=1;
SetLength(NotCard1,Not1Max);
NotCard1[0]:=HandCard[0];
MyCard[HandCard[0]].Top :=DownCard_Top;
MyCard[HandCard[0]].Left :=Card1_Left;
delHandCard(HandCard[0]);
Label2.Caption:='剩余牌数:0';
Label1.Caption:='剩余牌数:'+inttostr(High(HandCard)+1);
end;
end;
end;
if NotCard2=nil then
begin
if BackCard<>nil then
begin
MyImage[BackCard[0]].top:=DownCard_Top;
MyImage[BackCard[0]].Left:=Card2_Left;
Myimage[BackCard[0]].Visible:=True;
Myimage[BackCard[0]].Enabled := true;
Myimage[BackCard[0]].BringToFront ;
Not2Max:=1;
SetLength(NotCard2,Not1Max);
NotCard2[0]:=backCard[0];
MyCard[BackCard[0]].Top:=DownCard_Top;
MyCard[BackCard[0]].Left:=Card2_Left;
MoveCard(1,0,0);
Label2.Caption:='剩余牌数:'+inttostr(High(BackCard)+1);
end
else
begin
if HandCard<>nil then
begin
Myimage[HandCard[0]].Top :=DownCard_Top;
MYimage[HandCard[0]].Left:=Card2_Left;
MYimage[HandCard[0]].Visible :=true;
Myimage[HandCard[0]].Enabled := True;
Not2Max:=1;
Setlength(NotCard2,Not2Max);
NotCard2[0]:=HandCard[0];
MyCard[HandCard[0]].Top :=DownCard_Top;
MyCard[HandCard[0]].Left :=Card2_Left;
delHandCard(HandCard[0]);
Label2.Caption:='剩余牌数:0';
Label1.Caption:='剩余牌数:'+inttostr(High(HandCard)+1);
end;
end;
end;
if NotCard3=nil then
begin
if BackCard<>nil then
begin
MyImage[BackCard[0]].top:=DownCard_Top;
MyImage[BackCard[0]].Left:=Card3_Left;
Myimage[BackCard[0]].Visible:=True;
MYimage[BackCard[0]].Enabled :=True;
Myimage[BackCard[0]].BringToFront ;
Not3Max:=1;
SetLength(NotCard3,Not3Max);
NotCard3[0]:=BackCard[0];
MyCard[BackCard[0]].Top:=DownCard_Top;
MyCard[BackCard[0]].Left:=Card3_Left;
MoveCard(1,0,0);
Label2.Caption:='剩余牌数:'+inttostr(High(BackCard)+1);
end
else
begin
if HandCard<>nil then
begin
Myimage[HandCard[0]].Top :=DownCard_Top;
MYimage[HandCard[0]].Left:=Card3_Left;
MYimage[HandCard[0]].Visible :=true;
Myimage[HandCard[0]].Enabled :=True;
Not3Max:=1;
SetLength(NotCard3,Not3Max);
NotCard3[0]:=HandCard[0];
MyCard[HandCard[0]].Top :=DownCard_Top;
MyCard[HandCard[0]].Left :=Card3_Left;
delHandCard(HandCard[0]);
Label2.Caption:='剩余牌数:0';
Label1.Caption:='剩余牌数:'+inttostr(High(HandCard)+1);
end;
end;
end;
if NotCard4=nil then
begin
if BackCard<>nil then
begin
MyImage[BackCard[0]].top:=DownCard_Top;
MyImage[BackCard[0]].Left:=Card4_Left;
Myimage[BackCard[0]].Visible:=True;
Myimage[BackCard[0]].Enabled:=True;
Myimage[BackCard[0]].BringToFront ;
Not4Max:=1;
SetLength(NotCard4,Not4Max);
NotCard4[0]:=BackCard[0];
MyCard[BackCard[0]].Top:=DownCard_Top;
MyCard[BackCard[0]].Left:=Card4_Left;
MoveCard(1,0,0);
Label2.Caption:='剩余牌数:'+inttostr(High(BackCard)+1);
end
else
begin
if HandCard<>nil then
begin
Myimage[HandCard[0]].Top :=DownCard_Top;
MYimage[HandCard[0]].Left:=Card4_Left;
MYimage[HandCard[0]].Visible :=true;
Myimage[HandCard[0]].Enabled :=True;
Not4Max:=1;
Setlength(NotCard4,Not4Max);
NotCard4[0]:=HandCard[0];
MyCard[HandCard[0]].Top :=DownCard_Top;
MyCard[HandCard[0]].Left :=Card4_Left;
delHandCard(HandCard[0]);
Label2.Caption:='剩余牌数:0';
Label1.Caption:='剩余牌数:'+inttostr(High(HandCard)+1);
end;
end;
end;
end
else
begin
if Not More then
begin
(Sender as Timage).Top := OldTop;
(Sender as Timage).Left := OldLeft;
end
else
begin
for i:=0 to High(Currently.Card)do
begin
MyImage[Currently.Card[i]].Top:=MyCard[Currently.Card[i]].Top;
MyImage[Currently.Card[i]].Left:=MyCard[Currently.Card[i]].Left;
end;
end;
end;
if (high(OkCard1)=12) and (high(OkCard2)=12) and (high(Okcard3)=12) and (high(OkCard4)=12) then
Application.MessageBox('恭喜你!!!,成功了!!!'+#13#10+'祝你今天有个好心情','开心一刻',MB_Ok+MB_IconInformation);
end;
procedure TForm1.DelHandCard(CardVar: integer);
var
i,j:integer;
MoveIndex:Array of integer;
Has:Bool;
begin
Has:=false;
for i:=0 to High(HandCard) do
begin
if HandCard[i]=CardVar then
Has:=True;
end;
if Has then
begin
SetLength(MoveIndex,High(HandCard));
j:=0;
for i:=0 to High(MoveIndex) do
begin
if HandCard[j]=CardVar then
begin
j:=j+1;
end;
MoveIndex[i]:=HandCard[j];
inc(j);
end;
Setlength(HandCard,High(HandCard));
for i:=0 to High(MoveIndex) do
begin
HandCard[i]:=MoveIndex[i];
end;
if (pointer-1)<=0 then
Pointer:=0
else
Pointer:=Pointer-1;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
begin
if HandCard = nil then
exit;
j:=Downcard_Top;
for i:=0 to High(HandCard) do
begin
Myimage[HandCard[i]].Top :=j;
MYimage[HandCard[i]].Left:=130;
MYimage[HandCard[i]].Visible :=true;
Myimage[HandCard[i]].BringToFront;
J:=J+15;
end;
end;
function TForm1.CheckGround(Card: Timage): bool;
var
CardCenterX,CardCenterY:integer;
rangCenterX,rangCenterY:integer;
Cx,Cy,rx,ry:integer;
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) nil then
begin
for i:=0 to High(BackCard)-1 do
begin
BackCard[i]:=BackCard[i+1];
end;
SetLength(BackCard,High(BackCard));
end;
end;
2:begin
Case Colvar of
1:begin
dec(Ok1Max);
SetLength(OkCard1,Ok1Max);
end;
2:begin
Dec(Ok2Max);
SetLength(OkCard2,ok2Max);
end;
3:begin
dec(Ok3Max);
SetLength(OkCard3,Ok3Max);
end;
4:begin
dec(Ok4Max);
SetLength(OkCard4,Ok4Max);
end;
end;
end;
3:begin
case ColVar of
1:begin
i:=0;
while i<= High(Notcard1) do
begin
if NotCard1[i]=CardVar then
begin
Not1Max:=i;
SetLength(NotCard1,Not1Max);
break;
end;
inc(i);
end;
end;
2:begin
i:=0;
while i<=High(NotCard2) do
begin
if NotCard2[i]=CardVar then
begin
Not2Max:=i;
SetLength(NotCard2,Not2Max);
break;
end;
inc(i);
end;
end; //2 end;
3:begin
i:=0;
While i<=high(Notcard3) do
begin
if NotCard3[i]=CardVar then
begin
Not3Max:=i;
SetLength(NotCard3,Not3Max);
break;
end;
Inc(i);
end;
end;
4:begin
i:=0;
While i<=High(NotCard4) do
begin
if NotCard4[i]=CardVar then
begin
Not4Max:=i;
SetLength(NotCard4,Not4Max);
Break;
end;
Inc(i);
end;
end;
end;
end;
end;//-
end;
function TForm1.MoreMove(Card: Timage): TMatter;
var
i,j:integer;
Matter:TMatter;
begin
//覆盖范围检验
Matter.Ground:=0;
Matter.Index :=0;
SetLength(Matter.Card,0);
Result:=Matter;
if ((Card.Top>=UpCard_Top) and (Card.Top<=UpCard_Top+2)) and ((Card.Left>=104) and (Card.Left<=152)) then
begin
//取牌处
Matter.Ground :=1;
Matter.Index :=Card.Top-UpCard_Top;
Result:=Matter;
end;
if (Card.Top=DownCard_Top) and (Card.Left=Card0_Left) then
begin
//背牌处;
Matter.Ground := 2;
Matter.Index :=0;
Result:=Matter;
end;
if (Card.Top=UpCard_Top) and ((Card.Left=Card1_Left) or (Card.Left=UpCard_Left1)) then
begin
//第一列摆放好的牌位
Matter.Ground:=3;
for i:=0 to high(OkCard1) do
begin
if OkCard1[i]=Card.Tag then
begin
Matter.Index := i;
end;
end;
Result:=Matter;
end;
if (Card.Top=UpCard_Top) and ((Card.Left=UpCard_Left2)or(Card.Left=Card2_Left)) then
begin
//第二列摆放好的牌位
Matter.Ground:=4;
for i:=0 to high(OkCard2) do
begin
if OkCard2[i]=Card.Tag then
begin
Matter.Index := i;
end;
end;
Result:=Matter;
end;
if (Card.Top=UpCard_Top) and ((Card.Left=UpCard_Left3)or(Card.Left=Card3_Left)) then
begin
//第三列摆放好的牌位
Matter.Ground:=5;
for i:=0 to high(OkCard3) do
begin
if OkCard3[i]=Card.Tag then
begin
Matter.Index := i;
end;
end;
Result:=Matter;
end;
if (Card.Top=UpCard_Top) and ((Card.Left=UpCard_Left4)or(Card.Left=Card4_Left)) then
begin
//第四列摆放好的牌位
Matter.Ground:=6;
for i:=0 to high(OkCard4) do
begin
if OkCard4[i]=Card.Tag then
begin
Matter.Index := i;
end;
end;
Result:=Matter;
end;
//---------------------------------------------
//下边牌
if (Card.Top>=DownCard_Top) and (Card.Left=Card1_Left) then
begin
//下边第一列;
Matter.Ground := 7;
for i:=0 to high(NotCard1) do
begin
if NotCard1[i]=Card.Tag then
begin
Matter.Index:=i;
SetLength(Matter.Card,High(NotCard1)+1-i);
break;
end;
end;
j:=0;
for i:=Matter.Index to High(NotCard1) do
begin
Matter.Card[j]:=NotCard1[i];
inc(j);
end;
Result:=Matter;
end;
if (Card.Top>=DownCard_Top) and (Card.Left=Card2_Left) then
begin
//下边第二列;
Matter.Ground := 8;
for i:=0 to high(NotCard2) do
begin
if NotCard2[i]=Card.Tag then
begin
Matter.Index := i;
SetLength(Matter.Card,High(NotCard2)+1-i);
Break;
end;
end;
j:=0;
for i:=Matter.Index to high(NotCard2) do
begin
Matter.Card[j]:=NotCard2[i];
inc(j);
end;
Result:=matter;
end;
if (Card.Top>=DownCard_Top) and (Card.Left=Card3_Left) then
begin
//下边第三列;
Matter.Ground :=9;
for i:=0 to high(NotCard3) do
begin
if NotCard3[i]=Card.Tag then
begin
Matter.Index := i;
SetLength(Matter.Card,High(NotCard3)+1-i);
Break;
end;
end;
j:=0;
for i:=Matter.Index to high(NotCard3) do
begin
Matter.Card[j]:=NotCard3[i];
inc(j);
end;
Result:=matter;
end;
if (Card.Top>=DownCard_Top) and (Card.Left=Card4_Left) then
begin
//下边第四列
Matter.Ground :=10 ;
for i:=0 to high(NotCard4) do
begin
if NotCard4[i]=Card.Tag then
begin
Matter.Index := i;
SetLength(Matter.Card,High(NotCard4)+1-i);
Break;
end;
end;
j:=0;
for i:=Matter.Index to high(NotCard4) do
begin
Matter.Card[j]:=NotCard4[i];
inc(j);
end;
Result:=matter;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if CloseWord then
begin
My:=My-1;
if my<-190 then
my:=width-100;
Label3.Top:=form1.height-80;
Label3.Left:=My;
end;
end;
procedure TForm1.A1Click(Sender: TObject);
begin
AboutBox.ShowModal;
end;
procedure TForm1.S1Click(Sender: TObject);
begin
Form1.Button1.Click;
end;
procedure TForm1.C1Click(Sender: TObject);
begin
if Closeword then
begin
CloseWord:=False;
Timer1.Enabled:=False;
Label3.Visible :=False;
C1.Caption:='打开字幕(&O)';
Form1.Repaint;
end
else
begin
Timer1.Enabled :=True;
Label3.Visible :=True;
CloseWord:=True;
C1.Caption :='关闭字幕(&C)';
end;
end;
procedure TForm1.FormPaint(Sender: TObject);
var
x,y:integer;
begin
y := 0;
while y < Height do
begin
x := 0;
while x < Width do
begin
Canvas.Draw(x, y, Bitmap);
x := x + Bitmap.Width;
end;
y := y + Bitmap.Height;
end;
end;
procedure TForm1.WMEraseBkgnd(var m: TWMEraseBkgnd);
begin
m.Result := LRESULT(False);
end;
procedure TForm1.N10Click(Sender: TObject);
begin
if (not winhelp(Handle,'PlayCard.hlp',HELP_fINDER,0)) then
begin
showmessage('不能访问帮助信息');
exit;
end;
end;
end.