Delphi XE 开发IOS

需求

这个 demo 的要求:

  • Embarcadero Delphi XE2的试用版 (差不多占用了所花费总时间的42%来填写表格,然后再获取工具)
  • Mac Lion 10.2+ 从AppStore免费获取XCode 
  • 一台越狱过的IPhone用来检验实际设备上的效果 (或者有一个开发者证书可用于签名)
  • 简单的程序 - 这是演示的是简化的3x3格的井字棋游戏.

 

为了开发一个 IOS 应用程序 - 你不得不 选择特别的 项目类型“ Firemonkey HD

IOS 应用程序“。接下来 我们 看到一个典型的 Delphi项目 被建立:一个 看起来很I Phone的项目

Delphi XE 开发IOS_第1张图片 

Delphi XE 开发IOS_第2张图片

Delphi XE 开发IOS_第3张图片

代码实现  

是时候开始编写游戏代码了。这类游戏典型的解决方案都会使用 MiniMax 决策(http://en.wikipedia.org/wiki/Minimax)。 我将摘要复制了过来:

Minimax (有时候也叫 minmax)是一个在最坏情况下尽量减少损失的决策规则,常用于决策理论,游戏理论,统计学及哲学中。从另一方面来说,也可以想象成尽量增加小量的收获(maximin)。

极大极小定理状态

对于两个人,总收益固定,策略有限的游戏,对每个玩家都存在一个变量V和一个混合策略,使得:

  1. 相对玩家二的策略,玩家一的最佳收益是V,且
  2. 相对于玩家一的策略,玩家二的最佳收益是 -V。

也可以说,无论玩家二的策略如何,玩家一的策略都可以保证他的回报为V。类似地,玩家二可以保证回报为 -V。极大极小定理的名称来源于,每个玩家都希望极大地使用对方获得极小的回报——既然总收益固定,他同时也极大地减少自己的损失(得到最大的收益)。

下面我们将用 Delphi 来在3*3的棋盘上实现Go游戏中的这个算法(代码托管在 github  上面,你可以点击本文结尾中的链接下载)。

游戏的实现类很简单

TGameXOImpl = class
  private
    MovePatterns: array[0..4] of TXOPoint;
     //matched to external X/O/' '  layout button texts
    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;


 

开局

MovePatterns[0] := TXOPoint.Create(0,0); 
MovePatterns[1] := TXOPoint.Create(0,2); 
MovePatterns[2] := TXOPoint.Create(1,1); 
MovePatterns[3] := TXOPoint.Create(2,2);


 

极大极小策略

{ TGameXOImpl }
 
(**
*   @Mark char X|O check win criteria for passed mark
*
*   return  -1 game in progress,  0 - nobody won, 1 - passed mark has won
*)
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 begin
          GamePane[i,j] := self.SignComputer;
        end else begin
         GamePane[i,j] := self.SignPlayer;
        end;
 
        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;


 

测试游戏

我们来测试一下吧(推荐直接编译运行,或者使用编译好的程序来运行):

 Delphi XE 开发IOS_第4张图片 

你可以直接编译本程序,也可以参考这里的图像: (4_2game.jpg 到4_7game.jpg)

导出到 Mac 系统

现在我们可以测试游戏了,但是仅限于 windows 平台。为了将项目移植到 Mac平台上的XCode,我们需要使用配套的  dpr2xcode工具。需要先进行配置,然后导出,如下图所示:

 Delphi XE 开发IOS_第5张图片 

 Delphi XE 开发IOS_第6张图片 

  Delphi XE 开发IOS_第7张图片

导出完成之后,你可以看到一个新建的 'XCode' 目录,你可以在 Mac 上使用 XCode 直接打开这个项目。

 Delphi XE 开发IOS_第8张图片 

  Delphi XE 开发IOS_第9张图片

不幸的是,这个工具并不是很稳定,容易出错:

 Delphi XE 开发IOS_第10张图片

我花了 20 多分钟,利用 SysInternals Filemon 工具来试图找出问题所在。

我在 Mac 上试图编译时遇到问题:XCode 中的 TPoint 实现并没有接收两个参数(x,y)的构造函数。我只好自己写了个实现 TXOPoint。Delphi XE2 花了我 3000 美元,难道不应该提醒一下移植过程中可能出现的问题吗?!还好,实现了 TXOPoint 之后,我很顺利地在模拟器中运行了这个游戏。

 Delphi XE 开发IOS_第11张图片 

  Delphi XE 开发IOS_第12张图片

  Delphi XE 开发IOS_第13张图片

为了部署你的程序到真实的IOS机器上,你需要一个开发者证书(每年100美元以上)。

如果你的 iPhone 越狱了,那么你可以用 7zip 来创建可以安装的 ipa 包。你只需要使用另一个可以正常安装的 ipa 包,将你的项目内容替换到 Payload 目录就可以了。(当然,你需要在 XCode 项目选项里面设置运行所需的最低IOS版本)。
完成之后,我们就可以在 iPhone 上面看到我们的程序:

 Delphi XE 开发IOS_第14张图片 

 Delphi XE 开发IOS_第15张图片 

 

 

原文链接:http://www.codeproject.com/Articles/505996/Going-mobile-development-with-Delphi

译文链接:http://www.oschina.net/translate/going-mobile-development-with-delphi

你可能感兴趣的:(delphi)