2D Array(數組)使用方法

Home Home
引用 | 編輯 ccw111
2012-04-23 22:46
樓主
推文 x1
感謝#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) //完全不需要定義不同的變數
}

獻花 x0
引用 | 編輯 ChaosX
2012-04-24 01:29
1樓
  
教得很好
不過有點問題
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
引用 | 編輯 ccw111
2012-04-24 12:40
2樓
  
下面是引用 ChaosX 於 2012-04-24 01:29 發表的 : 到引言文
教得很好
不過有點問題
playerinfo[33][4] 是33*4
其中前面的[33] 是玩家的ID 也就是1個玩家1個位置
後面的[4]是4個格子
.......


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

現在編輯一下

獻花 x1
引用 | 編輯 mas_alone
2012-04-30 11:26
3樓
  
數組這個在我學C語言的時候有教
看了樓主的文章我覺得我的水平又得到了提升

獻花 x0