相关动态
AI迷宫寻宝Python编程
2024-12-31 12:07

import api

import math

# 判断玩家是否需要离场

def ShouldLeave():

  context = api.get_context()

  # 玩家和终点信息

  me, exit = context.me, context.exit

  # 计算到终点距离

  distance = len(api.check.path(me, exit))

  # 判断是否需要离场

  ret = (me.energy <= distance + 1)

  return ret

# 缓存计算数据,每回合一次

def cache():

  context = api.get_context()

  round = context.round

  # 获取玩家的宝石收集情况

  data = context.me.item_count.items()

  # 忽略宝箱, 只统计宝石信息

  data = {k:v for k, v in data if k != 'box'}

  # 得到收集数量最少的宝石

  least = min(data.values())

  # 得到成套宝石中, 还缺少的宝石名称

  ret = [k for k, v in data.items() if v == least]

  context.set('cc', ret)

  print(f'第{round}回合, 待收集的宝石: {ret}')

  # 获取回合数

  record = context.get('record')

  if not record:

    record = dict({0: {}, 1: {}})

  enemy = context.players.get(1)

  if enemy:

    record[round % 2]['enemy'] = enemy

  me = context.me

  record[round % 2]['me'] = me

  context.set('record', record)

# 计算坐标附近的宝石数量

def GetNearCount(row, col):

  items = api.get.items()

  count = 0

  for item in items:

    if abs(item.row - row) <3:

      if abs(item.col - col) <3:

        start = (row, col)

        l = len(api.check.path(start, item, player_id=-1))

        if l < 3:

          count +=1

  return count

# 估算物品的价值

def EstimateItemValue(item):

  context = api.get_context()

  me = context.me

  formula = 1 # 计算公式数值

  # 计算物品附近的宝石, 优先前往资源丰富的区域

  nearCnt = GetNearCount(item.row, item.col)

  if nearCnt > 1:

    print(f'X {nearCnt} {item}')

    formula *= nearCnt

  # 计算玩家到物品距离

  self_distance = len(api.check.path(me, item))

  # 获取待收集的宝石

  allOne = context.get('cc')

  alloneCnt = len(allOne)

  # 如果是待收集的宝石

  isBelongToAllOne = item.name in allOne

  if isBelongToAllOne:

    formula *= (5 / allOneCnt)

  # 如果有敌人

  enemy = context.players.get(1)

  if enemy:

    enemy_score = enemy.score

    enemy_distance = len(api.check.path(enemy, item,player_id=enemy.id))

    # 获取敌人的上一回合信息

    record = context.get('record')

    prev_enemy = record[(context.round + 1) %2].get('enemy')

    # 如果敌人离宝石更近

    if enemy_distance < self_distance:

      formula *= 0.5

      if prev_enemy:

        prev_enemy_distance = len(api.check.path(prev_enemy, item,player_id=enemy.id))

        # 如果敌人正在远离宝石

        if prev_enemy_distance < enemy_distance:

          formula *= 2

        # 否则敌人正在靠近宝石

        else:

          formula *= 1

    elif enemy_distance == self_distance:

      formula *= 2 if me.order < enemy.order else 0.5

    else: # 如果敌人离宝石更远

      if prev_enemy:

        prev_enemy_distance = len(api.check.path(prev_enemy, item))

        # 如果敌人正在远离宝石

        if prev_enemy_distance < enemy_distance:

          formula *= 1

        # 否则敌人正在靠近宝石

        else:

          formula *= 2

  # 如果物品是宝箱

  isBelongToBox = item.name == 'box'

  if isBelongToBox:

    formula *= 3

  # 距离短就优先考虑, 距离过长就主动放弃

  formula *= 16 / (math.pow(self_distance, 2))

  return formula

# 寻找最有价值的物品

def findBestValueItem():

  items = api.get.items()

  estimate = lambda item: (EstimateItemValue(item), item)

  bestInfo = max([estimate(item) for item in items],key=lambda t: t[0])

  bestValue, bestItem = bestInfo

  print(f'最有价值物品: [Value = {bestValue:.2f}][Item = {bestItem}]')

  return bestItem

def update(context):

  cache()

  if ShouldLeave():

    exit = context.exit

    print(f'前往出口 {exit}')

    direction = api.check.next(exit)

  else:

    item = findBestValueItem()

    print(f'前往物品 {item}')

    direction = api.check.next(item)

  return direction

    以上就是本篇文章【AI迷宫寻宝Python编程】的全部内容了,欢迎阅览 ! 文章地址:http://ww.kub2b.com/news/16778.html
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 企库往资讯移动站 http://ww.kub2b.com/mobile/ , 查看更多   
最新文章
智能家居“伪智能”、直播间买到的羽绒服穿不了……江苏一季度消费投诉热点出炉
4月9日,江苏省消费者权益保护委员会发布2025年一季度消费投诉及舆情热点报告。一季度全省消保委系统受理投诉51464件,接待消费
智能手机传感器及作用大盘点手机的作用「智能手机传感器及作用大盘点」
已经成为不可思议的小机器,几十年前,这样的设备只存在于科幻小说。如果回到几十年前,人们可能会认为是魔法。现在已经成为最普
您知道唐僧师徒在南通长牌中分别是谁吗?
《西游记》中,猪八戒与孙悟空对峙打斗时,曾经这样说“放生遭贬出天关,福陵山下图家业。我因有罪错投胎,俗名唤做猪刚鬣”,这
【华为】新版模拟器eNSP Lite安装攻略提前解锁华为手机模拟器「【华为】新版模拟器eNSP Lite安装攻略提前解锁」
新版模拟器eNSP Lite资源下载:华为新版模拟器eNSPLite镜像资源资源-CSDN文库    最近华为发布了新版模拟器eNSP Lite
Android监控虚拟键 android手机虚拟摄像头手机IM「Android监控虚拟键 android手机虚拟摄像头」
在工作中,camera这一块上,可能会有各种各样的需求。比如有人想新增一个虚拟摄像头,当用户app打开摄像头设备时,打开的不是系
微信语音怎么提取到电脑【苹果安卓手机】苹果手机备份到电脑「微信语音怎么提取到电脑【苹果安卓手机】」
微信语音中可能保存着一些温馨记忆,如年迈父母发给自己的语音消息,微信语音中也可能保存着知识技能,如培训老师发给自己的各种
修成正果!安东尼已被通知入选2025年奈史密斯篮球名人堂
北京时间4月3日讯 据Shams Charania报道,十次入选NBA全明星的卡梅隆·安东尼已获通知,他被选入2025年奈史密斯篮球名人堂。曾六
在任意手机上使用带有图形化界面(GUI)的完整Linuxlinux手机「在任意手机上使用带有图形化界面(GUI)的完整Linux」
不过,在我们今天的任务中只有运行者两者。这篇教程不会讲述任何运行后的自定义使用。不同于之前的两次尝试——安装Window
腾讯史上最大就业计划技术岗超六成,大厂加码AI人才校招
4月17日,腾讯宣布启动史上最大就业计划,三年内将新增28000个实习岗位并加大转化录用,仅2025年将迎来10000名校招实习生。在大
纪律处罚消息两则:海港主教练穆斯卡特停赛1场罚款1万 & 广东男篮外援莫兰德罚款3万
各CBA俱乐部、赛区:2025年4月8日,2024-2025赛季CBA联赛季后赛12进8阶段场序467,上海久事大鲨鱼俱乐部久事篮球队与广东宏远华