我的“英雄”創建的角色類有這個代碼:
public virtual User User { get; set; }
public override List<Weapon> WeaponSack { get; set; } = new() { Weapon.ElectricityWand, Weapon.ElementalStaff };
每當我重新登錄角色時,這些專案都會覆寫通過游戲添加的武器。
我的搶劫類有這個代碼,它應該為角色添加和保存被搶劫的武器。武器添加成功,我可以使用它們,直到我注銷并且它們被覆寫。我可以修改玩家屬性,如健康和經驗,并通過注銷和登錄來保存它們,但我不明白為什么武器不會粘住:
{
var CurrentCharacter = SelectCharacter.CurrentHero;
//Damage player for a percentage of their health
var damage = CurrentCharacter.Health - (CurrentCharacter.Health * 0.70);
context.User.Update(user);
CurrentCharacter.LoseHealth(CurrentCharacter, CurrentCharacter.Health, (int)damage);
context.SaveChanges();
Console.WriteLine($"You have lost {damage} health.");
Console.WriteLine($"You have {CurrentCharacter.Health} health left.");
Console.WriteLine("Press any key to collect your loot!");
Console.ReadKey();
//Generate a random weapon
Random random = new Random();
var weapon = new Weapon();
var weaponName = new List<string> { "Sword", "Axe", "Mace", "Dagger", "Bow", "Staff", "Spear", "Wand", "Hammer", "Sickle" };
var weaponType = new List<string> { "Heavy", "Defensive", "Offensive", "Light", "Damaged", "Reinforced", "Magic", "Wooden", "Metallic", "Colorful" };
var weaponLevel = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var weaponDamage = new List<int> { 5, 10, 15, 20, 25, 30, 35, 40, 45, 50 };
var weaponRarity = new List<string> { "Common", "Uncommon", "Rare", "Epic", "Legendary" };
var weaponRarityChance = new List<int> { 70, 15, 10, 4, 1 };
var weaponRarityChanceTotal = weaponRarityChance.Sum();
var weaponRarityChanceRandom = random.Next(1, weaponRarityChanceTotal 1);
var weaponRarityChanceIndex = 0;
for (var i = 0; i < weaponRarityChance.Count; i )
{
weaponRarityChanceIndex = weaponRarityChance[i];
if (weaponRarityChanceRandom <= weaponRarityChanceIndex)
{
weapon.Rarity = weaponRarity[i];
break;
}
}
weapon.Name = weaponName[random.Next(0, weaponName.Count)];
weapon.Degradation = random.Next(1, 15);
weapon.Type = weaponType[random.Next(0, weaponType.Count)];
weapon.Damage = weaponDamage[random.Next(0, weaponDamage.Count)];
weapon.Level = weaponLevel[random.Next(0, weaponLevel.Count)];
context.Hero.Update(CurrentCharacter);
CurrentCharacter.WeaponSack.Add(weapon);
context.SaveChanges();
Console.WriteLine($"You have found a [level {weapon.Level}] [{weapon.Rarity}] ({weapon.Type} {weapon.Name})! It has {weapon.Degradation} uses left.");
Console.WriteLine("Press any key to continue your adventure!");
Console.ReadKey();
Adventure.AdventureStart(user, hero);
break;
}
當武器被掠奪時,它們與資料庫中的 UserId 相關聯,但它們不會留在英雄的武器串列中。因此,我有一整張與身份相關的無法訪問的武器。
Hero類中串列的公共覆寫是我的問題嗎?我試圖找到一種方法來檢索與 userId 相關聯的武器并將其填充,但我無法弄清楚。
按要求上課:
namespace HeroModels
{
public class Weapon
{
public int Id { get; set; }
public string Name { get; set; }
public int Damage { get; set; }
public int Level { get; set; }
public string Rarity { get; set; }
public string Type { get; set; }
public int Degradation { get; set; }
public Weapon(string name, int damage, int level, string rarity, string type, int degradation)
{
Name = name;
Damage = damage;
Level = level;
Rarity = rarity;
Type = type;
Degradation = 10;
}
public Weapon()
{
}
/*Magic weapons*/
public static Weapon ElectricityWand =
new(name: "Electricity Wand", damage: 5, level: 1, rarity: "Common", type: "Magic", degradation: 10);
public static Weapon ElementalStaff =
new(name: "Elemental Staff", damage: 30, level: 5, rarity: "Common", type: "Magic", degradation: 10);
public int CalculateDamage(Weapon weapon)
{
Random random = new();
var damage = random.Next(weapon.Damage);
return damage;
}
}
}
英雄等級:
using HeroModels;
using SolutionItems;
using System.ComponentModel.DataAnnotations;
namespace UserRegistration
{
public class Hero : IHero
{
public Hero()
{
}
[Key]
public new int Id { get; set; }
public override string? Name { get; set; } = "Harry Potter";
public override string Class { get; set; } = "Mage";
public override int Health { get; set; } = 100;
public override int Damage { get; set; } = 10;
public override int Armor
{ get; set; } = 5;
public override int Level
{ get; set; } = 1;
public override int Experience
{ get; set; } = 0;
public override int Gold
{ get; set; } = 0;
public override int Strength
{ get; set; } = 10;
public virtual User User { get; set; }
public virtual List<Weapon> WeaponSack { get; set; } = new() { Weapon.ElectricityWand, Weapon.ElementalStaff };
public override List<Food> FoodSack { get; set; } = new() { Food.trout, Food.salmon };
public override string Attack(IHero hero)
{
return "";
}
public override int GainExperience(IHero hero, int experience)
{
return hero.Experience = experience;
}
public override int GainGold(IHero hero, int gold)
{
return hero.Gold = gold;
}
public override string GainHealth(IHero hero, int health)
{
hero.Health = health;
if (hero.Health >= 100)
{
hero.Health = 100;
}
return $"Your health is now at {hero.Health}!";
}
public override string LoseHealth(IHero hero, int health, int damage)
{
hero.Health -= damage;
if (hero.Health <= 0)
{
Environment.Exit(1);
return "You have died.";
}
return $"You have taken {damage} damage. Your health is now at {hero.Health}!";
}
public override string LevelUp(IHero hero)
{
hero.Level = 1;
var level = hero.Level;
return $"Congratulations! You are now level {Level}";
}
}
}
我如何加載
private DbContext LogIn() { Console.WriteLine("Please enter your username"); string username = Console.ReadLine(); Console.WriteLine("Please enter your password"); string password = Console.ReadLine(); using var context = new HeroesDBContext(_optionsBuilder.Options); var usercompare = new HeroesDBContext().User.Where(u => u.Username == username && u.Password == password); if (!usercompare.Any()) { Console.WriteLine("User not found"); WelcomeScreen(); } CurrentHero = context.Hero.FirstOrDefault(h => h.User.Username == username); CurrentUser = context.User.Where(u => u.Username == username && u.Password == password).FirstOrDefault(); context.SaveChanges(); Adventure.AdventureStart(CurrentUser, CurrentHero); return context; }
uj5u.com熱心網友回復:
在該方法中,您可以通過如下方式預先LogIn加載您的武器
CurrentHero = context.Hero.Include(h=>h.WeaponSack).FirstOrDefault(h => h.User.Username == username);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/531941.html
