Помомощь в игре

  • Автор темы 8922215
  • Дата начала
Статус
Закрыто для дальнейших ответов.
8

8922215

Гость
#1
Люди ай ниид хэлп! Плиииз...Очень прошу!
Вот имеетца текст:

Код:
unit Kar1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Menus, StdCtrls;

type
TForm1 = class(TForm)
Image1: TImage;
MainMenu1: TMainMenu;
N1: TMenuItem;
N3: TMenuItem;
N2: TMenuItem;
Image2: TImage;
Procedure LoadQuestion;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure N1Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

Type
PQues = ^TQues;

TQues = Record
Num: Byte;
NameQ, NameA, Title: String[80];
Next, Prev: PQues;
End;

TChips = Record
X, Y: Integer;
Pic: TBitmap;
End;

var
Form1: TForm1;
FQues, CurQues: PQues;
Ques, Ans, Fld, Back: TBitmap;
Chips: Array[0..5] of TChips;
UnderChips: Array[0..5] of TBitmap;
Pnts: Array[0..13{15}] of Integer;
kHW: Real;
NumQues, Step, MayMove, MayUp, NumChip, ChipH, ChipW,
XDn, YDn, CurX, CurY, CurDx, CurDy, Defl: Integer;


implementation

{$R *.DFM}

Function Min(A, B: Real): Real;
Begin
If A<B Then Min:=A Else Min:=B;
End;

Function Max(A, B: Real): Real;
Begin
If A>B Then Max:=A Else Max:=B;
End;

procedure TForm1.FormCreate(Sender: TObject);
Var
F: TextFile;
Pr, Cur: PQues;
St: String;
a: Integer;
Rect: TRect;
Label End_;
begin
kHW:=Screen.Height/536;
Height:=Screen.Height;
Width:=Round(Width*kHW);
AssignFile(F,'Karapuz.ini');
ReSet(F);
ReadLn(F,St);
ReadLn(F,NumQues);
If NumQues<1 Then Goto End_;
Pr:=Nil;
For a:=1 to NumQues do
Begin
New(Cur);
If Cur=NIL Then
Begin
NumQues:=0;
Goto End_;
End;
ReadLn(F,St);
Cur^.Num:=1;
Cur^.Title:=St;
Cur^.Prev:=Pr;
ReadLn(F,St);
Cur^.NameQ:=St;
ReadLn(F,St);
Cur^.NameA:=St;
If Pr<>Nil Then Pr^.Next:=Cur;
If a=1 Then FQues:=Cur;
Pr:=Cur;
End;
Cur^.Next:=FQues;
FQues^.Prev:=Cur;
Ques:=TBitmap.Create;
Ans:=TBitmap.Create;
Fld:=TBitmap.Create;
Back:=TBitmap.Create;
ReadLn(F,St);
ReadLn(F,St);
Image2.Visible:=False;
Image2.Picture.LoadFromFile(St);
Fld.Height:=ClientHeight;
Fld.Width:=ClientWidth;
Image1.Height:=Fld.Height;
Image1.Width:=Fld.Width;
Rect:=Bounds(0,0,Fld.Width,Fld.Height);
Fld.Canvas.StretchDraw(Rect,Image2.Picture.Graphic);
Ques.Palette:=Fld.Palette;
Ans.Palette:=Fld.Palette;
Back.Palette:=Fld.Palette;
Back.Width:=Fld.Width;
Back.Height:=Fld.Height;
For a:=0 to 5{14} do
Begin
Read(F,Pnts[a]);
Pnts[a]:=Round(Pnts[a]*kHW);
End;
ReadLn(F,Pnts[6]);
Pnts[6]:=Round(Pnts[6]*kHW);
ReadLn(F,St);
Image2.Transparent:=True;
Image2.Picture.Bitmap.Palette:=Fld.Palette;
Rect:=Bounds(0,0,Round(46*kHW),Round(37*kHW));
For a:=0 to 5 do
Begin
ReadLn(F,St);
Chips[a].Pic:=TBitmap.Create;
UnderChips[a]:=TBitmap.Create;
Chips[a].Pic.Palette:=Fld.Palette;
UnderChips[a].Palette:=Fld.Palette;
Image2.Picture.LoadFromFile(St);
Image2.Picture.Bitmap.TransparentColor:=Image2.Picture.Bitmap.Canvas.Pixels[0,0];
Chips[a].Pic.Height:=Round(37*kHW);
Chips[a].Pic.Width:=Round(46*kHW);
Chips[a].Pic.Canvas.StretchDraw(Rect,Image2.Picture.Graphic);
UnderChips[a].Width:=Chips[a].Pic.Width;
UnderChips[a].Height:=Chips[a].Pic.Height;
Chips[a].Pic.Transparent:=True;
Chips[a].Pic.TransparentColor:=Chips[a].Pic.Canvas.Pixels[0,0];
End;
ChipH:=Chips[0].Pic.Height;
ChipW:=Chips[0].Pic.Width;
Image2.Transparent:=False;
For a:=7 to 12 do
Begin
Read(F,Pnts[a]);
Pnts[a]:=Round(Pnts[a]*kHW);
End;
ReadLn(F,Pnts[13]);
Pnts[13]:=Round(Pnts[13]*kHW);
ReadLn(F,St);
ReadLn(F,Defl);
Defl:=Round(Defl*kHW);

