|
楼主 |
发表于 2015-9-6 08:14:37
|
显示全部楼层
本帖最后由 zt0616 于 2015-9-6 10:34 编辑
多谢多谢,原来那叫循环赛啊,涨姿势了,查了下wiki我还可以考虑双循环、瑞士制。就目前的单循环我按照你说的思路成功做出来啦。所有玩家都已经带上下标了,以后直接放到Schedule提供的场地里。下面秀秀成果
7个玩家时的场地分配(不随机)
9个玩家时的场地分配(随机round)
9个玩家时的场地分配(随机round和team)
下面附上触发器主要部分方便有需要的同学:
----全局变量
--------intCountPlayer = 0 <整数> //玩家总数,为活动玩家数加可能的落空AI,通过活动玩家数除以2取余判断是否加1个落空AI
--------intCountGroup = 0 <整数> //回合总数,为玩家总数减1
--------intRandomRound = 0 <整数[16]> //打乱回合顺序。同理小队也可以打乱顺序,原理和RandomRound一样,这里就不提了
--------intScheduleAllPlayAll = 0 <整数[16][16]> //赛程表,整个的目标
InitRandomRound //打乱回合顺序
----事件
----局部变量
--------intRoundCounter = 0 <整数>
--------boolRepeat = 假 <布尔>
--------intRandomRoundCounter = 0 <整数>
--------intRandom = 0 <整数[16]>
----条件
----动作
--------常规 -为从1到intCountRound的每个包含增量1的整数intRandomRoundCounter,执行(动作)
------------动作
----------------常规 -永久重复(动作)
--------------------动作
------------------------变量 -设置intRandom[intRandomRoundCounter] = (在1和intCountRound之间的随机整数)
------------------------变量 -设置boolRepeat = 假
------------------------常规 -为从1到intCountRound的每个包含增量1的整数intRoundCounter,执行(动作)
----------------------------动作
--------------------------------常规 -If (条件) then do (动作) else do (动作)
------------------------------------If
----------------------------------------intRandom[intRandomRoundCounter]==intRandomRound[intRoundCounter]
------------------------------------Then
----------------------------------------变量 -设置boolRepeat = 真
------------------------------------否则
------------------------常规 -If (条件) then do (动作) else do (动作)
----------------------------If
--------------------------------boolRepeat==假
----------------------------Then
--------------------------------变量 -设置intRandomRound[intRandomRoundCounter] = intRandom[intRandomRoundCounter]
--------------------------------常规 -Break
----------------------------否则
InitScheduleAllPlayAll //排赛程表
----事件
----局部变量
--------intRoundCounter = 0 <整数>
--------intPlayerCounter = 0 <整数>
--------intCycle = 0 <整数>
--------intOpponent = 0 <整数[16]>
--------intOpponentCounter = 0 <整数>
--------intGroupCounter = 0 <整数>
----条件
----动作
--------变量 -设置intCycle = 1
--------常规 -为从1到intCountRound的每个包含增量1的整数intRoundCounter,执行(动作)
------------动作
----------------常规 -为从1到(/(intCountPlayer,2))的每个包含增量1的整数intPlayerCounter,执行(动作)
--------------------动作
------------------------常规 -If (条件) then do (动作) else do (动作)
----------------------------If
--------------------------------intPlayerCounter==1
----------------------------Then
--------------------------------变量 -设置intOpponent[intPlayerCounter] = 1
----------------------------否则
--------------------------------数学 -从2到intCountPlayer循环intCycle
--------------------------------变量 -设置intOpponent[intPlayerCounter] = intCycle
----------------常规 -为从intCountPlayer到(+((/(intCountPlayer,2)),1))的每个包含增量-1的整数intPlayerCounter,执行(动作)
--------------------动作
------------------------数学 -从2到intCountPlayer循环intCycle
------------------------变量 -设置intOpponent[intPlayerCounter] = intCycle
----------------变量 -设置intGroupCounter = 0
----------------常规 -为从1到intCountPlayer的每个包含增量1的整数intPlayerCounter,执行(动作)
--------------------动作
------------------------常规 -If (条件) then do (动作) else do (动作)
----------------------------If
--------------------------------(intPlayerCounter mod 2)==1
----------------------------Then
--------------------------------变量 -修改intGroupCounter:+1
--------------------------------变量 -设置intScheduleAllPlayAll[intPlayerCounter][intRandomRound[intRoundCounter]] = intOpponent[intGroupCounter]
----------------------------否则
--------------------------------变量 -设置intScheduleAllPlayAll[intPlayerCounter][intRandomRound[intRoundCounter]] = intOpponent[(+(intGroupCounter,(/(intCountPlayer,2))))]
----------------变量 -修改intCycle:-1
|
|