随着移动设备的普及,开发适用于iOS和Android等平台的应用程序变得越来越重要。对于新开发者来说,学习Objective-C或Java可能会有一定的难度。本文将介绍一种使用DelphiXE2和FireMonkey框架开发iOS应用程序的方法,特别是对于熟悉Object Pascal和Delphi的开发者来说,这将是一个相对容易上手的选择。
Delphi,一个在本世纪初非常流行的开发环境,至今仍拥有庞大的用户社区。尽管Borland公司不再开发Delphi产品,但Embarcadero公司通过其Delphi XE2产品将Delphi提升到了一个新的水平。Delphi XE2不仅保留了Delphi的原有特性,还增加了现代编程语言的特性,如命名空间等。更重要的是,Delphi XE2支持使用FireMonkey框架开发iOS应用程序。
要尝试本文的示例,需要以下条件:
本文的目标是开发一个简单的3x3棋盘游戏。
DelphiXE2的开发环境与Delphi 7.0非常相似,任何熟悉Delphi的开发者都会感到非常舒适。Delphi XE2是Object Pascal的一个方言,包含了现代特性,如命名空间等。此外,Delphi XE2还支持跨平台开发,包括Windows 32位、Mac和iOS。
为了开发iOS平台的应用程序,需要选择特殊的项目类型“Firemonkey HD iOS Application”。这将创建一个典型的Delphi项目,其中包含一个类似于iPhone屏幕的表单。
对于这样的游戏,典型的方法是使用MiniMax策略。MiniMax是一种决策规则,用于在最坏情况下最小化可能的损失(最大损失)。MiniMax定理指出,在有限策略的两人零和游戏中,存在一个值V和一个混合策略,使得给定玩家2的策略,玩家1的最佳收益是V,反之亦然。
接下来,将在Delphi中实现这个算法,用于3x3棋盘的棋类游戏。
游戏实现类相对简单,定义了游戏棋盘、玩家和计算机的符号,以及分析游戏状态的方法。
TGameXOImpl = class
private
MovePatterns: array[0..4] of TXOPoint;
GamePane: array[0..2, 0..2] of char;
Moves: array[0..2, 0..2] of byte;
SignComputer: char;
SignPlayer: char;
protected
procedure ResetGamePane();
function AnalyzeTurn(Computer: Boolean; Step: Integer): Integer;
public
constructor Create();
function ComputerTurn(): TXOPoint;
function CheckGameIsCompleted(Mark: Char): integer;
procedure StartGame(PlayerSign: char);
function PlayTurn(Turn: TXOPoint): integer;
property ComputerSign: char read SignComputer;
property PlayerSign: char read SignPlayer;
end;
下面的函数分析了游戏的当前状态,并为每个可能的空单元格提供了一个评分。评分规则如下:1表示游戏将继续进行,0表示没有人获胜,游戏结束,1表示下一步将获胜。这个函数的结果被AI用来考虑下一步。
function TGameXOImpl.AnalyzeTurn(Computer: Boolean; Step: Integer): Integer;
var
i, j, checkturn, weight, max: Integer;
begin
max := -1;
for i := 0 to 2 do
for j := 0 to 2 do
begin
weight := -2;
if GamePane[i,j] = ' ' then
begin
if Computer then
GamePane[i,j] := self.SignComputer
else
GamePane[i,j] := self.SignPlayer;
if Computer then
checkturn := CheckGameIsCompleted(self.SignComputer)
else
checkturn := CheckGameIsCompleted(self.SignPlayer);
if (checkturn < 0) then
begin
weight := -AnalyzeTurn(not Computer, Step + 1);
end
else
begin
weight := checkturn;
end;
if (weight > Max) then
begin
max := weight;
end;
GamePane[i,j] := ' ';
if ((max = 1) and (step > 0)) then
begin
Result := Max;
break;
end;
end;
if (Step = 0) then
Moves[i,j] := weight;
end;
Result := Max;
end;
现在可以在实际行动中测试游戏了。可以在以下链接中查看游戏的截图(图片4_1 .. 4_6)。
已经能够在Windows上看到游戏的运行,但为了将项目移植到Mac的XCode,需要使用IDE中捆绑的dpr2xcode工具。配置完成后,可以在项目中找到一个新的名为'XCode'的文件夹,其中包含了可以在Mac上打开的XCode项目文件。
在Mac上编译项目时,遇到了一个问题,因为Mac的XCode实现的TPoint没有接受两个参数x,y的构造函数。不得不自己实现TXOPoint。售价3000美元的产品在移植过程中没有提醒这样的问题,这真是遗憾。好消息是,在实现TXOPoint后,在模拟器中运行项目没有任何问题。
要将应用程序部署到真实设备,需要一个开发者证书(费用每年超过100美元)。如果有越狱的iPhone,可以使用典型的7Zip归档器创建安装程序。只需要从另一个可工作的程序中获取ipa,并更改Payload目录中的项目文件夹。(不要忘记在XCode项目选项中设置最低要求的iOS版本,这将节省时间,如果手机不是iOS5)。
优点:能够在不学习Objective-C的情况下在iPhone上获得一个工作的iOS应用程序,这是一个好的点。考虑到市场上有不同于愤怒的小鸟的应用程序,相信基于Firemonkey的解决方案市场是存在的。