HAOJING COLLEGE SHAANXI UNIVERSITY OF SCIENCE & TECHNOLOGY
Delphi编程实验报告
题目: “弹球游戏”的制作
学 生 姓 名: 张 若 璇 学 号: 1 5 0 8 3 2 7 系 部: 经 管 四 系 专 业 班 级: 信 管 0834 指 导 教 师: 冯 波
二〇一一年十一月
弘扬民族文化,制作精美网页
目 录
ABSTRACT.......................................................................................................................................................................... III 摘 要 ........................................................................................................................................................................................IV 1、设计这个DELPHI的目标............................................................................................................................................ 6 1.1DELPHI的内容 ................................................................................................................................................................ 6 1.2DELPHI的做作用 ............................................................................................................................................................ 6 2、设计中的思想.................................................................................................................................................................... 6 2.1运用的知识 .................................................................................................................................................................. 6
2.1.1静态Delphi设计 .............................................................................................................................................. 6 2.1.2图形的运用 ...................................................................................................................................................... 7 2.1.3页面的设计 ...................................................................................................................................................... 9
2.2上党戏曲DELPHI的开发 ............................................................................................................................................ 9 3、我做的作品 ...................................................................................................................................................................... 14 3.1页面展示................................................................................................................................. 错误!未定义书签。 3.2.我的理想成品....................................................................................................................... 错误!未定义书签。 3.3作品中用的东西 ................................................................................................................... 错误!未定义书签。 4.流程和构思 .....................................................................................................................................错误!未定义书签。 4.1颜色,板式和背景 ................................................................................................................................................... 14 4.2活动文字............................................................................................................................... 错误!未定义书签。 结束语...................................................................................................................................................................................... 14 参 考 文 献 ........................................................................................................................................................................ 115
II
弘扬民族文化,制作精美网页
ABSTRACT
Embarcadero Delphi is an integrated development environment for console, desktop graphical, web, and mobile applications.
Delphi's compilers use its own Object Pascal dialect of Pascal and generate native code for 32- and 64-bit Windows operating systems, as well as 32-bit Mac OS X and iOS. (iOS code generation is done with the Free Pascal compiler.) As of late 2011[update] support for the Linux and Android operating system was planned by Embarcadero.
It is used Delphi to develop a simple game like the famous video game -- Breakout. In the game, a layer of bricks lines the top third of the screen. A ball travels across the screen, bouncing off the top and side walls of the screen. When a brick is hit, the ball bounces away and the brick is destroyed. The player loses a turn when the ball touches the bottom of the screen. To prevent this from happening, the player has a movable paddle to bounce the ball upward, keeping it in play.
KEY WORDS: Delphi , IDE , Breakout
III
弘扬民族文化,制作精美网页
摘 要
Delphi是一个集成开发环境(IDE),使用的核心是由传统Pascal语言发展而来的Object Pascal,以图形用户界面(Graphical User Interface,简称GUI)为开发环境,通过IDE、VCL工具与编译器,配合连结数据库的功能,构成一个以面向对象程序设计为中心的应用程序开发工具。Delphi所编译的可执行文件,虽然容量较大,但因为产生的是真正的原生机器码,性能上比较快速。除了使用数据库的程序之外,不需安装即可运行,在使用上相当方便。
在跨平台开发方面,Delphi 7之后,开始支持Linux下的Kylix,目前Kylix的最新版本为3。Borland公司为了支持Delphi的跨平台开发,从Delphi 6.0开始加入了另外一个开发架构CLX。开发人员可以使用CLX架构开发出可以在Kylix中编译的程序。通过Delphi XE2所带的FireMonkey平台,Delphi可以开发跨平台应用程序,并原生编译到Windows和Mac OS X平台。 此次实验设计用来初步实现动作电子游戏--打砖块的核心部分。玩家操作一根屏幕上水平的“棒子”,让一颗不断弹来弹去的“球”在撞击作为过关目标消去的“砖块”的途中不会落到屏幕底下。球碰到砖块、棒子与底下以外的三边会反弹,落到底下会失去一颗球,把砖块全部消去就可以破关。 关键词:Delphi软件,集成开发环境,打砖块游戏
IV
简约高效 追求卓越
1、设计目标
1.1游戏的内容
打砖块游戏是一种流行的弹球类电子游戏的名称。玩家操作一根屏幕上水平的“棒子”,让一颗不断弹来弹去的“球”在撞击作为过关目标消去的“砖块”的途中不会落到屏幕底下。球碰到砖块、棒子与底下以外的三边会反弹,落到底下会失去一颗球,把砖块全部消去就可以破关。
1.2同类游戏的参照
打砖块游戏的始祖是美国雅达利公司,由该公司在1972年发行的“乓”(en:PONG,ja:ポン (ゲーム),世界上第一款电子游戏,类似台球)改良而来。相较于其前作,一个人就可以玩与变化丰富这两项特点让Breakout相当卖座,使各家公司竞相模仿。 因为规则简单与游戏性,现在许多移动电话都有内建打砖块游戏,也有许多互联网小游戏版本。 Breakout
en:Breakout 世界上第一款打砖块游戏,1976年由英宝格公司发行。游戏设计是后来创立苹果电脑的史蒂夫·乔布斯与斯蒂夫·沃兹尼亚克两人,程序设计是Brad Stewart。1978年公司发行第二代的Super Breakout。 Gee Bee
en:Gee Bee 日本Namco公司在1978年推出的该公司第一款街机游戏。合并打砖块与弹珠台游戏的特色。
快打砖块(Arkanoid)
en:Arkanoid 日本泰托(Taito)公司在1986年推出的街机游戏,引入电脑控制的敌机与后来一般打砖块游戏常见的加强道具(Powerup Item)等要素。
2、设计中的思想
2.1 对Delphi的基本认识
Delphi,是Windows平台下著名的快速应用程序开发(Rapid Application Development,简称RAD)。它的前身,即是DOS时代盛行一时的“Borland Turbo Pascal”,最早的版本由美国Borland(宝兰)公司于1995年开发。主创者为安德斯·海尔斯伯格。经过数年的发展,此产品也转移至Embarcadero公司旗下。
Delphi是一个集成开发环境(IDE),使用的核心是由传统Pascal语言发展而来的Object Pascal,以图形用户界面(Graphical User Interface,简称GUI)为开发环境,通过
6
弘扬民族文化,制作精美网页
IDE、VCL工具与编译器,配合连结数据库的功能,构成一个以面向对象程序设计为中心的应用程序开发工具。Delphi所编译的可执行文件,虽然容量较大,但因为产生的是真正的原生机器码,性能上比较快速。除了使用数据库的程序之外,不需安装即可运行,在使用上相当方便。
Delphi在本质上应该归类为软件开发工具,而非程序语言,但由于Delphi几乎是目前市场上唯一使用Pascal,并持续推出新版本的商业产品。因此,有时人们会把Delphi视为Object Pascal的代名词。Borland公司因而把Object Pascal改称为Delphi。2006年,Borland把开发工具产品线独立出来,成立了一家新的公司CodeGear,并把产品线交由此公司负责。原本的Delphi,亦曾一度因此被命名为Turbo Delphi。但是在新的版本中,除了Delphi for Win32(原有的Delphi版本)之外,还有一个新产品“Delphi for PHP”。在CodeGear的发展规划中,或许“Delphi”不再是Object Pascal的专属IDE名称,而是将之提升到通用IDE品牌的层次。2008年5月7日,Embarcadero Technologies(易博龙)公司宣布以2300万美元的价格收购CodeGear公司,从而把Delphi收入囊中。2009年5月6日,Micro Focus宣布以7500万美元收购Borland。 此次实验使用Delphi目前的最新版本Delphi XE2。 2.1.1对游戏菜单部分的认识
在可视化程序设计中,每个应用程序都包含一个主窗体。主窗体并不仅仅是一个Form窗体,一个完整的应用程序窗体除了Form窗体外,还应包括菜单栏、工具栏和状态栏等相关组件。这三种组件是主程序窗体的重要组成部分,通过这些组件,可以方便地完成各项操作并了解当前程序的运行状态。本程序将运用到菜单栏、工具栏、状态栏的创建。
通常,菜单可以看作是命令的列表,使用菜单组件,可以将应用程序中的所有命令按类别分成多个菜单项,每个菜单项又包含了多个属于该类别的多个命令。Delphi开发系统中,菜单组件主要分为主菜单和弹出菜单两类。
应用程序工作界面菜单栏中的菜单就是主菜单。每个主菜单都可以打开一个下拉菜单,当前打开的是“文件”下拉菜单。“文件”后面的(F)表示可以按Alt+F组合键来打开“文件”菜单。“文件”菜单有很多菜单项,有些菜单项又包含了菜单,这样的菜单称为子菜单。
下拉菜单中的菜单项有两种显示形式:一种显示为黑色,表示在当前情况下,该菜单项可用;另一种显示为灰色,表示在当前情况下,该菜单项不可用。
2.1.2主菜单的设计
1.创建主菜单
7
简约高效 追求卓越
在Delphi程序设计中,创建主菜单需要使用Standard面板上的MainMenu组件。将MainMenu组件添加到Form窗体后,双击MainMenu组件,弹出MainMenu窗口,该窗口称为MainMenu菜单设计器。
1)添加菜单
(1)打开MainMenu菜单设计器,其最左上角自动生成一个方框,选中该方框,在Properties选项卡中将Caption属性设置为该菜单的名称,如“文件”,然后单击空白处,即可创建菜单栏中的一个菜单项。
(2)再次单击“文件”菜单项,其右边和下边自动出现两个方框,如下图所示。文件菜单项右边的方框表示与“文件”菜单项平级的菜单,也是主菜单。“文件”菜单项下边的右框表示下拉菜单中的菜单项。按照同样方法设置菜单名,每次设置完后,会在该菜单的右侧或下方出现一个新的菜单项,通过这样的方法,可以完成所有菜单项的添加。
2)删除菜单项
在设计菜单时,如果发现某个菜单项设计有误,可以将其删除,方法是选中需要删除的菜单项,直接按键盘上的Delete键即可。
提示:如果删除的菜单项有子菜单,则删除该菜单项的同时,其子菜单也会一同被删除。
3)插入菜单
要添加新的菜单项,先选择要添加菜单项的位置,然后右击,在弹出的快捷菜单中选择Insert命令,在当前菜单项的上方(或左边)生成一个空菜单项。
2.设计主菜单
以上介绍了创建主菜单的方法,但是,这样创建的菜单不够美观,功能也不够全面,为了能设计出美观、功能完备的主菜单,还需要设置分隔条、快捷键、子菜单、菜单选择模式和菜单选中状态。
1)设计分隔符
通常,下拉菜单中的菜单项可以按功能分成若干组,着就需要使用分隔条,如下图所示。
在Delphi系统中,分隔条作为一个独立的菜单项。分隔条的创建很简单,将要设置为分隔条的菜单项的Caption属性设置为“-”,其他属性取默认值即可。
2)设置快捷键
快捷键是菜单的重要组成部分,使用快捷键可以提高工作效率。例如上图所示的菜单中,按Alt+Y组合键可以打开“文件”下拉菜单,然后按Ctrl+菜单项右侧的字母键即可执行该命令。
8
弘扬民族文化,制作精美网页
在默认情况下,MainMenu组件会为创建的每个菜单项自动关联一个快捷键。如果不满意系统设置的快捷键,可以自定义快捷键,操作步骤如下:
(1)将MainMenu组件的AutoHotKeys属性设置为maMenual,关闭了自动关联菜单与快捷键的功能。
(2)分别设置主菜单与下拉菜单中菜单项的快捷键。
设置主菜单快捷键的方法为:在菜单项的名称后加上(&字母)。以“新游戏”菜单项为例,选中该菜单项,在Caption属性值栏中输入“新游戏(&N)”,表示设置该菜单项的快捷键为Alt+N。
3)设计子菜单
如果下拉菜单中的某些菜单项又包含了多个菜单项,可以将这些菜单设置为子菜单。
创建子菜单方法很为,右击需要建立子菜单的菜单项,如“色彩”,在弹出的快捷菜单中选择Create SubMenu命令。此时,系统会在“色彩”菜单右侧生成一个空菜单项,然后按以上介绍的方法设置菜单即可。
4)菜单项选择模式与选中状态
设置菜单项的选择模式可以在其选择和取消选择间切换 2.1.3弹出菜单的设计
弹出菜单又称为快捷菜单,是在某个组件上右击时弹出的菜单。快捷菜单中提供了与该组件相关的命令。与主菜单相比,弹出菜单具有更高的灵活性,它不但可以用于窗体本身,还可以用于窗体中的各种组件。 1.创建弹出菜单
在Delphi程序设计中,使用Standard面板中的PopupMenu组件来创建弹出菜单。将PopupMenu组件添加到Form窗体中后,双击窗体中的PopupMenu组件可以打开PopuMenu菜单设计器。
在PopupMenu菜单设计器中设计菜单项的方法与在MainMenu设计器中设计菜单项的方法类似。 1)设计菜单项
在图中所示的PopupMenu菜单设计器中选中当前空菜单项,将Caption属性设为“撤销”,设置菜单名。然后依次添加分隔条、“开始”、“暂停”、分隔条和“帮助”菜单项,即可得到所需的快捷菜单。
2)设计菜单快捷键
快捷菜单也有快捷键。在默认情况下,系统会为快捷菜单中的每个菜单项自动关联一个快捷键,如上图所示,括号中的字母即为菜单项的快捷键。当快捷菜单弹出后,直接
9
简约高效 追求卓越
按菜单项右侧的字母键,即可执行该命令。
如果要自定义菜单的快捷键,需要将PopupMenu组件的AutoHotKeys属性设置为maManual。与设置主菜单快捷键一样,直接在Caption属性栏中输入快捷键即可。例如,选中“开始”菜单项,将其Caption属性设置为“开始(&G)”即可。以此类推,可设置自定义快捷键。
3)其他设置
在快捷菜单中,同样可以设置菜单项的子菜单,以及菜单项的选中状态和选择模式,方法与设置主菜单中相同。
2.设置弹出式菜单的位置
在应用程序中,主菜单的位置是固定不变的,而弹出菜单的弹出位置则由鼠标指针的位置决定,另外还可以通过设置PopUpMenu组件的Alignment属性来设置弹出菜单的弹出方式。该属性有3个值,分别为paLeft、paRight和paCenter。
3.建立弹出式菜单的关联组件
弹出菜单在使用时必须设置与其关联的组件,操作步骤如下:
(1)按前面介绍的方法建立一个弹出菜单,设置其名称为PopUpMenu1。
(2)选中要进行关联的组件,如Form窗体中的Memo1组件。
(3)将Memo组件的PopUpMenu属性设置为弹出菜单的名称PopUpMenu1即可。当在Memo组件上右击时,即可弹出快捷菜单。
4.弹出菜单的事件
主菜单最重要的事件是OnClick事件,弹出菜单最重要的事件是OnPopUp(弹出)事件。当与弹出菜单关联的组件上发生了右击动作时即触发OnPopUp事件。可在该事件中设置弹出菜单的属性。另外,还可以使用PopUp方法来设置弹出菜单出现的位置,该方
10
弘扬民族文化,制作精美网页
法格式如下:
PopUpMenu.PopUp(X,Y);
其中,X和Y表示弹出菜单弹出位置的坐标。例如,PopUpMenu1.PopUp(100,100)表示在坐标(100,100)处弹出弹出菜单。下面通过一个实例来说明主菜单与弹出菜单的应用。 操作步骤如下:
1)设计界面
(1)在Form窗体添加一个Label组件,设置Caption属性设置为“测试内容”;再添加一个MainMenu组件和一个PopupMenu组件,它们的AutoHotKeys属性值均设置为False。
(2)双击MainMenu组件,打开主菜单设计器,选中首个空菜单项,将其Caption属性设置为“开始游戏”。
(3)选择“字体缩放”菜单项下的空菜单项,设置Caption属性为“放大”,ShortCut属性为Ctrl+B。使用同样的方法创建“缩小”菜单项,并将其ShortCut属性设置为“Ctrl+S”。最后关闭菜单设计器。
(4)双击PopupMenu组件,在弹出的菜单设计器中创建“字体”和“色彩”菜单项。 (5)选中Label组件,将PopupMenu属性设置为PopupMenu1,设置于Label组件关联的弹出菜单。至此完成主菜单和弹出菜单的设计。
2.2主体部分挡板的设计
在应用程序的开发中,常常要将某些控件对象(如标签)用鼠标选中后进行拖动操作,用以改变控件的位置,在Delphi中如何实现这一功能呢?笔者想了一个方法:通过在 public 中定义全局变量用以跟踪 鼠标在移动和拖动控件时的坐标,然后在拖动结束时将鼠标的坐标值赋给控件的 TOP和LEFT属性,以达到拖动的目的。
本游戏中实现方法如下:创建一个 Panel,再创建一个Label,通过编程使控件 Lable 可以在 Panel 中被拖放到任意位置。以下是具体实现过程:
1. 首先做一下准备工作,运行Delphi3.0,进入集成开发环境,在 File 菜单中选择New Application 。
2. 在Form1中创建对象 Panel1,并在 Panel1 中创建另一对象 Label1。
11
简约高效 追求卓越
3. 选中Label1,修改其下列属性的值: 属性值:
Caption :标签移动测试! Cursor :crHandPoint DragCursor:crDrag DragMode :dmAutomatic
4.在程序的开头部分声明全局变量 x_panel,y_panel,x_label,y_label,其中,x_panel,y_panel :鼠标在Panel1上的坐标;x_label,y_label :鼠标在label1上的坐标。
注:这里分别获取在Panel1和Label1上的坐标是为了更精确地计算出Label1实际的移动距离。
5.在Panel1的OnDragOver 和OnMouseMove 事件中添加如下代码: x_panel:=X; y_panel:=Y;
注:该操作是获得 mouse 在Panel1上的坐标。 6.在Label1的OnMouseMove 事件中添加如下代码: x_Labell:=X; y_Label1:=Y;
注:该操作是获得 mouse 在Label1上的坐标。 7.在Label1的OnEndDrag 事件中添加如下代码: label1.left :=x_panel-x_label; label1.top :=y_panel-y_label;
说明:两者相减是为了求得 label1 实际的移动距离。
8.创建一个对象 Button1 ,并在其 OnClick 事件中添加如下代码: label1.left :=x_panel-x_label; label1.top :=y_panel-y_label;
说明:两者相减是为了求得 label1 实际的移动距离。
8.创建一个对象 Button1 ,并在其 OnClick 事件中添加如下代码: close; //用以关闭应用程序。 好了,现在运行程序,测试一下结果。
以下是程序源代码,在Delphi3.0、Windows95/98中测试通过。 unit test_move; interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
12
弘扬民族文化,制作精美网页
StdCtrls, ExtCtrls; type
TForm1 = class(TForm) Panel1: TPanel; Label1: TLabel; Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
procedure Panel1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
procedure Label1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
procedure Label1EndDrag(Sender, Target: TObject; X, Y: Integer); private
{ Private declarations } public
{ Public declarations }
x_panel,y_panel,x_label,y_label:integer; end; var
Form1: TForm1; implementation {$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject); begin close; end;
procedure FTorm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState;X,Y: Integer); begin
x_panel:=X; y_panel:=Y; end;
procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
13
简约高效 追求卓越
State: TDragState; var Accept: Boolean); begin
x_panel:=X; y_panel:=Y; end;
procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState;X,Y: Integer); begin
x_label:=X; y_label:=Y; end;
procedure TForm1.Label1EndDrag(Sender, Target: TObject; X, Y: Integer); begin
label1.left :=x_panel-x_label; label1.top:=y_panel-y_label; end; end.
3、界面设计展示
3.1颜色,板式和背景
为了提高游戏的舒适度,颜色应以柔和淡雅的色调为主,为在制作菜单等反差颜色也应以采用柔和淡雅的色调。界面主题图形都是采用中规中矩的结构,通过大小不一的方框分解整个页面。采用灰色的背景增强了质感,提高游戏的舒适度。
结束语
这次设计让我更加熟悉了从理论到实践的跨越。从当初的在网上查阅戏曲资料,到现在的网站运行,从当初做Delphi的构想到做成作品,这中间有很多值得回味的地方。在计算机的世界里,只要你有兴趣,总会有太多新奇的东西吸引着你。
14
弘扬民族文化,制作精美网页
这次的设计,从选题到实现,几乎都是自己独立完成的。戏曲网站建设从需求分析到设计、测试,我都力求规范化,努力让自己以前学的知识运用到本网站的开发中,尽量保证整个系统的开发质量,顺利完成这次的设计,为自己的ASP课程结束画一个完美的句号。
通过一个学期学习ASP,让我掌握了这个软件的使用方法,同时也完成这个Delphi设计作品。感谢冯波老师的细心指导,感谢同学们的支持与帮助。
不过,我觉得在网站建设过程中,好多知识都是随学随用,就增加了很多不必要的麻烦。虽说这些都会消耗开发的时间,但在老师、同学以及自己的不断努力下,一些问题也随之克服了,通过这次阅读网网站设计,使我增加了很多的知识,也掌握了很多Delphi设计的操作技巧,虽然还有很多不足之处,但这并不重要,重要的是我对Delphi的设计又有了更深的了解。我做的是静态的网站,好多信息只能通过浏览页面的方式查阅,网站的便用性比较差。
参 考 文 献
[1]刘连问.三大Delphi设计软件应用的解惑 人民大学,1999,21(1):56---89.
15
简约高效 追求卓越
[2]高廉文.上党梆子之我的看法.晋城:戏曲出版社,1979:15~18,31.
[3]任小艺.高校学报编辑工作现代化特征[C].全方位地解析Delphi制作设计与技巧.北 京:北京师范大学出版社,2997:10~22. [4]http://www.sdbz.cn/pub/wml.txt/2011-06-04.
附件(部分程序代码):
16
因篇幅问题不能全部显示,请点此查看更多更全内容