import api
import operator
def update(context):
m_col = context.me.col
m_row = context.me.row
# 拿到对手的企鹅 row 信息
enemy_col = api.get.enemy(what="score")
# 打印出我的企鹅所在的行
print(enemy_col)
target=target_choice(context)
color=target[0]
path=target[1]
print(color,path)
#调用最有价值宝石函数,并获取最有价值路径
path = Best_Value(context,target)
m_energy = context.me.energy
exit_path=api.check.path(start=(m_row,m_col),end=(context.exit.row,context.exit.col))
exit_distance=len(exit_path)-1
#print("当前体力:"+str(m_energy)+"目标距离:"+str(exit_distance))
#计算体力
if m_energy <= exit_distance+1:
path=exit_path
print("****************************正在进行的坐标为********************",path[1][0],path[1][1])
t_row=path[1][0]
t_col=path[1][1]
if t_col - m_col > 0:
return "R"
elif t_col - m_col < 0:
return "L"
if t_row - m_row > 0:
return "D"
elif t_row - m_row < 0:
return "U"
def target_choice(context):
m_col = context.me.col
m_row = context.me.row
min_distance = 99
color = ["red_gem", "blue_gem","purple_gem","pink_gem","yellow_gem","box"]
# 遍历场上所有宝石到企鹅的距离,将target_gem设置为距离更小的宝石名称
for i in range(0, 6):
path=api.check.path(start=(m_row,m_col),end=(context.items[color[i]][0].row,context.items[color[i]][0].col))
distance = len(path)
if distance < min_distance:
min_distance = distance
target_gem = color[i]
target_path = path
return target_gem,target_path
#计算最有价值路径(环境变量,目标变量)
def Best_Value(context,target_old):
BV_color=target_old[0]#存放目标宝石颜色
BVpath=target_old[1]#存放目标宝石路径
#获取当前最少宝石的距离
if(BV_color != "box"):
#print("查找最有价值路径")
dict = context.me.item_count
#dict.pop('box')
a = sorted(dict.items(), key=operator.itemgetter(1))
#a1 = sorted(dict.items(), key=operator.itemgetter(0))
print(a)
#print(a1)
if a[0][0]=='box':
if(a[1][1]<a[2][1] and a[1][0] !=BV_color):
print("识别到数量最少宝石",a[1][0],"一共有",a[1][1])
#计算最少宝石的距离
min_gem = api.check.path(start=(context.me.row,context.me.col),end=(context.items[a[1][0]][0].row,context.items[a[1][0]][0].col))
#print("最少宝石的距离为",len(min_gem))
max_b = 6/len(min_gem)
max_path=1/len(BVpath)
print("最少宝石的价值性为",max_b,"目标价值为",max_path)
if(max_path<max_b and len(BVpath)>5):#最少宝石价值高于目标宝石,且目标宝石在距离超过5步
BVpath = min_gem
print("!!!——————目标比最少宝石的价值低,寻找最少宝石",BVpath)
else:
if(a[0][1]<a[1][1] and a[0][0] !=BV_color):
print("识别到数量最少宝石",a[0][0],"一共有",a[0][1])
#计算最少宝石的距离
min_gem = api.check.path(start=(context.me.row,context.me.col),end=(context.items[a[0][0]][0].row,context.items[a[0][0]][0].col))
#print("最少宝石的距离为",len(min_gem))
max_b = 6/len(min_gem)
max_path=1/len(BVpath)
print("最少宝石的价值性为",max_b,"目标价值为",max_path)
if(max_path<max_b and len(BVpath)>5):#最少宝石价值高于目标宝石,且目标宝石在距离超过5步
BVpath = min_gem
print("!!!——————目标比最少宝石的价值低,寻找最少宝石",BVpath)
return BVpath
#利用阻挡,将对方企鹅封锁在row<5范围内
if context.players[1].row <5 :
block_direction = api.check.next(end=(5, context.players[1].col))
else:
block_direction = api.check.next(end=(context.players[1].row + 1, context.players[1].col))
return block_direction