add log
This commit is contained in:
@@ -2,6 +2,9 @@ from __future__ import annotations
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from src.classes.essence import Essence, EssenceType
|
||||
from src.classes.root import Root, corres_essence_type
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from src.classes.avatar import Avatar
|
||||
from src.classes.world import World
|
||||
@@ -58,4 +61,26 @@ class Move(DefineAction):
|
||||
self.avatar.tile = target_tile
|
||||
else:
|
||||
# 超出边界:不改变位置与tile
|
||||
pass
|
||||
pass
|
||||
|
||||
class Cultivate(DefineAction):
|
||||
"""
|
||||
修炼动作,可以增加修仙进度。
|
||||
"""
|
||||
def execute(self, root: Root, essence: Essence):
|
||||
"""
|
||||
修炼
|
||||
获得的exp增加取决于essence的对应灵根的大小。
|
||||
"""
|
||||
essence_type = corres_essence_type[root]
|
||||
essence_density = essence.get_density(essence_type)
|
||||
exp = self.get_exp(essence_density)
|
||||
self.avatar.cultivation_progress.add_exp(exp)
|
||||
|
||||
def get_exp(self, essence_density: int) -> int:
|
||||
"""
|
||||
根据essence的密度,计算获得的exp。
|
||||
公式为:base * essence_density
|
||||
"""
|
||||
base = 100
|
||||
return base * essence_density
|
||||
65
src/classes/age.py
Normal file
65
src/classes/age.py
Normal file
@@ -0,0 +1,65 @@
|
||||
import random
|
||||
from src.classes.cultivation import Realm
|
||||
|
||||
class Age:
|
||||
"""
|
||||
角色寿命管理
|
||||
基于境界计算期望寿命,超过期望寿命后有概率老死
|
||||
"""
|
||||
|
||||
# 各境界的基础期望寿命(年)
|
||||
# REALM_LIFESPAN = {
|
||||
# Realm.Qi_Refinement: 100, # 练气期:100年
|
||||
# Realm.Foundation_Establishment: 200, # 筑基期:200年
|
||||
# Realm.Core_Formation: 500, # 金丹期:500年
|
||||
# Realm.Nascent_Soul: 1000, # 元婴期:1000年
|
||||
# }
|
||||
REALM_LIFESPAN = {
|
||||
Realm.Qi_Refinement: 50, # 练气期:100年
|
||||
Realm.Foundation_Establishment: 60, # 筑基期:200年
|
||||
Realm.Core_Formation: 70, # 金丹期:500年
|
||||
Realm.Nascent_Soul: 80, # 元婴期:1000年
|
||||
}
|
||||
|
||||
def __init__(self, age: int):
|
||||
self.age = age
|
||||
|
||||
def get_age(self) -> int:
|
||||
"""获取当前年龄"""
|
||||
return self.age
|
||||
|
||||
def get_expected_lifespan(self, realm: Realm) -> int:
|
||||
"""获取期望寿命"""
|
||||
return self.REALM_LIFESPAN.get(realm, 100)
|
||||
|
||||
def get_death_probability(self, realm: Realm) -> float:
|
||||
"""
|
||||
计算当月老死的概率
|
||||
|
||||
返回:
|
||||
老死概率,范围0.0-0.1
|
||||
"""
|
||||
if self.age < self.get_expected_lifespan(realm):
|
||||
return 0.0
|
||||
|
||||
# 超过期望寿命的年数
|
||||
years_over_lifespan = self.age - self.get_expected_lifespan(realm)
|
||||
|
||||
# 基础概率:每超过1年增加0.01的概率
|
||||
death_probability = min(years_over_lifespan * 0.01, 0.1)
|
||||
|
||||
return death_probability
|
||||
|
||||
def death_by_old_age(self, realm: Realm) -> bool:
|
||||
"""
|
||||
判断是否老死
|
||||
"""
|
||||
return random.random() < self.get_death_probability(realm)
|
||||
|
||||
def __str__(self) -> str:
|
||||
"""返回年龄的字符串表示"""
|
||||
return str(self.age)
|
||||
|
||||
def __repr__(self) -> str:
|
||||
"""返回年龄的详细字符串表示"""
|
||||
return f"Age({self.age})"
|
||||
@@ -7,8 +7,9 @@ from src.classes.calendar import Month, Year
|
||||
from src.classes.action import Action
|
||||
from src.classes.world import World
|
||||
from src.classes.tile import Tile
|
||||
from src.classes.cultivation import CultivationProgress
|
||||
from src.classes.cultivation import CultivationProgress, Realm
|
||||
from src.classes.root import Root
|
||||
from src.classes.age import Age
|
||||
from src.utils.strings import to_snake_case
|
||||
|
||||
class Gender(Enum):
|
||||
@@ -34,7 +35,7 @@ class Avatar:
|
||||
id: int
|
||||
birth_month: Month
|
||||
birth_year: Year
|
||||
age: int
|
||||
age: Age
|
||||
gender: Gender
|
||||
cultivation_progress: CultivationProgress = field(default_factory=lambda: CultivationProgress(0))
|
||||
pos_x: int = 0
|
||||
@@ -74,4 +75,43 @@ class Avatar:
|
||||
决定做什么。
|
||||
"""
|
||||
# 目前只做一个事情,就是随机移动。
|
||||
return "Move", {"delta_x": random.randint(-1, 1), "delta_y": random.randint(-1, 1)}
|
||||
return "Move", {"delta_x": random.randint(-1, 1), "delta_y": random.randint(-1, 1)}
|
||||
|
||||
def update_cultivation(self, new_level: int):
|
||||
"""
|
||||
更新修仙进度,并在境界提升时更新寿命
|
||||
"""
|
||||
old_realm = self.cultivation_progress.realm
|
||||
self.cultivation_progress.level = new_level
|
||||
self.cultivation_progress.realm = self.cultivation_progress.get_realm(new_level)
|
||||
|
||||
# 如果境界提升了,更新寿命期望
|
||||
if self.cultivation_progress.realm != old_realm:
|
||||
self.age.update_realm(self.cultivation_progress.realm)
|
||||
|
||||
def death_by_old_age(self) -> bool:
|
||||
"""
|
||||
检查是否老死
|
||||
|
||||
返回:
|
||||
如果老死返回True,否则返回False
|
||||
"""
|
||||
return self.age.death_by_old_age(self.cultivation_progress.realm)
|
||||
|
||||
def get_age_info(self) -> dict:
|
||||
"""
|
||||
获取年龄相关信息
|
||||
|
||||
返回:
|
||||
包含年龄、期望寿命、死亡概率等信息的字典
|
||||
"""
|
||||
current_age, expected_lifespan = self.age.get_lifespan_progress()
|
||||
death_probability = self.age.get_death_probability()
|
||||
|
||||
return {
|
||||
"current_age": round(current_age, 2),
|
||||
"expected_lifespan": expected_lifespan,
|
||||
"is_elderly": self.age.is_elderly(),
|
||||
"death_probability": round(death_probability, 4),
|
||||
"realm": self.cultivation_progress.realm.value
|
||||
}
|
||||
@@ -1,6 +1,4 @@
|
||||
from enum import Enum
|
||||
from dataclasses import dataclass
|
||||
|
||||
|
||||
class Month(Enum):
|
||||
JANUARY = 1
|
||||
@@ -16,6 +14,12 @@ class Month(Enum):
|
||||
NOVEMBER = 11
|
||||
DECEMBER = 12
|
||||
|
||||
def __str__(self) -> str:
|
||||
return str(self.value)
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return str(self.value)
|
||||
|
||||
class Year(int):
|
||||
def __add__(self, other: int) -> 'Year':
|
||||
return Year(int(self) + other)
|
||||
|
||||
@@ -65,7 +65,7 @@ class CultivationProgress:
|
||||
def get_exp_required(self, target_level: int) -> int:
|
||||
"""
|
||||
计算升级到指定等级需要的经验值
|
||||
使用指数增长公式:base_exp * (growth_rate ^ level) * realm_multiplier
|
||||
使用简单的代数加法:base_exp + (level - 1) * increment + realm_bonus
|
||||
|
||||
参数:
|
||||
target_level: 目标等级
|
||||
@@ -77,13 +77,15 @@ class CultivationProgress:
|
||||
return 0
|
||||
|
||||
base_exp = 100 # 基础经验值
|
||||
growth_rate = 1.15 # 每级增长15%
|
||||
increment = 50 # 每级增加50点经验值
|
||||
|
||||
# 境界加成倍数:每跨越一个境界,经验需求增加50%
|
||||
realm_multiplier = 1 + (target_level // 30) * 0.5
|
||||
# 基础经验值计算
|
||||
exp_required = base_exp + (target_level - 1) * increment
|
||||
|
||||
exp_required = int(base_exp * (growth_rate ** target_level) * realm_multiplier)
|
||||
return exp_required
|
||||
# 境界加成:每跨越一个境界,额外增加1000点经验值
|
||||
realm_bonus = (target_level // 30) * 1000
|
||||
|
||||
return exp_required + realm_bonus
|
||||
|
||||
def can_level_up(self) -> bool:
|
||||
"""
|
||||
|
||||
@@ -1,17 +1,28 @@
|
||||
"""
|
||||
灵根
|
||||
目前只有五行灵根,金木水火土。
|
||||
目前只有五行:金木水火土。
|
||||
其实和EssenceType很类似
|
||||
但是单独拿出来是因为,之后可能整特殊的复杂灵根
|
||||
所以这里单独定义一个Root类,用来描述灵根。
|
||||
"""
|
||||
|
||||
from enum import Enum
|
||||
|
||||
from src.classes.essence import EssenceType
|
||||
|
||||
class Root(Enum):
|
||||
"""
|
||||
灵根
|
||||
"""
|
||||
Metal = "金"
|
||||
Wood = "木"
|
||||
Water = "水"
|
||||
Fire = "火"
|
||||
Earth = "土"
|
||||
GOLD = "金"
|
||||
WOOD = "木"
|
||||
WATER = "水"
|
||||
FIRE = "火"
|
||||
EARTH = "土"
|
||||
|
||||
corres_essence_type = {
|
||||
Root.GOLD: EssenceType.GOLD,
|
||||
Root.WOOD: EssenceType.WOOD,
|
||||
Root.WATER: EssenceType.WATER,
|
||||
Root.FIRE: EssenceType.FIRE,
|
||||
Root.EARTH: EssenceType.EARTH,
|
||||
}
|
||||
Reference in New Issue
Block a user