如何在Player对象构造时计算并存储Game Time*0.5的值?
合适的计算逻辑放置方案
根据你的需求,把Game Time * 0.5赋值给Money Spent的逻辑,有几个常见且合理的放置位置,你可以根据自己的业务场景选最合适的:
1. 在构造函数中处理(适合初始化时直接计算)
如果Money Spent的值完全由初始的Game Time决定,不需要后续动态更新,那直接在构造函数里计算赋值是最直接的。你可以修改现有的构造函数(或者新增一个重载),让它自动计算Money Spent:
// 对应你示例里的初始化逻辑,新增/修改带角色名称、财富值、游戏时间的构造函数 public Player(string roleName, int wealth, int gameTime) { // 补充你未贴全的角色名称、财富值的赋值逻辑 this.PlayerGameTime = gameTime; // 直接计算并赋值Money Spent this.PlayerMoneySpent = gameTime * 0.5; }
这样初始化数组时就不用传0了,代码更简洁:
players[0] = new Player("John", 1000, 3); players[1] = new Player("James", 500, 6);
2. 在PlayerGameTime的Setter中自动更新(适合游戏时间动态变化的场景)
如果玩家的游戏时间会在后续游戏过程中增加/修改,希望Money Spent能自动跟着同步更新,那把计算逻辑放在PlayerGameTime的setter里是最优解:
private int playerGameTime; private double playerMoneySpent; public int PlayerGameTime { get { return playerGameTime; } set { playerGameTime = value; // 每当游戏时间被设置时,自动计算更新Money Spent playerMoneySpent = playerGameTime * 0.5; } } public double PlayerMoneySpent { get { return playerMoneySpent; } set { playerMoneySpent = value; } } // 构造函数简化,无需处理Money Spent public Player(string roleName, int wealth, int gameTime) { // 补充角色名称、财富值赋值逻辑 this.PlayerGameTime = gameTime; }
这样不管是初始化还是后续修改PlayerGameTime,PlayerMoneySpent都会自动同步更新,不用手动重复计算。
3. 单独写一个计算方法(适合需要手动触发计算的场景)
如果Money Spent的计算不需要每次游戏时间变化都触发,而是要在特定时机(比如玩家结算、触发特定游戏事件时)才执行,那可以写一个独立的方法来控制计算时机:
public class Player { // 你的现有属性、构造函数保持不变 public void CalculateMoneySpent() { this.PlayerMoneySpent = this.PlayerGameTime * 0.5; } }
然后在需要的地方手动调用:
// 初始化后触发计算 players[0] = new Player("John", 1000, 3, 0); players[0].CalculateMoneySpent(); // 游戏时间修改后触发计算 players[0].PlayerGameTime = 5; players[0].CalculateMoneySpent();
这个方式灵活性最高,完全由你掌控计算的触发时机。
内容的提问来源于stack exchange,提问作者BbOii
相关产品推荐
相关产品推荐

