PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(五)
六、 游戲主界面(frames.php)
frames.php文件功能就是顯示游戲主界面,先看下面的代碼:
$InLogin = false;
$XNova_Host = $_SERVER['HTTP_HOST'];
$XNova_Script = $_SERVER['SCRIPT_NAME'];
$Uri_Array = explode ('/', $XNova_Script);
// On vire le script
array_pop($Uri_Array);
$XNova_URI = implode ('/', $Uri_Array);
$XNovaRootURL = "http://". $XNova_Host ."/". $XNova_URI ."/";
上面的代碼主要是拼出服務(wù)器的URL,比較簡(jiǎn)單;前面的變量$InLogin暫時(shí)不講,等我們專門講解common.php的時(shí)候,集中說(shuō)明。
然后include了兩個(gè)我們前面講過(guò)的文件,最后輸出一大段 HTML 代碼。需要注意的是,HTML代碼里面構(gòu)造了兩frame,分別是leftmenu.php 和 overview.php,我下面將要分析。
七、 左導(dǎo)航欄(leftmenu.php)
這個(gè)文件其實(shí)很簡(jiǎn)單,除去前面我們常見(jiàn)的代碼,就只聲明了ShowLeftMenu()函數(shù),最后用 display() 輸出頁(yè)面。函數(shù)ShowLeftMenu()也不難,代碼無(wú)非是gettemplate模板文件、取得服務(wù)器設(shè)置的參數(shù)以及登錄的用戶等級(jí),然后構(gòu)造頁(yè)面。其中要注意的是用戶等級(jí)變量$Level,當(dāng)$level的值大于0的時(shí)候,會(huì)顯示管理員鏈接。$level的值所代表的級(jí)別定義在system.mo文件中, 0 是普通玩家,1 是游戲操作員,2 是游戲管理員,3 是管理員。
八、 概況(overview.php)
這個(gè)文件其實(shí)就是左導(dǎo)航欄中對(duì)應(yīng)的鏈接'概況',主要功能是顯示當(dāng)前星球的大概信息和用戶的信息,包括其他星球的當(dāng)前狀態(tài)等。代碼量很大,其實(shí)條理很清晰,我們慢慢看來(lái),前面的幾行代碼我們略過(guò)。
$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);
這段代碼功能是取得當(dāng)前星球的月球,并檢查修正月球的使用空間。CheckPlanetUsedFields函數(shù)不僅對(duì)月球起作用,同樣可以用來(lái)檢查星球,先不看其中代碼,我們繼續(xù)。
接下來(lái)是一段安全性的驗(yàn)證,需要在參數(shù)中設(shè)置啟用這個(gè)功能才行,大家可以自行看看,這樣的代碼還有很多,以后我一般都不分析,對(duì)游戲流程關(guān)系不大。接下來(lái)是一個(gè)switch,兩個(gè)分支,一個(gè)重命名星球(放棄星球),暫時(shí)不看;另一個(gè)default分支,就是登錄后要進(jìn)行的流程,如下
1. 檢查用戶的消息,如果有新消息則要顯示消息鏈接
2. 專家系統(tǒng)的流程,我自己去掉了這段邏輯,所以也不打算分析
3. 檢查用戶是否有艦隊(duì)活動(dòng),如果有則構(gòu)造艦隊(duì)活動(dòng)信息表,使用BuildFleetEventTable函數(shù)構(gòu)造,以后介紹
4. 如果用戶有其他星球,則構(gòu)造其他星球列表,并顯示每個(gè)星球的當(dāng)前活動(dòng)
5. 顯示自己發(fā)射和來(lái)自其他玩家的攻擊的星際導(dǎo)彈活動(dòng)信息
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 .= "
<div id="\"blc\"" class="\"z\"">" . pretty_time($RestTime) . "</div>
";
$Build .= "\n<script type="text/javascript"><!--mce:0--></script>\n";
$parse['building'] = $Build;
} else {
$parse['building'] = $lang['Free'];
}
} else {
$parse['building'] = $lang['Free'];
}
$planetrow 存放當(dāng)前星球信息,其中的b_building是建筑隊(duì)列。上面代碼先判斷是否有建筑隊(duì)列,然后根據(jù)現(xiàn)在的時(shí)間,更新建筑信息;如果還是有建筑未完成,則顯示出來(lái)建筑單位和建筑的剩余時(shí)間。關(guān)于建筑隊(duì)列功能,以后要詳細(xì)介紹,現(xiàn)在先略過(guò)。
我們簡(jiǎn)單介紹下前面的一個(gè)分支,分支里面還有三個(gè)流程:
1. 重命名星球,代碼不難,也不多說(shuō)了
2. 放棄殖民星球,并顯示用戶要輸入密碼的頁(yè)面
3. 用戶輸入密碼,如果密碼正確則更新本星球的信息和用戶的默認(rèn)星球ID(月球未判斷)
至此,用戶登錄到游戲主界面的流程都清楚了,總算進(jìn)入游戲了。
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十四)
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十三)
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十二)
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十一)
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十)
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(四)
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(三)
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(二)
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(一)
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十五)
相關(guān)文章
ThinkPHP中create()方法自動(dòng)驗(yàn)證表單信息
這篇文章主要為大家詳細(xì)介紹了ThinkPHP中create()方法自動(dòng)驗(yàn)證表單信息,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
yii2.0使用Plupload實(shí)現(xiàn)帶縮放功能的多圖上傳
這篇文章主要介紹了yii2.0使用Plupload實(shí)現(xiàn)帶縮放功能的多圖上傳的相關(guān)資料,需要的朋友可以參考下2015-12-12
分享微信掃碼支付開(kāi)發(fā)遇到問(wèn)題及解決方案-附Ecshop微信支付插件
微信掃碼支付在購(gòu)物商城非常流行,本篇文章給大家分享微信掃碼支付開(kāi)發(fā)遇到問(wèn)題及解決方案-附Ecshop微信支付插件,需要的朋友可以參考下2015-08-08
Django中datetime的處理方法(strftime/strptime)
這篇文章主要介紹了Django中datetime的處理方式(strftime/strptime),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07
Laravel5.4簡(jiǎn)單實(shí)現(xiàn)app接口Api Token認(rèn)證方法
這篇文章主要介紹了Laravel5.4簡(jiǎn)單實(shí)現(xiàn)app接口Api Token認(rèn)證,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
php 調(diào)用百度sms來(lái)發(fā)送短信的實(shí)現(xiàn)示例
這篇文章主要介紹了php 調(diào)用百度sms來(lái)發(fā)送短信的實(shí)現(xiàn)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
基于PHP的簡(jiǎn)單采集數(shù)據(jù)入庫(kù)程序
前幾天有一朋友要我?guī)妥鲆粋€(gè)采集新聞信息的程序,抽了點(diǎn)時(shí)間寫了個(gè)PHP版本的,隨筆記錄下。2014-07-07

