找回密码
 点一下
查看: 1467|回复: 18

如何让AI玩家取名字?

[复制链接]
发表于 2010-8-6 17:20:21 | 显示全部楼层 |阅读模式
RT,在论坛找过,没找到……
偶躞发现有些地图的AI玩家不是PLAYERXX,而是随机中文名,如何做的?
发表于 2010-8-6 17:47:53 | 显示全部楼层
如果需要固定的电脑名称可以在情节-玩家设置里面改
如果是随机的话就不知道了,不过貌似听人说过有某个函数可以修改玩家名称,建议搜索下
回复

使用道具 举报

发表于 2010-8-6 17:51:15 | 显示全部楼层
  1. set i=0
  2. set s2[i]="小白"
  3. set i=i+1
  4. set s2[i]="小黑"
  5. set i=i+1
  6. set s2[i]="小红"
  7. set i=i+1
  8. set s2[i]="小黄"
  9. set i=i+1
  10. set s2[i]="小蓝"
  11. set j=GetRandomInt(0,i)
  12. set m=0
  13. set s1[m]="张"
  14. set m=m+1
  15. set s1[m]="李"
  16. set m=m+1
  17. set s1[m]="王"
  18. set m=m+1
  19. set s1[m]="刘"
  20. set m=m+1
  21. set s1[m]="赵"
  22. set n=GetRandomInt(0,m)
  23. call SetPlayerName(Player(XXX),s1[n]+s2[j])
复制代码

输出:刘小黑 啥的...
回复

使用道具 举报

发表于 2010-8-6 18:50:10 | 显示全部楼层
[trigger]
AIsName
    事件
        时间 - 游戏开始 0.00 秒
    条件
    动作
        设置 Name[0] = sb001
        设置 Name[1] = sb002
        设置 Name[2] = sb003
        设置 Name[3] = sb004
        设置 Name[4] = sb005
        玩家 - 更改 玩家4(紫色) 的名字为 Name[(随机整数,最小值: 0 最大值: 4)]
[/trigger]

(4)随机AI名称演示 LostTemple.w3x

249 KB, 下载次数: 28

回复

使用道具 举报

发表于 2010-8-6 18:52:35 | 显示全部楼层
JASS......不要动不动就JASS好不好......
回复

使用道具 举报

 楼主| 发表于 2010-8-6 20:04:36 | 显示全部楼层
演示收下,然而,对于多个AI玩家,如何实现
我是说,循环玩家1-8
若非用户
则设定名字【随机】
可是这样就有可能出现重复的名字了……
回复

使用道具 举报

发表于 2010-8-6 20:13:33 | 显示全部楼层
引用第4楼·于2010-08-06 18:52发表的  :
JASS......不要动不动就JASS好不好......

jass有什么不好的吗?


防重复你可以自己设计算法避免重复的
回复

使用道具 举报

 楼主| 发表于 2010-8-6 20:17:02 | 显示全部楼层
回答问题啊
回复

使用道具 举报

 楼主| 发表于 2010-8-6 20:18:03 | 显示全部楼层
提供下思路……
当初学C的时候也被这问题困扰过
回复

使用道具 举报

发表于 2010-8-6 20:39:46 | 显示全部楼层
一个名字用过之后就把那个变量清空。
然后找名字的时候,循环检查直到找到新名字。
回复

使用道具 举报

发表于 2010-8-6 21:11:19 | 显示全部楼层
将使用过的名字与最后一个替换,,随机最大值减一。
如果是多个字符随机组成,将已经使用的名字加入一个数组,每次比对全部已经生成的,重复则重新生成。
回复

使用道具 举报

发表于 2010-8-6 21:44:21 | 显示全部楼层
[jass]function SetAIName takes nothing returns nothing
local string array name
local string temp
local integer i=0
local integer j
local integer max

set max=0
set name[max] = "笨蛋"
set max=max+1
set name[max] = "傻冒"
set max=max+1
set name[max] = "白痴"
//省略其他八千多个笨蛋的ID...
set max=max+1
set name[max] = "蠢货"

loop
set j=GetRandomInt(i,max)
set temp=name
set name=name[j]
set name[j]=temp
if GetPlayerController(Player(i))==MAP_CONTROL_COMPUTER then
call SetPlayerName(Player(i),name)
endif
set i=i+1
exitwhen i>=12 //最大玩家数
endloop
endfunction[/jass]
回复

使用道具 举报

发表于 2010-8-6 21:45:02 | 显示全部楼层
好多好名字
回复

使用道具 举报

 楼主| 发表于 2010-8-7 10:15:52 | 显示全部楼层
