廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 4325 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
ccw111
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x16 鮮花 x49
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x1
[插件] 2D Array(數組)使用方法  (主要給對Array用法有基本了解的人參考)
感謝#2的ChaosX更正我的一些錯誤

本次教學會使用<amxmodx>的function
get_user_origin

一般情況下我們都只會用1D Array
用法和下方差不多
new point[33]
point[id] ++ //玩家的點數增加
但這種方法只能保存一種數據,保存的是不同玩家的點數(一種數據,大概就是1D的定義)

在其他情況下要保存多種不同數據的情況下使用1D Array就會增加了很多不必要的步驟
例子如下:
假如我要使用變數保存玩家的技能點數,金錢和經驗值
用1D Array會這樣做
new playerxp[33]
new playersp[33]
new money[33]

.........
...........

public xyz(id)
{
     money[id] = cs_get_user_money(id)
     playerexp[id] = get_exp((id)  // 假設我有這個function
     playersp[id] = get_sp(id) //同上
}

要宣告的事物會更多
但使用2D Array 可以省下不少工夫

例子如下:

#define xp 0 //主要是為了令自己不用記住格子編號
#define sp 1
#define usd 2  //  這3個定義是不必要做的

new playerinfo[33][3] // 使用二維數組(2D Array)  這裡要感謝ChaosX大的更正
...............
.......

pulic xxxxx(id)
{
    playerinfo[id][usd] = cs_get_user_money(id)
    playerinfo[id][xp] = get_xp(id)
    playerinfo[id][sp] = get_sp(id)
}

使用2D Array有以下好處
1) 節省工夫子
2) 不用記住眾多變數名

以上例子雖然未必體現到1D Array與2D Array的分別,但可以見到2D Array能儲存不同數據的功效

但我可以舉一個例子,不使用2D Array會體驗到的事情

1)儲存玩家的位置

如果使用1D Array
情況會是:
new origin[3]
new playerorigin1[33]
new playerorigin2[33]
new playerorigin3[33]

.........
............

public xxxx(id)
{
   get_user_origin(id, origin, 0) 
   /* 當我要儲存玩家的位置 */
   playerorigin1[id] = origin[1]
   playerorigin2[id] = origin[2]
   playerorigin3[id] = origin[3]
}

使用2D Array時.

new playerorigin[33][3]
.......
........
public XXX(id)
{
  get_user_origin(id, playerorigin[id], 0) //完全不需要定義不同的變數
}


[ 此文章被ccw111在2012-04-24 12:43重新編輯 ]



獻花 x0 回到頂端 [樓 主] From:未知地址 | Posted:2012-04-23 22:46 |
ChaosX 會員卡
個人頭像
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎 優秀管理員勳章 社區建設獎
頭銜:哈哈哈~你看看你!哈哈哈~你看看你!
分類版主
級別: 分類版主 該用戶目前不上站
版區: 遊戲歡樂包, 電玩遊戲
推文 x722 鮮花 x1454
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

教得很好
不過有點問題
playerinfo[33][4] 是33*4
其中前面的[33] 是玩家的ID 也就是1個玩家1個位置
後面的[4]是4個格子
代號是從0~3

不過你的例子只用了3個格子
4個格子只用了1~3(第2格到第4格)
這樣不太合理
而且浪費了0那格的記憶體空間

所以你可以像下面這樣寫
#define xp 0
#define sp 1
#define usd 2

new playerinfo[33][3] // 使用二維數組(2D Array)
...............
.......

public xxxxx(id)
{
  playerinfo[id][usd] = cs_get_user_money(id)
  playerinfo[id][xp] = get_xp(id)
  playerinfo[id][sp] = get_sp(id)
}

若沒有定義xp sp usd
就要改成

public xxxxx(id)
{
  playerinfo[id][0] = cs_get_user_money(id)
  playerinfo[id][1] = get_xp(id)
  playerinfo[id][2] = get_sp(id)
}


版主以死 有事燒紙
獻花 x1 回到頂端 [1 樓] From:臺灣中華電信股份有限公司 | Posted:2012-04-24 01:29 |
ccw111
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x16 鮮花 x49
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

下面是引用 ChaosX 於 2012-04-24 01:29 發表的 : 到引言文
教得很好
不過有點問題
playerinfo[33][4] 是33*4
其中前面的[33] 是玩家的ID 也就是1個玩家1個位置
後面的[4]是4個格子
.......


因為學習amxx的時候.習慣了不使用0的位置(主要原因是玩家的編號是由1開始...)
感謝你的更正
否則我也不能發現

現在編輯一下


獻花 x1 回到頂端 [2 樓] From:未知地址 | Posted:2012-04-24 12:40 |
mas_alone
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x8 鮮花 x18
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

數組這個在我學C語言的時候有教
看了樓主的文章我覺得我的水平又得到了提升


獻花 x0 回到頂端 [3 樓] From:美國 | Posted:2012-04-30 11:26 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.037701 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言