设为首页 收藏本站
查看: 859|回复: 0

[经验分享] 博客园仿真足球竞赛平台Python版SDK

[复制链接]

尚未签到

发表于 2015-4-24 08:48:48 | 显示全部楼层 |阅读模式
  为了方便喜欢Python的同学能使用Python开发自己的球队,所以编写了此SDK。这个SDK基本上是参照C#版SDK改过来的,除了一些复杂的几何算法没有实现外,其他功能都已实现。喜欢的朋友可以自己下了慢慢改善,我也会不断更新这个SDK。下面介绍一下基本的使用吧。
一、导入soccer模块
  不需要过多的import导入语句,轻轻松松,简简单单,只需要一句导入语句:


from soccer import *  
二、模块介绍
  1. 导入soccer后,我们可以使用如下的一些实例对象:


field_settings            #球场设置信息
game_settings          #比赛设置信息
rule_settings            #规则设置信息
server_settings         #服务器设置信息
communicator         #通信对象  
  2. 类对象如下:

Vector2f                   #二维坐标
GameState               #比赛状态(比分信息)
ClientInfo                 #球队信息(球队名,作者)  
  命令相关的对象及常量如下:

Command                #命令
CommandType_Catch = 'Catch'         #扑球
CommandType_Dash = 'Dash'           #跑
CommandType_Turn = 'Turn'            #转身
CommandType_Stay ='Stay'              #原地不动
CommandType_Kick = 'Kick'            #踢球
CommandType_Unknow = 'Unknow'        #未知命令  
  所有实现了的类和C#版SDK基本一致,比如Vector2f的操作符重载等。上面列的是主要的一些类和对象,除此之外还包括比如一些角度计算的模块(anglehelper),矩形对象(rectangle) 等。

三、创建球队实例
  创建方法和C#版本基本一样,下面的代码应该不需要过多解释:


if __name__ == "__main__":
    """
    entry point of the great team!
    """
    myteam = TeamNancy('NancyTeam', 'CoderZh')
    if communicator.connect(myteam.info):
        print 'Platform Connected!!!'
        while True:
            """
            Start the game cycle
            """
            wmdata = communicator.getworldmodel()       #get the infomation from the server
           
            if (wmdata == None):
                print 'Game Over!'
                exit()
            #get the infomation of the game to my team
            myteam.getworldmodel(wmdata)
           
            #my team think for a while and send the commands to the server
            communicator.send_commands(myteam.think())
    else:
        print 'Connect Fail!!!'  
  再来看看如何创建自己的AI球队的类:


class TeamNancy(object):
    def __init__(self, teamname, author):
        self.info = ClientInfo(teamname, author)
        self.wm = WorldModel()
        self.cmds = [Command() for i in range(5)]
    def getworldmodel(self, wmdata):
        self.wm = wmdata
    def think(self):
        for i in range(rule_settings.AgentNum):
            temppos = self.wm.ball.pos - self.wm.MyAgents.pos
            if temppos.getlength() < rule_settings.MaxKickBallDistance:
                self.cmds.type = CommandType_Kick
                self.cmds.param1 = 1.0
                self.cmds.param2 = 0
            elif math.fabs(temppos.getdirection() - self.wm.MyAgents.dir) < 2:
                self.cmds.type = CommandType_Dash
                self.cmds.param1 = rule_settings.MaxDashVel
            else:
                self.cmds.type = CommandType_Turn
                self.cmds.param1 = temppos.getdirection()
        return self.cmds;  
四、下载SDK
  http://files.iyunv.com/coderzh/SoccerSDK.rar
五、感谢
  感谢 逖靖寒 同学给我们带来了那么好玩的游戏,丰富了我们的生活,带来了很多乐趣。同时希望此Python版SDK能给同学们带来一些帮助,也希望同学们提出宝贵意见,不断的完善这个SDK。谢谢!!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-60146-1-1.html 上篇帖子: python小专题——urllib2模块 下篇帖子: 如何用python搞定验证码中的噪点
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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