1. 程式人生 > 程式設計 >php設計模式之正面模式例項分析【星際爭霸遊戲案例】

php設計模式之正面模式例項分析【星際爭霸遊戲案例】

本文例項講述了php設計模式之正面模式。分享給大家供大家參考,具體如下:

星際裡面的戰鬥都是在地圖上進行的,只要我們可以編輯地圖,就可以創造一些新的戰役。可是,星際裡面的地圖繪製相關的程式碼如果開放出來,估計大多數萬家都看不懂,更不要說自己編輯地圖了。

待解決的問題:在不瞭解地圖程式碼的結構下,我們要讓玩家自己編輯地圖。

思路:對於玩家而言,他熟悉的是水晶礦,高地這些形狀,他和系統通過滑鼠互動。我們可以設計一個地圖編輯器讓玩家使用,而無需讓他研究繪製地圖的細節程式碼。
(實際上暴雪公司就是這樣做的,很多玩家甚至暴雪內部人員都是用星際中的地圖編輯器製作地圖)

正面模式(Facade)示例:

<?php
  //玩家的滑鼠物件,記錄滑鼠在編輯其中的狀態
  class mouse 
  {
    //滑鼠所處的X軸座標
    public static $X;

    //滑鼠當前能繪製的物件,比如水晶礦,河流等
    public static $object;

    //滑鼠所處的Y軸座標
    public static $Y;
  }

  //地圖編輯器
  class mapEdit 
  {
    //繪製方法
    public static function draw()
    {
      //根據滑鼠物件的狀態在地圖上繪製各種東西

      //如果是水晶礦
      if(mouse::$object == "ore")
      {
        //呼叫水晶礦類的繪製方法,這個類定義在下面,這是真正的繪製,但玩家不必學習他的細節
        ore::draw();        
      }
      //如果是河流
      elseif(mouse::$object == "river")
      {
        //呼叫河流類的繪製方法,這個類定義在下面,這是真正的繪製,但玩家不必學習他的細節
        river::draw();
      }
    }
  }

  //水晶礦類
  class ore 
  {
    //剩餘的礦,以及其他屬性,這裡略過
    public $remain;

    //繪製水晶礦
    public static function draw()
    {
      //實際的繪製水晶礦的底層細節程式碼
    }
  }

  //河流類
  class river 
  {
    //繪製河流
    public static function draw()
    {
      //實際的繪製河流的底層細節程式碼
    }
  }

  //玩家在地圖編輯器上點選繪製物件列表上的水晶礦物件
  mouse::$object = "ore";

  //玩家移動滑鼠
  mouse::$X = 311;
  mouse::$Y = 126;

  //在地圖上點選,表示繪製當前物件,也就是一個水晶礦
  mapEdit::draw();

?>

用途總結:正面模式讓使用者集中於他所要進行的工作,而不必知道全部細節,或者說提供了一個容易使用的工具,同時遮蔽了底層細節,不必讓使用者重新學習。

實現總結:需要一個類似上面地圖編輯器的程式碼類,幫助玩家方便的進行操作。

更多關於PHP相關內容感興趣的讀者可檢視本站專題:《php面向物件程式設計入門教程》、《PHP陣列(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算子用法總結》、《php字串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧彙總》

希望本文所述對大家PHP程式設計有所幫助。