77范文网 - 专业文章范例文档资料分享平台

游戏编程文章搜集资料(7)

来源:网络收集 时间:2019-04-13 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

为游戏画面的缓冲区。于是,我就在private里加入了三个变量:FBack:TBmex; FApple:TBmex; FBuffer:TBmex;。

在游戏画面的上方有一段操作说明文字。这段文字是要程序来设定,而不是TApple来设定的,所以,我又加入了一个FCaption:String;并在public加入了property Caption:String read FCaption write FCaption;以便让程序可以修改这段说明文字。

程序必须知道当前状态(与显示画面差不多),才能正确的控制TApple。所以,我又加入了FRunning:Integer;并在public加入了property Running:Integer read FRunning;以便让程序知道当前状态,并且防止程序改变当前状态使得TApple被破坏。

游戏在运行的时候,除了苹果的位置以外,还依赖于三个参数:1:剩余量。来记录在掉几个苹果游戏就结束了。2:当前分数。3:苹果生产速度。因此,又有了: FLeft:Integer; FScore:Integer; FAppleBuilder:Integer; 与

property Left:Integer read FLeft; property Score:Integer read FScore;

property AppleBuilder:Integer read FAppleBuilder write FAppleBuilder;

在游戏中,我们需要关于苹果的一些信息。有字母,位置,有没有显示这三个量,因此,我就果断地在TApple与type中间加入了: TAppleImp=record X,Y:Integer;

Speed:Integer; Used:Boolean; end;

并在private里写道:Apples:array[65..90]of TAppleImp;

FAppleBuilder是时间间隔,所以,要有一个变量来记录时间,于是TimeAB:Integer;就光荣地诞生了。

Apple.exe为了吸引人们去玩,于是有了一个最高分的概念,所以,我挥一挥手,就不知道从哪里来了一个FHighestScore:Integer;。在结束画面的时候,如果最高分被打破的话,就要先是一句话,所以,我就顺手拿了一个FMadeHighest:Boolean;,并且在显示之后会自动变为False。当最高分被打破的时候,Apple就要在硬盘上记录分数。于是,TApple就要求程序在Create TApple时输入分数文件。于是,为了记录分数文件的文件名,FScoreFile:String;与property ShowScoreCaption:Boolean read FShowScoreCaption write FShowScoreCaption;便呱呱落地了。

我上面写道,我把Logo与结束画面合起来。为了区别,就有了一个变量FShowScoreCaption:Boolean;。为True时就是Logo。

现在,大家所看到的代码必须是: unit Display; interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, vaeBmex;

const

MaxLeft=10; R_Static=0; R_Running=1; R_ShowScore=2; R_Difficulty=4; type

TAppleImp=record X,Y:Integer; Speed:Integer; Used:Boolean; end;

TApple=class(TObject) private

FBack:TBmex; FApple:TBmex; FBuffer:TBmex; FCaption:String; FRunning:Integer;

FLeft:Integer; FScore:Integer;

FAppleBuilder:Integer;

FShowScoreCaption:Boolean;

FScoreFile:String;

FHighestScore:Integer;

FMadeHighest:Boolean;

Apples:array[65..90]of TAppleImp; TimeAB:Integer; protected published

public

property Caption:String read FCaption write FCaption; property Running:Integer read FRunning; property Left:Integer read FLeft; property Score:Integer read FScore;

property AppleBuilder:Integer read FAppleBuilder write FAppleBuilder;

property ShowScoreCaption:Boolean read FShowScoreCaption write FShowScoreCaption; end;

implementation end.

否则的话,赶快改!!!

我依稀记得在写完这段声明之后,一大堆富有建设性的代码就跟着涌了出来。TApple的第一件事就是Create与Free。于是,我先机械地在published里写道:

constructor Create(ScoreFile:String); procedure Free;

当然,接着就是那些富有建设性的代码了。 constructor TApple.Create(ScoreFile:String); var SL:TStringList;//用来打开分数文件 begin

//建立TBmex

FBack:=TBmex.Create; FApple:=TBmex.Create;

FBuffer:=TBmex.Create;

FBuffer.Canvas.Font.Name:='Arial Black';

