广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 4414 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为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.141231 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言