#2
yangguofa2004-06-09 20:10
procedure TForm1.CardsdbClick(Sender: TObject); begin with sender as tdeckcards do begin top:=200; left:=180; pause(2); chupai_color:=value div 13; chupai_num:=1; chupai_value:=value; chupai_ower:=0; end; for i:=1 to 3 do chupai((chupai_ower+1) mod 4); end; procedure TForm1.CardsClick(Sender: TObject); begin with sender as tdeckcards do top:=fcimager1.height-96-10-20; end; procedure TForm1.B1Click(Sender: TObject); var middlex,middley:integer; begin init_game; for i:=1 to 108 do if assigned(cardarray[i]) then cardarray[i].free; init_card_value; middlex:=(fcimager1.width-71-2*108) div 2; middley:=(fcimager1.height-96) div 2; for i:=1 to 108 do begin cardarray[i].parent:= form1; cardarray[i].left:=middlex+(i-1)*2 ; cardarray[i].top:= middley; cardarray[i].faceup:=true; {测试使用时全显示} end; timer1.enabled:=true; end; procedure TForm1.Timer1Timer(Sender: TObject); var tempi,player0startx,player1starty,player2startx,player3starty,player4startx:integer; begin currentcardnum:=currentcardnum+1; player0startx:=(fcimager1.width-71-15*(currentcardnum-1)) div 2; player1starty:=(fcimager1.height-96+15*(currentcardnum-1)) div 2; player2startx:=(fcimager1.width-71+15*(currentcardnum-1)) div 2; player3starty:=(fcimager1.height-96-15*(currentcardnum-1)) div 2; for i:=1 to currentcardnum do begin cardarray[(i-1)*4+1].onclick:=cardsclick; cardarray[(i-1)*4+1].ondblclick:=cardsdbclick; cardarray[(i-1)*4+1].left:=player0startx+(i-1)*15 ; cardarray[(i-1)*4+1].top:= fcimager1.height-96-10; cardarray[(i-1)*4+2].left:=fcimager1.width-71-10 ; cardarray[(i-1)*4+2].top:= player1starty-(i-1)*15; cardarray[(i-1)*4+3].left:=player2startx-(i-1)*15 ; cardarray[(i-1)*4+3].top:= fcimager1.top+10; cardarray[(i-1)*4+4].left:=fcimager1.left+10 ; cardarray[(i-1)*4+4].top:= player3starty+(i-1)*15; cardarray[(i-1)*4+1].faceup:=true; {判断南家是否能叫牌} if cardarray[(i-1)*4+1].value=53 then {小王} for j:=1 to currentcardnum do begin if (cardarray[(j-1)*4+1].value<53) and (((cardarray[(j-1)*4+1].value-stagE1) mod 13)=0) then {有该级的牌} if ((cardarray[(j-1)*4+1].value-stage1) div 13)=1 then {草花} speedbutton5.enabled:=true else if ((cardarray[(j-1)*4+1].value-stage1) div 13)=3 then {黑桃} speedbutton3.enabled:=true; if (cardarray[(j-1)*4+1].value=53) and (i<>j) then speedbutton7.enabled:=true; {无将} end; if cardarray[(i-1)*4+1].value=54 then {大王} for j:=1 to currentcardnum do begin if (cardarray[(j-1)*4+1].value<53) AND (((cardarray[(j-1)*4+1].value-STAGE1) mod 13)=0) then {有该级的牌} if ((cardarray[(j-1)*4+1].value-stage1) div 13)=2 then {方块} speedbutton6.enabled:=true else if ((cardarray[(j-1)*4+1].value-stage1) div 13)=0 then {红心} speedbutton4.enabled:=true; if (cardarray[(j-1)*4+1].value=54) and (i<>j) then speedbutton7.enabled:=true; {无将} end; end; player4startx:=(fcimager1.width-71-2*(108-currentcardnum*4)) div 2; for i:=currentcardnum*4+1 to 108 do cardarray[i].left:=player4startx+(i-currentcardnum*4)*2 ; if currentcardnum=25 then begin timer1.Enabled:=false; TISHI_LIANGPAI(); end; end; procedure tform1.pause(pausetime:integer); var currentTime:longint; begin form1.refresh; currentTime:=GetTickCount; while GetTickCount<currentTime+pausetime*1000 do ; end; procedure TForm1.fcShapeBtn1Click(Sender: TObject); begin ShowAboutBox; end; procedure TForm1.SpeedButton3Click(Sender: TObject); begin jiaopai(0,3); end; procedure tform1.jiaopai(ower,cardcolor:integer); var tempi,tempstage,tempjiaopainum,tempwujiang:integer; hintstring,temphintstring:string[50]; begin tempjiaopainum:=0; tempwujiang:=0; if (ower=0) or (ower=2) then tempstage:=stage1 else tempstage:=stage2; case cardcolor of 2:{方块} for j:=1 to currentcardnum do if (cardarray[(j-1)*4+ower+1].value=54) or ((((cardarray[(j-1)*4+ower+1].value-tempstage) div 13)=2) and (((cardarray[(j-1)*4+ower+1].value-tempSTAGE) mod 13)=0)) then begin cardarray[(j-1)*4+ower+1].top:=100+(fcimager1.height-96) div 2; cardarray[(j-1)*4+ower+1].left:=(fcimager1.width-75) div 2+tempjiaopainum*15; tempjiaopainum:=tempjiaopainum+1; temphintstring:='方块为主牌'; end; 1:{草花} for j:=1 to currentcardnum do if (cardarray[(j-1)*4+ower+1].value=53) or ((((cardarray[(j-1)*4+ower+1].value-tempstage) div 13)=1) and (((cardarray[(j-1)*4+ower+1].value-tempSTAGE) mod 13)=0)) then begin cardarray[(j-1)*4+ower+1].top:=100+(fcimager1.height-96) div 2; cardarray[(j-1)*4+ower+1].left:=(fcimager1.width-75) div 2+tempjiaopainum*15; tempjiaopainum:=tempjiaopainum+1; temphintstring:='草花为主牌'; end; 0:{红心} for j:=1 to currentcardnum do if (cardarray[(j-1)*4+ower+1].value=54) or ((((cardarray[(j-1)*4+ower+1].value-tempstage) div 13)=0) and (((cardarray[(j-1)*4+ower+1].value-tempSTAGE) mod 13)=0)) then begin cardarray[(j-1)*4+ower+1].top:=100+(fcimager1.height-96) div 2; cardarray[(j-1)*4+ower+1].left:=(fcimager1.width-75) div 2+tempjiaopainum*15; tempjiaopainum:=tempjiaopainum+1; temphintstring:='红心为主牌'; end; 3:{黑桃} for j:=1 to currentcardnum do if (cardarray[(j-1)*4+ower+1].value=53) or ((((cardarray[(j-1)*4+ower+1].value-tempstage) div 13)=3) and (((cardarray[(j-1)*4+ower+1].value-tempSTAGE) mod 13)=0)) then begin cardarray[(j-1)*4+ower+1].top:=100+(fcimager1.height-96) div 2; cardarray[(j-1)*4+ower+1].left:=(fcimager1.width-75) div 2+tempjiaopainum*15; tempjiaopainum:=tempjiaopainum+1; temphintstring:='黑桃为主牌'; end; 4:{无将} for j:=1 to currentcardnum do begin if (cardarray[(j-1)*4+ower+1].value=54) or (cardarray[(j-1)*4+ower+1].value=53) then tempwujiang:=(j-1)*4+ower+1; if (cardarray[(j-1)*4+ower+1].value=cardarray[tempwujiang].value) and (((j-1)*4+ower+1)<>tempwujiang) then begin cardarray[(j-1)*4+ower+1].top:=100+(fcimager1.height-96) div 2; cardarray[(j-1)*4+ower+1].left:=(fcimager1.width-75) div 2+tempjiaopainum*15; tempjiaopainum:=tempjiaopainum+1; cardarray[tempwujiang].top:=100+(fcimager1.height-96) div 2; cardarray[tempwujiang].left:=(fcimager1.width-75) div 2+tempjiaopainum*15; tempjiaopainum:=tempjiaopainum+1; temphintstring:='无将'; end; end; end; currentstage:=tempstage; fcshapebtn1.caption:=inttostr(tempstage); case ower of 0:begin playower:=0; fcshapebtn1.orientation:=sodown; hintstring:='南家当庄,'+temphintstring; end; 1:begin playower:=1; fcshapebtn1.orientation:=soright; hintstring:='东家当庄,'+temphintstring; end; 2:begin playower:=2; fcshapebtn1.orientation:=soup; hintstring:='北家当庄,'+temphintstring; end; 3:begin playower:=3; fcshapebtn1.orientation:=soleft; hintstring:='西家当庄,'+temphintstring; end; end; zhupaicolor:=cardcolor; fcshapebtn1.hint:=hintstring; pause(1); if currentcardnum=25 then begin qidipai(playower); for tempi:=0 to 3 do if tempi=playower then sortcard(tempi,1) else sortcard(tempi,0); diandipai(playower); end; end; |
unit main;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, fcImager, Menus,about, DeckCard, ExtCtrls, Buttons, fcButton, fcImgBtn, fcShapeBtn;
type TForm1 = class(TForm) MainMenu1: TMainMenu; N1: TMenuItem; B1: TMenuItem; N2: TMenuItem; X1: TMenuItem; O1: TMenuItem; H1: TMenuItem; I1: TMenuItem; N3: TMenuItem; A1: TMenuItem; Timer1: TTimer; SpeedButton3: TSpeedButton; SpeedButton4: TSpeedButton; SpeedButton5: TSpeedButton; SpeedButton6: TSpeedButton; SpeedButton7: TSpeedButton; procedure A1Click(Sender: TObject); procedure CardsClick(Sender: TObject); procedure CardsdbClick(Sender: TObject); procedure B1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure fcShapeBtn1Click(Sender: TObject); procedure SpeedButton3Click(Sender: TObject); procedure SpeedButton4Click(Sender: TObject); procedure SpeedButton5Click(Sender: TObject); procedure SpeedButton6Click(Sender: TObject); procedure SpeedButton7Click(Sender: TObject); procedure I1Click(Sender: TObject); procedure X1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } procedure init_card_value; procedure init_game; procedure TISHI_LIANGPAI(); procedure jiaopai(ower,cardcolor:integer); procedure qidipai(ower:integer); procedure sortcard(ower,dipai:integer); procedure liangdipai(); procedure pause(pausetime:integer); procedure diandipai(ower:integer); procedure chupai(ower:integer); function countcolornum(ower,color:integer):integer;
public { Public declarations } end;
var Form1: TForm1; currentstage,stage1,stage2,playower,currentcardnum,i,j,k,zhupaicolor:integer; cardarray:array [1..108] of tdeckcards; thebox:twincontrol; chupai_ower,chupai_color,chupai_num,chupai_value:integer; implementation
{$R *.DFM}
procedure TForm1.A1Click(Sender: TObject); begin ShowAboutBox; end; {新游戏开始} procedure tform1.init_game; begin stage1:=2; stage2:=2; playower:=0; end; {新局开始初始化值} procedure tform1.init_card_value; var nTemp,k1,k2,k3: Integer; begin timer1.Enabled:=false; zhupaicolor:=-1; fcshapebtn1.orientation:=soup; fcshapebtn1.hint:=''; speedbutton3.enabled:=FALSE; speedbutton4.enabled:=FALSE; speedbutton5.enabled:=FALSE; speedbutton6.enabled:=FALSE; speedbutton7.enabled:=FALSE; TheBox := TWinControl.create( self ); currentcardnum:=0; for i := 1 to 54 do begin cardarray[i] := TdeckCards.create( self ); cardarray[i].parent := thebox; CardArray[i].value := i; cardarray[i+54] := TdeckCards.create( self ); cardarray[i+54].parent := thebox; cardarray[i+54].value:=i; end; Randomize; val(TimeToStr(Time),k3,i); for i := 1 to k3 do for j := 1 to 108 do begin k1:= Random(108) + 1; k2:= Random(108) + 1; nTemp := CardArray[k1].value; CardArray[k1].value := CardArray[k2].value; CardArray[k2].value := nTemp; end; end;