Robocode的线程与执行次序

<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

  Robocode的每个机器人都是一个线程线程调度为非强占式,由战斗管理线程依次调度运行。每个线程执行到一个阻塞函数的时候,交出cpu占用权。对于AdvancedRobot,阻塞函数是excute()。

  从这个角度而言,可以把Robocode看作是回合制的游戏,每个回合各个robot设定要做些什么操作,即调用setXXX(),调用excute()完成本回合的操作设定。各个robot都设定完后,战斗模拟模块模拟执行各个robot的动作,并且在屏幕显示结果。下个回合,robot线程在excute()下面继续执行,直到再次调用excute()为止。

  不过,setXXX()设定的操作,往往是在一个回合中执行不完的。在Robocode中,一个回合是游戏中的一个时间单位,各个元素的运动都有一定的速度,需要一定单位的时间才能完成。如果上回合中设置的动作还没有完成,本回合又重新设定了,就会把新动作覆盖旧动作。

  事件处理函数onXXX(),看起来是在事件发生的时候立即执行的,其实不然,还是要在回合中轮到这个robot的时候才能执行。而且若在队列中有多个事件,而某个事件处理函数调用了excute()结束了本回合的动作,那么剩下的事件就要等到下个回合才能处理了。因此,onXXX()改变的只是某个线程内部的执行次序,并不改变robot线程之间的执行次序

<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
阅读更多
文章标签: 游戏
个人分类: java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