做了这么久开发,一直想做一个小游戏玩玩,回想起上学玩的“炸飞机”的游戏,就拿他开始吧。
先说一下游戏的规则:
在10×10的方格里,汇制1—5—1—3的形状,方向自选,共三组,每一个飞机不能与其他的飞机有任何的重叠,第一个1为飞机头!玩家根据作标选择位置,系统会告之“炸中,炸毁,炸空”,直至全部炸毁三架飞机为止!
程序需求:
1.绘制“地图”,10*10的区域,有点象扫雷游戏的布局
2.由系统随机生成三架飞机,方向随机,并开始计时
3.用户点击时,告知用户是否“炸中,炸毁,炸空”,计算用户的点击次数
4.当所有的飞机都被“炸毁”时,系统提示成功,游戏结束
5.提交玩家的游戏成绩
6.显示成绩排行榜
程序实现:
unit UnitMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons, WinSkinData, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient, IdHTTP;
const
MAPWIDTH = 10;
MAPHEIGHT = 10;
MAPPIX = 30;
PLANELEN = 4;
PLANEWLEN = 5;
PLANEFLEN = 3;
PLANECOUNT = 3;
MAXMAKECOUNT = 5;
type
TGameStatus = (psNone, psDesign, psFight, psAddPlane, psGameOver);
type
TForm1 = class(TForm)
pnlMap: TPanel;
pnlLeftLine: TPanel;
pnlRight: TPanel;
pnlTop: TPanel;
pnlBottom: TPanel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
SkinData1: TSkinData;
Memo1: TMemo;
BitBtn4: TBitBtn;
BitBtn5: TBitBtn;
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Timer1: TTimer;
SpeedButton1: TSpeedButton;
IdHTTP1: TIdHTTP;
procedure FormCreate(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure BitBtn5Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
procedure planePointerClick(Sender: TObject);
procedure ClearStatus;
procedure MakeAPlane();
procedure RandomPlane();
procedure DisplayAll();
procedure ClearSpcStatus();
procedure planeMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
public
{ Public declarations }
end;
var
Form1: TForm1;
planePointer: array[0..MAPWIDTH,0..MAPHEIGHT] of TSpeedButton;
psStatus: TGameStatus;
planeClass: TClass;
iPlane, iRandom, iFindPlane, iClick: Integer;
tmpplan: TSpeedButton;
implementation
uses UnitFrmCommit;
{$R *.dfm}
procedure TForm1.ClearStatus;
var
i,j: Integer;
begin
for i := 0 to MAPWIDTH - 1 do
begin
for j := 0 to MAPHEIGHT - 1 do
begin
planePointer[i, j].Tag := 0;
planePointer[i, j].Glyph.LoadFromFile('./Glyph/colors.bmp');
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i,j: Integer;
begin
Self.pnlMap.Width := MAPWIDTH * MAPPIX;
Self.pnlMap.Height := MAPHEIGHT * MAPPIX;
Self.pnlLeftLine.Width := MAPPIX;
Self.pnlLeftLine.Height := MAPHEIGHT * MAPPIX;
Self.pnlLeftLine.Left := Self.pnlMap.Left - MAPPIX;
Self.pnlLeftLine.Top := Self.pnlMap.Top;
Self.pnlRight.Width := MAPPIX;
Self.pnlRight.Height := MAPHEIGHT * MAPPIX;
Self.pnlRight.Left := Self.pnlMap.Left + Self.pnlMap.Width;
Self.pnlRight.Top := Self.pnlMap.Top;
Self.pnlTop.Width := MAPWIDTH * MAPPIX + 2 * MAPPIX;
Self.pnlTop.Height := MAPPIX;
Self.pnlTop.Left := Self.pnlLeftLine.Left;
Self.pnlTop.Top := Self.pnlMap.Top - MAPPIX;
Self.pnlBottom.Width := MAPWIDTH * MAPPIX + 2 * MAPPIX;
Self.pnlBottom.Height := MAPPIX;
Self.pnlBottom.Left := Self.pnlLeftLine.Left;
Self.pnlBottom.Top := Self.pnlMap.Top + Self.pnlMap.Height;
for i := 0