AI中如何判断下列情况?
1.如何判断有几个人类同盟2.如何判断有几个电脑同盟
3.如何判断有几个同盟
4.如何判断有几个人类敌人
5.如何判断有几个电脑敌人
6.如何判断有几个敌人
有点啰嗦,哪位老师知道? 我有个笨办法,对第1-8家挨个判断
以下是判断本队中有多少个电脑的代码(注自己也算一家电脑),其他请照葫芦画瓢
;--------------------
;-- goal ID --
;--------------------
;如果与其他goal ID定义冲突,请修改
(defconst g-team 1)
(defconst g-team-tmp 2)
(defconst timer-team-judge-triggered 3);
;--------------------
;-- 定时器ID --
;--------------------
;如果与其他定时器ID定义冲突,请修改
;注意,定时器最多只能有10个,其值不能大于10
(defconst TIMER-TEAM-JUDGE 10)
;--------------------
;- 常量 --
;宏的值不存在冲突问题,不需要修改
;--------------------
(defconst FALSE 0)
(defconst TRUE 1)
;g-team,g-team-tmp可能的值,
(defconst TEAM-0MEMBER 0);0人组队
(defconst TEAM-1MEMBER 1);1人组队
(defconst TEAM-2MEMBER 2);2人组队
(defconst TEAM-3MEMBER 3);3人组队
(defconst TEAM-4MEMBER 4);4人组队
(defconst TEAM-5MEMBER 5);5人或5人以上组队
;初始化
(defrule
(true)
=>
(set-goal g-team TEAM-1MEMBER)
(set-goal g-team-tmp TEAM-1MEMBER)
(set-goal timer-team-judge-triggered FALSE)
(enable-timer TIMER-TEAM-JUDGE 60)
(disable-self)
)
;循环判断
;判断在游戏里的本组电脑数量(注:自己也算一个)
(defrule
(timer-triggered TIMER-TEAM-JUDGE)
=>
(set-goal timer-team-judge-triggered TRUE)
(set-goal g-team-tmp TEAM-1MEMBER)
)
;判断1p
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 1))
(player-in-game 1)
(player-computer 1)
(stance-toward 1 ally)
(goal g-team-tmp TEAM-1MEMBER)
=>
(set-goal g-team-tmp TEAM-2MEMBER)
)
;判断2p
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 2))
(player-in-game 2)
(player-computer 2)
(stance-toward 2 ally)
(goal g-team-tmp TEAM-2MEMBER)
=>
(set-goal g-team-tmp TEAM-3MEMBER)
)
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 2))
(player-in-game 2)
(player-computer 2)
(stance-toward 2 ally)
(goal g-team-tmp TEAM-1MEMBER)
=>
(set-goal g-team-tmp TEAM-2MEMBER)
)
;判断3p
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 3))
(player-in-game 3)
(player-computer 3)
(stance-toward 3 ally)
(goal g-team-tmp TEAM-3MEMBER)
=>
(set-goal g-team-tmp TEAM-4MEMBER)
)
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 3))
(player-in-game 3)
(player-computer 3)
(stance-toward 3 ally)
(goal g-team-tmp TEAM-2MEMBER)
=>
(set-goal g-team-tmp TEAM-3MEMBER)
)
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 3))
(player-in-game 3)
(player-computer 3)
(stance-toward 3 ally)
(goal g-team-tmp TEAM-1MEMBER)
=>
(set-goal g-team-tmp TEAM-2MEMBER)
)
;判断4p
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 4))
(player-in-game 4)
(player-computer 4)
(stance-toward 4 ally)
(goal g-team-tmp TEAM-4MEMBER)
=>
(set-goal g-team-tmp TEAM-5MEMBER)
)
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 4))
(player-in-game 4)
(player-computer 4)
(stance-toward 4 ally)
(goal g-team-tmp TEAM-3MEMBER)
=>
(set-goal g-team-tmp TEAM-4MEMBER)
)
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 4))
(player-in-game 4)
(player-computer 4)
(stance-toward 4 ally)
(goal g-team-tmp TEAM-2MEMBER)
=>
(set-goal g-team-tmp TEAM-3MEMBER)
)
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 4))
(player-in-game 4)
(player-computer 4)
(stance-toward 4 ally)
(goal g-team-tmp TEAM-1MEMBER)
=>
(set-goal g-team-tmp TEAM-2MEMBER)
)
;判断5p
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 5))
(player-in-game 5)
(player-computer 5)
(stance-toward 5 ally)
(goal g-team-tmp TEAM-4MEMBER)
=>
(set-goal g-team-tmp TEAM-5MEMBER)
)
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 5))
(player-in-game 5)
(player-computer 5)
(stance-toward 5 ally)
(goal g-team-tmp TEAM-3MEMBER)
=>
(set-goal g-team-tmp TEAM-4MEMBER)
)
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 5))
(player-in-game 5)
(player-computer 5)
(stance-toward 5 ally)
(goal g-team-tmp TEAM-2MEMBER)
=>
(set-goal g-team-tmp TEAM-3MEMBER)
)
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 5))
(player-in-game 5)
(player-computer 5)
(stance-toward 5 ally)
(goal g-team-tmp TEAM-1MEMBER)
=>
(set-goal g-team-tmp TEAM-2MEMBER)
)
;判断6p
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 6))
(player-in-game 6)
(player-computer 6)
(stance-toward 6 ally)
(goal g-team-tmp TEAM-4MEMBER)
=>
(set-goal g-team-tmp TEAM-5MEMBER)
)
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 6))
(player-in-game 6)
(player-computer 6)
(stance-toward 6 ally)
(goal g-team-tmp TEAM-3MEMBER)
=>
(set-goal g-team-tmp TEAM-4MEMBER)
)
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 6))
(player-in-game 6)
(player-computer 6)
(stance-toward 6 ally)
(goal g-team-tmp TEAM-2MEMBER)
=>
(set-goal g-team-tmp TEAM-3MEMBER)
)
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 6))
(player-in-game 6)
(player-computer 6)
(stance-toward 6 ally)
(goal g-team-tmp TEAM-1MEMBER)
=>
(set-goal g-team-tmp TEAM-2MEMBER)
)
;判断7p
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 7))
(player-in-game 7)
(player-computer 7)
(stance-toward 7 ally)
(goal g-team-tmp TEAM-4MEMBER)
=>
(set-goal g-team-tmp TEAM-5MEMBER)
)
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 7))
(player-in-game 7)
(player-computer 7)
(stance-toward 7 ally)
(goal g-team-tmp TEAM-3MEMBER)
=>
(set-goal g-team-tmp TEAM-4MEMBER)
)
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 7))
(player-in-game 7)
(player-computer 7)
(stance-toward 7 ally)
(goal g-team-tmp TEAM-2MEMBER)
=>
(set-goal g-team-tmp TEAM-3MEMBER)
)
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 7))
(player-in-game 7)
(player-computer 7)
(stance-toward 7 ally)
(goal g-team-tmp TEAM-1MEMBER)
=>
(set-goal g-team-tmp TEAM-2MEMBER)
)
;判断8p
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 8))
(player-in-game 8)
(player-computer 8)
(stance-toward 8 ally)
(goal g-team-tmp TEAM-4MEMBER)
=>
(set-goal g-team-tmp TEAM-5MEMBER)
)
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 8))
(player-in-game 8)
(player-computer 8)
(stance-toward 8 ally)
(goal g-team-tmp TEAM-3MEMBER)
=>
(set-goal g-team-tmp TEAM-4MEMBER)
)
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 8))
(player-in-game 8)
(player-computer 8)
(stance-toward 8 ally)
(goal g-team-tmp TEAM-2MEMBER)
=>
(set-goal g-team-tmp TEAM-3MEMBER)
)
(defrule
(goal timer-team-judge-triggered TRUE)
(not(player-number 8))
(player-in-game 8)
(player-computer 8)
(stance-toward 8 ally)
(goal g-team-tmp TEAM-1MEMBER)
=>
(set-goal g-team-tmp TEAM-2MEMBER)
)
(defrule
(goal timer-team-judge-triggered TRUE)
(goal g-team-tmp TEAM-1MEMBER)
=>
(set-goal g-team TEAM-1MEMBER)
(chat-local "一人组队")
)
(defrule
(goal timer-team-judge-triggered TRUE)
(goal g-team-tmp TEAM-2MEMBER)
=>
(set-goal g-team TEAM-2MEMBER)
(chat-local "两人组队")
)
(defrule
(goal timer-team-judge-triggered TRUE)
(goal g-team-tmp TEAM-3MEMBER)
=>
(set-goal g-team TEAM-3MEMBER)
(chat-local "三人组队")
)
(defrule
(goal timer-team-judge-triggered TRUE)
(goal g-team-tmp TEAM-4MEMBER)
=>
(set-goal g-team TEAM-4MEMBER)
(chat-local "四人组队")
)
(defrule
(goal timer-team-judge-triggered TRUE)
(goal g-team-tmp TEAM-5MEMBER)
=>
(set-goal g-team TEAM-5MEMBER)
(chat-local "五人或五人以上组队")
)
;一轮判断完毕后,重新启动定时器
(defrule
(goal timer-team-judge-triggered TRUE)
=>
(set-goal timer-team-judge-triggered FALSE)
(enable-timer TIMER-TEAM-JUDGE 60)
) 我认为对1-8家依次判断是唯一可行的办法。
反例是Kosmos中的代码:
(defrule
(players-tribute any-ally food < 2000)
(player-in-game every-ally)
(food-amount >= 3000)
=>
(tribute-to-player this-any-ally food 1000)
)
这段代码本意是实现资源共享的,
但是却有两个问题:
1 只有序号最小的同盟才会收到贡品
例如我创建了游戏,我是1p,序号最小,跟我结盟的kosmos老是进贡给我,而其他同盟则收不到
2 任何一家同盟退出都会造成该机制停摆
如果有一家退出,(player-in-game every-ally) 就成了false 收下仔细研究,谢了
收下仔细研究,谢了
页:
[1]