吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3036|回复: 23
收起左侧

[Python 原创] 植物大战僵尸杂交版每行伤害简单计算器

  [复制链接]
吾爱茶道赛高 发表于 2024-5-23 10:31
简单的计算器,可以用于测试每行的最高伤害和持续时间,经过实测发现基本和实际情况符合。使用巨人冰车僵尸×2作为检验对象,生存时间为50秒,与程序计算相似,增加了伤害总和,结果是汉堡王的伤害是最高的(理所应当),后续可以通过动态规划方法来让计算机自动形成最佳的布局。以后准备学习一下强化学习的算法。
[Python] 纯文本查看 复制代码
import random
class Plant:
    def __init__(self, name, direct_damage, penetration_damage, attack_frequency):
        self.name = name
        self.direct_damage = direct_damage
        self.penetration_damage = penetration_damage
        self.attack_frequency = attack_frequency
        self.last_attack_time = 0  # 上次攻击的时间
        self.cumulative_damage = 0  # 初始化累计伤害为0

    def can_attack(self, time):
        # 检查植物是否到了攻击时间
        return (time - self.last_attack_time) >= self.attack_frequency


    def attack(self, zombies, time):
        # 植物攻击僵尸
        attacked_zombies = []  # 用于存储被攻击的僵尸
        if zombies and zombies[0].is_alive():  # 确保有僵尸并且最前面的僵尸还活着
            front_zombie = zombies[0]
            front_zombie.health -= self.direct_damage
            self.cumulative_damage += self.direct_damage  # 更新累计伤害
            print(f"At time {time} second, {self.name} attacks and reduces the front zombie health to {front_zombie.health}. Cumulative damage: {self.cumulative_damage}")
            # 如果有穿透伤害并且最前面的僵尸还活着,对所有僵尸造成伤害
            if self.penetration_damage > 0:
                total_penetration_damage = 0  # 初始化穿透伤害总和
                for zombie in zombies:
                    if zombie.is_alive():
                        zombie.health -= self.penetration_damage
                        total_penetration_damage += self.penetration_damage
                        self.cumulative_damage += total_penetration_damage  # 更新累计伤害
                        print(
                            f" - Additional penetration damage of {total_penetration_damage} to all zombies. New cumulative damage: {self.cumulative_damage}")
        print(f"{self.name} attacks at time {time}:")
        for zombie in attacked_zombies:
            print(f" - {zombie.__class__.__name__} health: {zombie.health}")
        self.last_attack_time = time  # 使用传入的 time 参数重置攻击时间
class Zombie:
    def __init__(self, health):
        self.health = health

    def is_alive(self):
        return self.health > 0

    def die(self, zombies):
        # 僵尸死亡时从列表中移除自己
        if not self.is_alive():
            zombies.remove(self)

def simulate_battle(plants, zombies):
    time = 0
    while zombies:  # 只要还有僵尸,就继续战斗
        time += 1
        for plant in plants:
            if plant.can_attack(time):
                plant.attack(zombies, time)  # 传递当前时间给 attack 方法
                # 攻击后检查是否有僵尸死亡,并从列表中移除
                for zombie in list(zombies):  # 使用列表的副本来避免在迭代时修改列表
                    if not zombie.is_alive():
                        zombie.die(zombies)
                        break  # 移除一个僵尸后跳出循环,避免索引错误
        print(f"Time step: {time}")
        print("Zombie healths:", [zombie.health for zombie in zombies if zombie.is_alive()])

    print(f"\nAll zombies have been defeated after {time} time steps.")


# 初始化植物
hamburger = Plant(name="hamburger", direct_damage=random.randint(160, 640), penetration_damage=0, attack_frequency=2.5)
watermelon = Plant(name="watermelon", direct_damage=80, penetration_damage=20, attack_frequency=1.5)
pea = Plant(name="pea", direct_damage=240, penetration_damage=0, attack_frequency=2)
cactus = Plant(name="cactus", direct_damage=0, penetration_damage=120, attack_frequency=2.5)

# 初始化僵尸
zombies = [Zombie(health=10000) for _ in range(2)]

# 模拟战斗
simulate_battle([hamburger, watermelon, pea, cactus], zombies)

微信图片_20240523102612(2).png
fb3b2d99a2a6b0ccb6ec44d6f2d7cf5.png

免费评分

参与人数 5吾爱币 +11 热心值 +5 收起 理由
luozi1653 + 1 + 1 我很赞同!
sunshine963 + 1 + 1 谢谢@Thanks!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
马国良 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
blindcat + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lg560852 发表于 2024-5-23 11:00
但是这个不也得看实际来的攻方吗?
blindcat 发表于 2024-5-23 12:19
324134 发表于 2024-5-23 12:32
头像被屏蔽
abc135246 发表于 2024-5-23 12:37
提示: 作者被禁止或删除 内容自动屏蔽
yizhiyuanmo007 发表于 2024-5-23 13:33
这个,很有意思
eternal2019 发表于 2024-5-23 14:42
感谢分享 好用!
chaozhi 发表于 2024-5-24 09:29
初学python, 不明觉厉,感谢分享
towana 发表于 2024-5-24 10:18
这个要怎么使用?感谢分享。
转瞬之间 发表于 2024-5-24 11:43
感谢辛苦分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 09:16

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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