PHP網頁遊戲學習之Xnova(ogame)源碼解讀(三)_php執行個體

來源:互聯網
上載者:User

四、 使用者註冊(reg.php)

在看使用者註冊之流程之前,我把表的用途做個簡單說明,現在只是大概的說明,後面我們再仔細瞭解,大家可以記下這個說明。

game_aks          聯合攻擊組記錄表,攻擊完成刪除資料game_alliance      聯盟表game_annonce      公告表,基本無用game_banned        Ban玩家表game_buddy        好友表game_chat          聊天記錄表game_config        系統參數表game_errors        錯誤記錄檔表game_fleets        艦隊活動記錄表,活動完成刪除資料game_galaxy        星系表game_iraks        星際飛彈活動表,活動完成刪除資料game_lunas        月球列表game_messages      訊息表game_notes        筆記表game_planets      星球列表,包括月球game_rw            戰報表game_statpoints    積分表game_users        使用者表


現在我們開始使用者註冊流程,一開始又可以看到定義了兩個常量,

define('INSIDE' , true);define('INSTALL' , false); 

INSIDE是用來防止攻擊的,值為true;INSTALL是用來記錄現在是否處於安裝遊戲的進程中,值為false。接下來又是Include兩個檔案,extension.inc和common.php;然後又是load語言檔案reg.mo。在後面的章節裡,我不再介紹了前面這段代碼,大家已經明了了。


下面聲明了兩個函數,用來發送註冊成功後的資訊,包括使用者名稱和密碼等。

function sendpassemail($emailaddress, $username, $password)function mymail($to, $title, $body, $from = '') 


現在介紹Xnova源碼裡面經常用到的一個結構,下面是虛擬碼說明,

if ($_POST) { //如果使用者有輸入//這裡是有使用者輸入後執行過程}else{//這裡是無使用者輸入後的執行過程,包括頁面第一次顯示的時候}


我們看使用者註冊流程,為了說明前面的結構,特意貼了代碼。和前面我們講過的一樣,先gettemplate檔案,然後parse出來並顯示頁面。

if ($_POST) { //代碼略} else { $parse = $lang; $parse['servername'] = $game_config['game_name']; $page = parsetemplate(gettemplate('registry_form'), $parse); display ($page, $lang['registry'], false);} 

下面看使用者輸入資訊後的流程,一堆的if都是判斷使用者輸入的資訊是否合法,並用$errors變數記錄錯誤的數量,$errorlist變數記錄錯誤的訊息。如果$errors不為零就輸出錯誤資訊;如果沒有錯誤,就進入下面的流程:

1. 檢查使用者名稱是否有非法字元

2. 檢查Email是否有非法字元

3. 檢查星球名是否有非法字元

4. 加密使用者的密碼,md5

5. 往表users中INSERT使用者資訊

6. 取得剛剛插入產生的使用者ID號備用

7. 一大段代碼功能,找一個空的星球座標給這個使用者作為母星,並使用函數CreateOnePlanetRecord()建立星球,這裡要使用三個系統參數LastSettedGalaxyPos、LastSettedSystemPos、LastSettedPlanetPos,看命名就應該清楚,分別是最後星系、最後太陽系、最後行星位置

8. 更新users表中的星球ID為剛剛產生的星球ID

9. 向這個玩家發送歡迎資訊

10. 向這個玩家發送註冊資訊郵件

11. 顯示註冊成功頁面,註冊結束

以上流程,我們都可以找到對應的代碼,代碼難度不大,所以沒有列出來。函數CreateOnePlanetRecord()以後詳細介紹,現在說了反而頭大,函數SendSimpleMessage()我們現在看一下,聲明在SendSimpleMessage.php檔案中。

function SendSimpleMessage ( $Owner, $Sender, $Time, $Type, $From, $Subject, $Message) { global $messfields; if ($Time == '') { $Time = time(); } if ($Sender == null){ $Sender = 0; } $QryInsertMessage = "INSERT INTO {{table}} SET "; $QryInsertMessage .= "'message_owner' = ". $Owner .", "; $QryInsertMessage .= "'message_sender' = ". $Sender .", "; $QryInsertMessage .= "'message_time' = " . $Time . ", "; $QryInsertMessage .= "'message_type' = ". $Type .", "; $QryInsertMessage .= "'message_from' = '". addslashes( $From ) ."', "; $QryInsertMessage .= "'message_subject' = '". addslashes( $Subject ) ."', "; $QryInsertMessage .= "'message_text' = '". addslashes( $Message ) ."';"; doquery( $QryInsertMessage, 'messages'); $QryUpdateUser = "UPDATE {{table}} SET "; $QryUpdateUser .= "'".$messfields[$Type]."' = '".$messfields[$Type]."' + 1, "; $QryUpdateUser .= "'".$messfields[100]."' = '".$messfields[100]."' + 1 "; $QryUpdateUser .= "WHERE "; $QryUpdateUser .= "'id' = '". $Owner ."';"; doquery( $QryUpdateUser, 'users');} 

函數的功能是往messages表中插入詳細訊息,並更新users表的訊息數量,很明了,呵呵。另外一個函數message()的功能和display()基本相同,就不詳細寫了,自己看下吧。至此,使用者註冊流程就分析完了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.