End_:
CloseFile(F);

If NumQues<1 Then
Begin
N1.Enabled:=False;
End;

Step:=0;
MayMove:=-1;
MayUp:=0;
NumChip:=-1;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var
Cur, Nx: PQues;
a: Integer;
begin
Nx:=FQues;
For a:=1 to NumQues do
Begin
Cur:=Nx;
Nx:=Cur^.Next;
Dispose(Cur);
End;
Ques.Free;
Ans.Free;
Fld.Free;
Back.Free;
For a:=0 to 5 do
Begin
Chips[a].Pic.Free;
UnderChips[a].Free;
End;
end;

Procedure TForm1.LoadQuestion;
Var
a: Integer;
RectD, RectS: TRect;
Begin
If Step=1 Then
Begin
CurQues:=FQues^.Prev;
Image1.Visible:=True;
End;
{Image1}Back.Canvas.Draw(0,0,Fld);
If Step mod 2 = 1 Then
Begin
CurQues:=CurQues^.Next;
Caption:='Карапуз - '+CurQues^.Title;	 
MayMove:=0;
Image2.Picture.LoadFromFile(CurQues^.NameQ);
RectD:=Bounds(0,0,Round(300*kHW),Round(390*kHW));
{Ques}Back.Canvas.StretchDraw(RectD,Image2.Picture.Graphic);
{Image1Back.Canvas.Draw(0,0,Ques);}
End Else
Begin
MayMove:=-1;
Image2.Picture.LoadFromFile(CurQues^.NameA);
RectD:=Bounds(0,0,Round(300*kHW),Round(390*kHW));
{Ans}Back.Canvas.StretchDraw(RectD,Image2.Picture.Graphic);
{Image1Back.Canvas.Draw(0,0,Ans);}
End;
Image1.Canvas.Draw(0,0,Back);
For a:=0 to 5 do
Begin
If Step mod 2=1 Then
Begin
Chips[a].X:=Pnts[a+1+7];
Chips[a].Y:=Pnts[7];
End;
RectS:=Bounds(Chips[a].X - ChipW div 2,
Chips[a].Y - ChipH div 2, ChipW, ChipH);
RectD:=Bounds(0,0,ChipW,ChipH);
UnderChips[a].Canvas.CopyRect(RectD,{Fld}Back.Canvas,RectS);
Image1.Canvas.Draw(RectS.Left,RectS.Top,Chips[a].Pic);
End;
End;

procedure TForm1.N1Click(Sender: TObject);
begin
N2.Enabled:=True;
N1.Enabled:=False;
Step:=1;
LoadQuestion;
end;

procedure TForm1.N3Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.N2Click(Sender: TObject);
begin
If Step<2*NumQues Then
Begin
Inc(Step);
LoadQuestion;
End Else
Begin
Step:=-1;
NumChip:=-1;
MayMove:=-1;
N1.Enabled:=True;
N2.Enabled:=False;
Image1.Visible:=False;
Caption:='Карапуз';
End;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Var
a: Integer;
XY: TPoint;
begin
If (MayMove=0) and (Button=mbLeft) Then
Begin
For a:=0 to 5 do
Begin
If (X>=Chips[a].X - ChipW div 2) and
(X<=Chips[a].X + ChipW div 2) and
(Y>=Chips[a].Y - ChipH div 2) and
(Y<=Chips[a].Y + ChipH div 2) Then
Begin
NumChip:=a;
XDn:=X;
YDn:=Y;
CurX:=Chips[a].X;
CurY:=Chips[a].Y;
MayMove:=1;
MayUp:=1;
Screen.Cursor:=crNone;
GetCursorPos(XY);
CurDx:=XY.X-(X+Left);
CurDy:=XY.Y-(Y+Top);
Break;
End;
End;
End;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
If (MayMove<>0) and (Button=mbLeft) and (MayMove<>-1) and
(MayUp=0) Then
Begin
Chips[NumChip].X:=CurX;
Chips[NumChip].Y:=CurY;
NumChip:=-1;
MayMove:=0;
Screen.Cursor:=crDefault;
End;
If MayUp=1 Then MayUp:=0;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
Var
a, b, c, n, Chck, Xold, Yold, Dx, Dy: Integer;
RectS, RectD: TRect;
begin
If (MayMove=1) Then
Begin
Image1.Canvas.Draw(CurX-ChipW div 2,CurY-ChipH div 2,UnderChips[NumChip]);
Xold:=CurX;
Yold:=CurY;
Dx:=X-XDn;
Dy:=Y-YDn;
b:=Round(Max(Abs(Dx),Abs(Dy)));

