from AI.base import *
class TeamAI( BaseAI ):
def __init__( self , helper ):
self.effect = EF_NONE
self.skill = {
HIDE:0,
DEMENTOR:0,
STUNALL:0,
SPECIAL:0,
}
self.helper = helper
# def dist( self ):
# helper = self.helper
# EnyId
# return (helper.getMyPos()[0] - )
def steal( self , limitN ):
limitN = 70
enyId = helper.getNearPlayer()
for i in range(0,3):
if enyId[i] == None:
continue
else:
enyPos = helper.getPlayerPos(enyId[i])
myPos = helper.getMyPos()
disa = (myPos[0]-enyPos[0])**2
disb = (myPos[1]-enyPos[1])**2
if (disa+disb) < limitN**2 and helper.checkPlayerHold(enyId[i]) == 1 and helper.getPlayerMode(enyId[i]) != 0:
return helper.getPlayerPos(enyId[i])
else:
break
def decide( self ):
helper = self.helper
# 沒持球
if not helper.checkMeHold():
# 改成防禦模式
if helper.getMyMode() == 0 and helper.checkMeModeChange():
return AI_MODECHANGE
# 預截取(min)
limitN = 70
enyId = helper.getNearPlayer()
for i in range(0,3):
if enyId[i] == None:
continue
else:
enyPos = helper.getPlayerPos(enyId[i])
myPos = helper.getMyPos()
disa = (myPos[0]-enyPos[0])**2
disb = (myPos[1]-enyPos[1])**2
if (disa+disb) < limitN**2 and helper.checkPlayerHold(enyId[i]) == 1 and helper.getPlayerMode(enyId[i]) != 0:
return helper.getPlayerPos(enyId[i])
else:
break
# 追球
mapMidPos = (370,370)
fbpos = helper.getFreeBallPos()
if bool(fbpos):
return helper.getCaptureDir(fbpos[0])
# 回到場中間
elif helper.getMyPos() != mapMidPos:
return helper.getCaptureDir(mapMidPos)
# 持球
else:
# 改成攻擊模式
if helper.getMyMode() == 1 and helper.checkMeModeChange():
return AI_MODECHANGE
# 判斷最近的球門
goalPos = helper.getNearGoal(helper.getMyPos())
if goalPos[0] == helper.getMyIndex():
shotgoal = goalPos[1]
else:
shotgoal = goalPos[0]
# 判斷丟哪方向會進
for i in range(1,9):
if helper.checkScoring(shotgoal, i):
# 會進方向 == 目前方向
if helper.getMyDir() == i:
return AI_THROWBALL
# !會進方向 -> 轉方向
else:
return i
# 目前方向都不會進
NearGoalDir = helper.getScoringDir(shotgoal)
return NearGoalDir
ZnJvbSBBSS5iYXNlIGltcG9ydCAqIApjbGFzcyBUZWFtQUkoIEJhc2VBSSApOgogICAgZGVmIF9faW5pdF9fKCBzZWxmICwgaGVscGVyICk6CiAgICAgICAgc2VsZi5lZmZlY3QgPSBFRl9OT05FCiAgICAgICAgc2VsZi5za2lsbCA9IHsKICAgICAgICAgICAgSElERTowLAogICAgICAgICAgICBERU1FTlRPUjowLAogICAgICAgICAgICBTVFVOQUxMOjAsCiAgICAgICAgICAgIFNQRUNJQUw6MCwKICAgICAgICB9CiAgICAgICAgc2VsZi5oZWxwZXIgPSBoZWxwZXIKIwlkZWYgZGlzdCggc2VsZiApOgojCQloZWxwZXIgPSBzZWxmLmhlbHBlcgojCQlFbnlJZAojCQlyZXR1cm4gKGhlbHBlci5nZXRNeVBvcygpWzBdIC0gKQoJCiAgICBkZWYgc3RlYWwoIHNlbGYgLCBsaW1pdE4gKToKICAgICAgICBsaW1pdE4gPSA3MAogICAgICAgIGVueUlkID0gaGVscGVyLmdldE5lYXJQbGF5ZXIoKQogICAgICAgIGZvciBpIGluIHJhbmdlKDAsMyk6CiAgICAgICAgICAgIGlmIGVueUlkW2ldID09IE5vbmU6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZW55UG9zID0gaGVscGVyLmdldFBsYXllclBvcyhlbnlJZFtpXSkKICAgICAgICAgICAgICAgIG15UG9zID0gaGVscGVyLmdldE15UG9zKCkJCQkJCiAgICAgICAgICAgICAgICBkaXNhID0gKG15UG9zWzBdLWVueVBvc1swXSkqKjIKICAgICAgICAgICAgICAgIGRpc2IgPSAobXlQb3NbMV0tZW55UG9zWzFdKSoqMgogICAgICAgICAgICAgICAgaWYgKGRpc2ErZGlzYikgPCBsaW1pdE4qKjIgYW5kIGhlbHBlci5jaGVja1BsYXllckhvbGQoZW55SWRbaV0pID09IDEgYW5kIGhlbHBlci5nZXRQbGF5ZXJNb2RlKGVueUlkW2ldKSAhPSAwOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuZ2V0UGxheWVyUG9zKGVueUlkW2ldKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBicmVhawoKICAgIGRlZiBkZWNpZGUoIHNlbGYgKToKICAgICAgICBoZWxwZXIgPSBzZWxmLmhlbHBlcgogICAgICAgICMg5rKS5oyB55CDCiAgICAgICAgaWYgbm90IGhlbHBlci5jaGVja01lSG9sZCgpOgogICAgICAgICAgICAjIOaUueaIkOmYsuempuaooeW8jwogICAgICAgICAgICBpZiBoZWxwZXIuZ2V0TXlNb2RlKCkgPT0gMCBhbmQgaGVscGVyLmNoZWNrTWVNb2RlQ2hhbmdlKCk6CiAgICAgICAgICAgICAgICByZXR1cm4gQUlfTU9ERUNIQU5HRQogICAgICAgICAgICAjIOmgkOaIquWPlihtaW4pCiAgICAgICAgICAgIGxpbWl0TiA9IDcwCiAgICAgICAgICAgIGVueUlkID0gaGVscGVyLmdldE5lYXJQbGF5ZXIoKQogICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLDMpOgogICAgICAgICAgICAgICAgaWYgZW55SWRbaV0gPT0gTm9uZToKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBlbnlQb3MgPSBoZWxwZXIuZ2V0UGxheWVyUG9zKGVueUlkW2ldKQogICAgICAgICAgICAgICAgICAgIG15UG9zID0gaGVscGVyLmdldE15UG9zKCkJCQkJCiAgICAgICAgICAgICAgICAgICAgZGlzYSA9IChteVBvc1swXS1lbnlQb3NbMF0pKioyCiAgICAgICAgICAgICAgICAgICAgZGlzYiA9IChteVBvc1sxXS1lbnlQb3NbMV0pKioyCiAgICAgICAgICAgICAgICAgICAgaWYgKGRpc2ErZGlzYikgPCBsaW1pdE4qKjIgYW5kIGhlbHBlci5jaGVja1BsYXllckhvbGQoZW55SWRbaV0pID09IDEgYW5kIGhlbHBlci5nZXRQbGF5ZXJNb2RlKGVueUlkW2ldKSAhPSAwOgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVyLmdldFBsYXllclBvcyhlbnlJZFtpXSkKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAjIOi/veeQgwogICAgICAgICAgICBtYXBNaWRQb3MgPSAoMzcwLDM3MCkKICAgICAgICAgICAgZmJwb3MgPSBoZWxwZXIuZ2V0RnJlZUJhbGxQb3MoKQkJCQogICAgICAgICAgICBpZiBib29sKGZicG9zKToKICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuZ2V0Q2FwdHVyZURpcihmYnBvc1swXSkKICAgICAgICAgICAgIyDlm57liLDloLTkuK3plpMKICAgICAgICAgICAgZWxpZiBoZWxwZXIuZ2V0TXlQb3MoKSAhPSBtYXBNaWRQb3M6CiAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVyLmdldENhcHR1cmVEaXIobWFwTWlkUG9zKQogICAgICAgICMg5oyB55CDCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyDmlLnmiJDmlLvmk4rmqKHlvI8KICAgICAgICAgICAgaWYgaGVscGVyLmdldE15TW9kZSgpID09IDEgYW5kIGhlbHBlci5jaGVja01lTW9kZUNoYW5nZSgpOgogICAgICAgICAgICAgICAgcmV0dXJuIEFJX01PREVDSEFOR0UKCiAgICAgICAgICAgICMg5Yik5pa35pyA6L+R55qE55CD6ZaACiAgICAgICAgICAgIGdvYWxQb3MgPSBoZWxwZXIuZ2V0TmVhckdvYWwoaGVscGVyLmdldE15UG9zKCkpCiAgICAgICAgICAgIGlmIGdvYWxQb3NbMF0gPT0gaGVscGVyLmdldE15SW5kZXgoKToKICAgICAgICAgICAgICAgIHNob3Rnb2FsID0gZ29hbFBvc1sxXQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgc2hvdGdvYWwgPSBnb2FsUG9zWzBdCiAgICAgICAgICAgICMg5Yik5pa35Lif5ZOq5pa55ZCR5pyD6YCyCiAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsOSk6CiAgICAgICAgICAgICAgICBpZiBoZWxwZXIuY2hlY2tTY29yaW5nKHNob3Rnb2FsLCBpKToKICAgICAgICAgICAgICAgICAgICAjIOacg+mAsuaWueWQkSA9PSDnm67liY3mlrnlkJEKICAgICAgICAgICAgICAgICAgICBpZiBoZWxwZXIuZ2V0TXlEaXIoKSA9PSBpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFJX1RIUk9XQkFMTAoJCQkJCSMgIeacg+mAsuaWueWQkSAtPiDovYnmlrnlkJEKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaQogICAgICAgICAgICAjIOebruWJjeaWueWQkemDveS4jeacg+mAsgogICAgICAgICAgICBOZWFyR29hbERpciA9IGhlbHBlci5nZXRTY29yaW5nRGlyKHNob3Rnb2FsKQogICAgICAgICAgICByZXR1cm4gTmVhckdvYWxEaXIKIA==