[trigger]
AIsName
    事件
        地图初始化
    条件
    动作
        设置 Name[0] = 米米可
        设置 Name[1] = 老廖
        设置 Name[2] = 贾君鹏
        设置 Name[3] = 神奇的小鸡
        设置 Name[4] = 玩的就是心跳
        设置 Name[5] = 国产的寂寞
        设置 Name[6] = 老太太的窝囊废
        设置 Name[7] = 老太太的小妹妹
        设置 Name[8] = 曾哥真汉子
        设置 Name[9] = 卑鄙的楼主
        设置 Name[10] = 三大妈的红色
        设置 Name[11] = 贾哥拥护者
        设置 Name[12] = 石头擦破夜姐
        设置 Name[13] = 纯娘们掌握
        设置 Name[14] = 传说小妹妹
        设置 Name[15] = 那一夜
        设置 Name[16] = 鸟姐的巢穴
        设置 Name[17] = 无耻硬又黑
        设置 Name[18] = 国产的威武
        设置 Name[19] = 广告天使
        设置 Name[20] = 白痴钱包
        设置 Name[21] = 国产春哥
        设置 Name[22] = 白痴的暴雪
        设置 Name[23] = 国产育碧
        设置 Name[24] = 朋友死了我就跑
        设置 Name[25] = 我才是真正的暗黑破坏神
        设置 Name[26] = 等级再高也怕快招
        设置 Name[27] = 不是树妖是人妖
        设置 Name[28] = 是男人就下100层
        设置 Name[29] = 我是老大!
        设置 Name[30] = 中科大12岁“神童”杨航
        设置 Name[31] = 郭德纲砸缸
        设置 Name[32] = BT种子
        设置 Name[33] = 人生AV剧
        设置 Name[34] = CCAV
        设置 Name[35] = 中国的死刑太多还是太少
        设置 Name[36] = 食色性也
        设置 Name[37] = 聚众淫乱的背后
        设置 Name[38] = 从世博看世界
        设置 Name[39] = 3C认证,绝对不跑
        设置 Name[40] = 春鸽我要暴你菊花!
        设置 Name[41] = 李连杰头发尽白
        设置 Name[42] = 非诚勿扰
        设置 Name[43] = 三国杀逃跑了一局
        设置 Name[44] = 可爱的神龙
        设置 Name[45] = GA 遗失的记忆
        设置 Name[46] = 还珠格格之燕儿翩翩飞
        设置 Name[47] = 国美柜台无美女
        设置 Name[48] = 猫扑真假广院献身
        设置 Name[49] = 女大学生or日本A V
        设置 Name[50] = 车模兽兽艳照门
        设置 Name[51] = 广西来宾烟草局局长
        设置 Name[52] = 看人类这种高级动物在公众场所交合中扭曲的心态
        设置 Name[53] = 32元半价全家桶
        设置 Name[54] = 一脱成名
        设置 Name[55] = 刘德华第二
        设置 Name[56] = 于布仁书记
        设置 Name[57] = 巧克力的狂欢
        设置 Name[58] = 北京修鞋哥
        设置 Name[59] = 728真情大救援
        设置 Name[60] = 梦在复旦
        循环动作[循环整数B]从 3 到 12, 运行 (Loop - 动作)
            Loop - 动作
                设置 AI_Name = (随机整数,最小值: 1 最大值: 60)
                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                    If - 条件
                        ((玩家 循环整数B [R]) 的控制者) 等于 电脑
                    Then - 动作
                        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                            If - 条件
                                Name[AI_Name] 不等于 <空字符串>
                            Then - 动作
                                玩家 - 更改 (玩家 循环整数B [R]) 的名字为 Name[AI_Name]
                                设置 Name[AI_Name] = <空字符串>
                            Else - 动作
                                循环动作[循环整数A]从 1 到 60, 运行 (Loop - 动作)
                                    Loop - 动作
                                        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                                            If - 条件
                                                Name[循环整数A [R]] 不等于 <空字符串>
                                            Then - 动作
                                                玩家 - 更改 (玩家 循环整数B [R]) 的名字为 Name[循环整数A [R]]
                                            Else - 动作
                                                不做任何动作
                    Else - 动作
                        不做任何动作
[/trigger]
回复

使用道具 举报

 楼主| 发表于 2010-8-7 10:21:58 | 显示全部楼层
这样是否可以??
不知道这个算法如何(其实是不知道在触发中怎么循环)
回复

使用道具 举报

发表于 2010-8-7 10:42:44 | 显示全部楼层
这样吧:
[trigger]
D
    事件
        地图初始化
    条件
    动作
        设置 Strings[1] = 拿到了第一滴血
        设置 Strings[2] = 正在向胜利迈进
        设置 Strings[3] = 大杀特杀
        设置 Strings[4] = 主宰比赛
        设置 Strings[5] = 杀人如麻
        设置 Strings[6] = 无人能挡
        设置 Strings[7] = 杀得变态
        设置 Strings[8] = 妖怪一般
        设置 Strings[9] = 上帝一样
        设置 Strings[10] = 超越神了
        设置 Strings[11] = 完成了一次双杀
        设置 Strings[12] = 完成了一次三杀
        设置 Strings[13] = 完成了疯狂杀戮
        设置 Strings[14] = 已经抱走了!!
        设置 Strings[15] = 近卫军团
        设置 Strings[16] = 天灾军团
        设置 LIST_MAX = 16
        For循环整数A从 3 到 12, 做动作
            Loop - 动作
                设置 LIST_MIN = (随机整数,最小值: 1 最大值: LIST_MAX)
                玩家 - 更改 (玩家 (循环整数A)) 的名字为 Strings[LIST_MIN]
                设置 Strings[LIST_MIN] = Strings[LIST_MAX]
                设置 LIST_MAX = (LIST_MAX - 1)

[/trigger]
回复

使用道具 举报

发表于 2010-8-7 15:24:13 | 显示全部楼层
引用第11楼Conflux于2010-08-06 21:44发表的  :
[jass]function SetAIName takes nothing returns nothing
local string array name
local string temp
local integer i=0
local integer j
.......

弱弱的问一句player(i),那该不会是说玩家1是player(0),玩家12是player(11)?
回复

使用道具 举报

发表于 2010-8-7 16:03:07 | 显示全部楼层
CJ里面玩家序号要小一,也就是“玩家1是player(0)”
BJ,也就是T里面就不是了。

同样的还有“物品栏序号”等
回复

使用道具 举报

发表于 2010-8-7 20:39:17 | 显示全部楼层
其实13楼一到循环整数A,就意味着随机概率的不平均了。
靠前的几个ID会有更高的出场率。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-9-28 12:29 , Processed in 0.067448 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表