Chck:=0;
For c:=1 to b do
If (Chck<>1) and (b<>0) Then
Begin
Chck:=0;
n:=c;
CurX:=Round(Xold+Dx*c/b);
CurY:=Round(Yold+Dy*c/b);
{		 For a:=1 to 6 do
Begin
If Not ((CurX>=Pnts[a]-Defl) and (CurX<=Pnts[a]+Defl) and
(CurY>=Pnts[7]-Defl) and (CurY<=Pnts[0]+Defl)) Then
Begin
Inc(Chck);
End Else Break;
End;

If Chck=6 Then
Begin
If Not ((CurX>=Pnts[1]-Defl) and (CurX<=Pnts[8]+Defl) and
(CurY>=Pnts[7]-Defl) and (CurY<=Pnts[7]+Defl)) Then
Begin
Inc(Chck);
End;
End;

If Chck=7 Then
Begin
If Not ((CurX>=Pnts[8]-Defl) and (CurX<=Pnts[8]+Defl) and
(CurY>=Pnts[10]-Defl) and (CurY<=Pnts[7]+Defl)) Then
Begin
Inc(Chck);
End;
End;

If Chck=8 Then
For a:=10 to 15 do
Begin
If Not ((CurX>=Pnts[9]-Defl) and (CurX<=Pnts[8]+Defl) and
(CurY>=Pnts[a]-Defl) and (CurY<=Pnts[a]+Defl)) Then
Begin
Inc(Chck);
End Else Break;
End;}
If Chck<>1 Then
For a:=0 to 5 do
Begin
If (a<>NumChip) and (Chck<>1) Then
If
(( ((CurX-ChipW div 2>=Chips[a].X-ChipW div 2) and
(CurX-ChipW div 2<=Chips[a].X+ChipW div 2) and
(CurY-ChipH div 2>=Chips[a].Y-ChipH div 2) and
(CurY-ChipH div 2<=Chips[a].Y+ChipH div 2)) or

((CurX-ChipW div 2>=Chips[a].X-ChipW div 2) and
(CurX-ChipW div 2<=Chips[a].X+ChipW div 2) and
(CurY+ChipH div 2>=Chips[a].Y-ChipH div 2) and
(CurY+ChipH div 2<=Chips[a].Y+ChipH div 2)) or

((CurX+ChipW div 2>=Chips[a].X-ChipW div 2) and
(CurX+ChipW div 2<=Chips[a].X+ChipW div 2) and
(CurY-ChipH div 2>=Chips[a].Y-ChipH div 2) and
(CurY-ChipH div 2<=Chips[a].Y+ChipH div 2)) or

((CurX+ChipW div 2>=Chips[a].X-ChipW div 2) and
(CurX+ChipW div 2<=Chips[a].X+ChipW div 2) and
(CurY+ChipH div 2>=Chips[a].Y-ChipH div 2) and
(CurY+ChipH div 2<=Chips[a].Y+ChipH div 2)) or
(CurX+ChipW div 2>=Image1.Width) or
(CurX-ChipW div 2<=0) or
(CurY+ChipH div 2>=Image1.Height) or
(CurY-ChipH div 2<=0) )) Then
Begin
Chck:=1;
End;
End;
End;
If b<>0 Then
Begin
CurX:=Round(Xold+Dx*(n-1)/b);
CurY:=Round(Yold+Dy*(n-1)/b);
End Else
Begin
CurX:=Xold;
CurY:=Yold;
End;
XDn:=XDn+CurX-Xold;
YDn:=YDn+CurY-Yold;
If (XDn<>X) or (YDn<>Y) Then MayMove:=2;
RectS:=Bounds(CurX-ChipW div 2,CurY-ChipH div 2,ChipW,ChipH);
RectD:=Bounds(0,0,ChipW,ChipH);
UnderChips[NumChip].Canvas.CopyRect(RectD,{Fld}Back.Canvas,RectS);
Image1.Canvas.Draw(CurX-ChipW div 2,CurY-ChipH div 2,Chips[NumChip].Pic);
If MayMove=2 Then SetCursorPos(XDn+Left+CurDx,YDn+Top+CurDy);
End Else If MayMove=2 Then
Begin
MayMove:=1;
End;
end;

end.
Надо сделать чтобы в конце игры писались результаты. Где это нужно вписывать? И что там нужно писать?
 
Статус
Закрыто для дальнейших ответов.