//接下来的这一行代码是没有意义的。我只是忘了删掉而已,顺便保持代码与文章的一致性。

FRunning:=R_Static; //设置一些东西

FShowScoreCaption:=False; FMadeHighest:=False; FScoreFile:=ScoreFile; //打开分数文件

SL:=TStringList.Create;

SL.LoadFromFile(FScoreFile); FHighestScore:=StrToInt(SL[0]);

SL.Free; end;

Free的代码我就不介绍了。一定是那些东西。 procedure TApple.Free; begin

FBack.Free; FApple.Free;

FBuffer.Free;

inherited Free;//如果你不怕内存泄漏的话,这句代码你可以考虑删掉。 end;

接下来,在private里写一些工具代码。 1:把背景图复制到缓冲区。 procedure TApple.DrawBack; begin

FBuffer.Draw(FBack,0,0);

end;

2:打印字符串。字符串是白色的,外面还包围着一圈黑色。怎么办呢? procedure TApple.DrawText(X,Y:Integer;Caption:String);

var C,R:Integer;

begin

FBuffer.TextOut(X,Y,Caption,clWhite,clBlack); end;

有了VAE就是不一样。哈哈哈……

3:画苹果。现在不知要复制图片,还要画一个字母: procedure TApple.DrawApple(X,Y:Integer;C:Char); var W,H:Integer; begin

DrawTrans(FBuffer,FApple,X-FApple.Width div 2,Y-FApple.Height div 2); FBuffer.Canvas.Brush.Style:=bsClear; FBuffer.Canvas.Font.Size:=24; FBuffer.Canvas.Font.Color:=clWhite; W:=FBuffer.Canvas.TextWidth(C);

H:=FBuffer.Canvas.TextHeight(C); FBuffer.Canvas.TextOut(X-W div 2,Y-H div 2,C);

end;

X,Y代表的是中心位置。为了使字符被画在中间,字符的位置自然就是(X-W div 2,Y-H div 2)了。

4:画透明图像。

procedure TApple.DrawTrans(Dst,Src:TBmex;Left,Top:Integer); begin

Dst.DrawTrans(Src,0,0,Src.Width,Src.Height,Left,Top,0); end;

DrawApple就有用到这个。 5:获得空闲的苹果。

function TApple.GetUnusedApple:Integer; var I,C:Integer; begin C:=0;

for I:=65 to 90 do

if Apples[I].Used then C:=C+1; if C=26 then result:=-1 else begin

repeat

I:=Random(26)+65; until not Apples[I].Used; result:=I;

end; end;

苹果的字符信息被苹果在数组里的位置隐含了。如果所有的苹果都显示了的话,就返

回-1。否则,随机返回一个还没被显示的苹果。

以后,就可以在public里写代码了。

TApple并不知道程序的窗体的大小,因此,就有了一个SetSize,用于传入窗体的大小,并可以用来设置FBuffer的大小:

procedure TApple.SetSize(Width,Height:Integer); begin

FBuffer.Width:=Width;

FBuffer.Height:=Height; end;

接着,程序必须向TApple传入两张图片文件,才能将结果正确地显示出来: procedure TApple.SetBack(FileName:String); begin

FBack.LoadFromFile(FileName); end;

procedure TApple.SetApple(FileName:String); begin

FApple.LoadFromFile(FileName); end;

接下来,写一个把FBuffer画到Form上面的代码: procedure TApple.PaintToForm(Form:TForm); begin

FBuffer.DrawToCanvas(Form.Canvas,0,0); end;

接着,写几段打开画面的代码。 1:Logo/结束画面: procedure TApple.ShowScore; begin

FRunning:=R_ShowScore; Draw;

end;

Draw例程以后再来。如果想显示Logo的话,就先把ShowScoreCaption设置为True,然后再调用ShowScore。

2:难度选择画面:

procedure TApple.ShowDifficulty; begin

FRunning:=R_Difficulty; Draw; end;

3:开始画面: procedure TApple.Reset; begin

FRunning:=R_Static; end;

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库游戏编程文章搜集资料(7)在线全文阅读。

游戏编程文章搜集资料(7).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/585864.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: