<nav id="y8awq"><sup id="y8awq"></sup></nav>
  • <optgroup id="y8awq"><sup id="y8awq"></sup></optgroup>
  • 歡迎訪問北大青鳥官方網站
    0535-2114665
    大數據游戲開發
    日期【2019-07-05 19:33:52】 共閱:【】次
            以《魔獸世界》為例,在游戲中,獵人的寵物跟敵人一“碰”上,戰斗便一觸即發。在程序里是利用碰撞算法來判斷是否有碰撞發生的。當然,像《魔獸世界》這類游戲不需要精確的碰撞檢測,只要很簡單的碰撞算法就能應付了,但像一些飛行模擬游戲就需要精確的碰撞檢測了;現在換一個場景,你在如畫的游戲世界里休閑地散步,很不幸,一只妖怪盯上了你,而且它足夠聰明,它會選擇一條最短的路徑向你殺過去。為什么這只妖怪那么聰明?這就是A*(讀A星)算法的魔力,A*算法是一種尋找最短的路徑的尋路算法。這類例子在游戲中比比皆是,大家在玩游戲時可以多加留意。

      目前為止,被設計出來而又應用廣泛的算法有很多,如貪婪算法、遺傳算法和一些常用的排序算法等等。下面,向大家介紹游戲中用得最多的算法——排序算法。

    我們知道,在游戲場景里,在近處的游戲角色會遮擋住遠處的角色。要做到這一點,一種方法是可以把所有的角色按它們的坐標值進行排序,然后以遠到近把玩家“放”入到游戲場景里。常用的排序算法有四種:選擇排序、冒泡排序、插入排序和快速排序。以下我們僅以最簡單的冒泡排序法為例來加深大家對算法的理解。
      對一組有N個元素的數組,我們把它的每一個元素想象成一個泡泡。從最底部的元素開始,將各相鄰的元素進行比較,若下面的元素大于上面的元素時,則把它們的值進行交換,即較大的元素將“往上冒泡”。如此類推,我們將要進行N-1次的“冒泡”。template < class T >
    void bubbli_sort( T a[], int n )
    {
    int i,j,last_pos;

    i = n - 1;
    while( i > 0 )
    {
    last_pos = 0;

    for( j = 0; j < i; j++ )
    {
    if( a[j+1] < a[j] )
    {
    T temp = a[j];

    a[j] = a[j+1];
    a[j+1] = temp;
    last_pos = j;
    }

    }
    i = last_pos;}}

    二、游戲數據的大管家——數據結構
      
    數據結構是什么呢?這是一個很抽象的概念,沒有統一的名詞解釋。你可以把它理解為數據在計算機中的組織形式。經典的數據結構,在網絡游戲中都能得到體現。下面我們為大家舉例并介紹。
      1.道具包管理——線性表

    在任何網絡游戲中,你的道具包里也會放著許多珍貴的道具。在程序中需要把這些數據組織起來,方便管理。使用線性表可以簡單方便地做到。線性表是一組元素以線性的結構組織起來,如(e1,e2,…en)。線性表一般分為數組與鏈表兩類。
      數組里的元素以連續的內存空間存放,因此可以用內存地址檢索到對應的數據元素,訪問元素很方便。但如果要進行插入/刪除數據元素,就要做一些內存移動了,效率比較低。而鏈表的數據元素存放在任意的物理內存位置,相鄰的元素以指針作為“鏈扣”串連起來。如單向鏈表,元素e1有一個指針指向它的后繼節點e2,這個指針就是它們之間的“鏈扣”。當進行插入/刪除數據元素時,只要改變相應的“鏈扣”就可以,不需要做內存移動,效率相對于數組要高。

    我在開始玩《夢幻西游》時,在城里走了幾圈就接了滿身的任務。這讓我很煩惱,不知從哪個任務開始做起,這時我想到了隊列。隊列是一種“先進先出(first-in-first out, FIFO)”的數據結構。就好像是在銀行里排隊,排在前面的先服務。每次接到任務就把該任務壓進任務隊列里,要做任務時就從任務隊列里取出一個任務,這樣哪個任務先接到就先做哪個任務。
    也許你不喜歡這樣方式,你想做一個賞金獵人,哪個任務報酬多的就先做哪個任務。這樣普通的隊列就滿足不了你的需求了,你需要的是優先級隊列。優先級隊列在插入元素時,優先高的元素插入隊列前面。把任務的報酬設成是優先級數據,那么你每次在任務隊列里取出任務時,就能保證這個任務是你現接的任務里報酬最高的。
      堆和棧在概念上不大一樣,這里所說的堆棧是指棧(stack)。棧是一種“先進后出”的數據結構。就好像是疊盤子,疊在最上面的盤子最先拿來使用。隊列和堆??赡苁鞘褂妙l率最高的數據結構了。在匹配表達式應用中,堆棧發揮了巨大的作用。還有經典的漢諾塔問題,如果沒有堆棧的幫助,你可不知道要搬碟子搬到什么時候了。這里我想舉一個Word的例子,這個例子比較形象。誰都會有失誤,在Word里發生了誤操作一點也不需要驚慌,因為Word有“撤消”的功能,可以撤消你之前的操作。把用戶的操作壓入棧里,要撤消操作時就從棧彈出最近發生的操作。這樣可以很方便地實現這個功能。


    上一篇:大數據工程師
    下一篇:最后一頁
    北青鳥課程
    學員風采
    聯系我們
    電話: 0535-2114665
    郵箱:bdqn@ytaccp.com
    網址:http://www.ytaccp.com/
    地址:煙臺市芝罘區南大街117號文化宮大廈2層
    0535-2114665
    手機站
    COPYRIHGT 2017 煙臺中北煙臺校區 版權所有 ALL RIGHTS RESERVED
    地址:煙臺市芝罘區南大街117號文化宮大廈2層 技術支持:煙臺北大青鳥
    亚洲2020久久久久久久,久久久久精品国产无码,在线播放国产精品三级网,亚洲日韩视频在看观看