PHP網頁遊戲學習之Xnova(ogame)源碼解讀(五)_PHP教程

來源:互聯網
上載者:User
六、 遊戲主介面(frames.php)

frames.php檔案功能就是顯示遊戲主介面,先看下面的代碼:

$InLogin = false;$XNova_Host  = $_SERVER['HTTP_HOST'];$XNova_Script = $_SERVER['SCRIPT_NAME'];$Uri_Array   = explode ('/', $XNova_Script);// On vire le scriptarray_pop($Uri_Array);$XNova_URI   = implode ('/', $Uri_Array);$XNovaRootURL = "http://". $XNova_Host ."/". $XNova_URI ."/"; 

上面的代碼主要是拼出伺服器的URL,比較簡單;前面的變數$InLogin暫時不講,等我們專門講解common.php的時候,集中說明。

然後include了兩個我們前面講過的檔案,最後輸出一大段 HTML 程式碼。需要注意的是,HTML代碼裡面構造了兩frame,分別是leftmenu.php 和 overview.php,我下面將要分析。

七、 左導覽列(leftmenu.php)

這個檔案其實很簡單,除去前面我們常見的代碼,就只聲明了ShowLeftMenu()函數,最後用 display() 輸出頁面。函數ShowLeftMenu()也不難,代碼無非是gettemplate模板檔案、取得伺服器設定的參數以及登入的使用者等級,然後構造頁面。其中要注意的是使用者等級變數$Level,當$level的值大於0的時候,會顯示管理員連結。$level的值所代表的層級定義在system.mo檔案中, 0 是普通玩家,1 是遊戲操作員,2 是遊戲管理員,3 是管理員。

八、 概況(overview.php)

這個檔案其實就是左導覽列中對應的連結'概況',主要功能是顯示當前星球的大概資訊和使用者的資訊,包括其他星球的目前狀態等。代碼量很大,其實條理很清晰,我們慢慢看來,前面的幾行代碼我們略過。

$lunarow = doquery("SELECT * FROM {{table}} WHERE 'id_owner' = '" . $planetrow['id_owner'] . "' AND 'galaxy' = '" . $planetrow['galaxy'] . "' AND 'system' = '" . $planetrow['system'] . "' AND 'lunapos' = '" . $planetrow['planet'] . "';", 'lunas', true);CheckPlanetUsedFields ($lunarow); 

這段代碼功能是取得當前星球的月球,並檢查修正月球的使用空間。CheckPlanetUsedFields函數不僅對月球起作用,同樣可以用來檢查星球,先不看其中代碼,我們繼續。

接下來是一段安全性的驗證,需要在參數中設定啟用這個功能才行,大家可以自行看看,這樣的代碼還有很多,以後我一般都不分析,對遊戲流程關係不大。接下來是一個switch,兩個分支,一個重新命名星球(放棄星球),暫時不看;另一個default分支,就是登入後要進行的流程,如下

1. 檢查使用者的訊息,如果有新訊息則要顯示訊息連結
2. 專家系統的流程,我自己去掉了這段邏輯,所以也不打算分析
3. 檢查使用者是否有艦隊活動,如果有則構造艦隊活動資訊表,使用BuildFleetEventTable函數構造,以後介紹
4. 如果使用者有其他星球,則構造其他星球列表,並顯示每個星球的當前活動
5. 顯示自己發射和來自其他玩家的攻擊的星際飛彈活動資訊
6. 其他資訊顯示,比如公告啊,google的廣告等等
7. 如果有月球,顯示月球資訊
8. 下面是一些星球名、星球空間、使用者排名等資訊,比較雜亂

上面這些流程的代碼,都有注釋,不難明白,下面這段代碼我們要介紹下。

if ($planetrow['b_building'] != 0) { UpdatePlanetBatimentQueueList ($planetrow, $user); if ($planetrow['b_building'] != 0) { $BuildQueue = explode (";", $planetrow['b_building_id']); $CurrBuild = explode (",", $BuildQueue[0]); $RestTime = $planetrow['b_building'] - time(); $PlanetID = $planetrow['id']; $Build = InsertBuildListScript ("overview"); $Build .= $lang['tech'][$CurrBuild[0]] . ' (' . ($CurrBuild[1]) . ')'; $Build .= "" . pretty_time($RestTime) . ""; $Build .= "\n\n";  $parse['building'] = $Build; } else { $parse['building'] = $lang['Free']; }} else { $parse['building'] = $lang['Free'];} 

$planetrow 存放當前星球資訊,其中的b_building是建築隊列。上面代碼先判斷是否有建築隊列,然後根據現在的時間,更建立築資訊;如果還是有建築未完成,則顯示出來建築單位和建築的剩餘時間。關於建築隊列功能,以後要詳細介紹,現在先略過。

我們簡單介紹下前面的一個分支,分支裡面還有三個流程:

1. 重新命名星球,代碼不難,也不多說了
2. 放棄殖民星球,並顯示使用者要輸入密碼的頁面
3. 使用者輸入密碼,如果密碼正確則更新本星球的資訊和使用者的預設星球ID(月球未判斷)

至此,使用者登入到遊戲主介面的流程都清楚了,總算進入遊戲了。

http://www.bkjia.com/PHPjc/825513.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/825513.htmlTechArticle六、 遊戲主介面(frames.php) frames.php檔案功能就是顯示遊戲主介面,先看下面的代碼: $InLogin = false;$XNova_Host = $_SERVER['HTTP_HOST'];$XNova_Scri...

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.