| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- namespace D21._1
- {
- public class Inventory : IEnumerable<Item>
- {
- public Item Item;
- public Inventory NextEntry;
- public int Count<T>() where T : Item => (NextEntry?.Count<T>() ?? 0) + (Item is T ? 1 : 0);
- public override int GetHashCode() => HashCode.Combine(Item, NextEntry);
- public bool Contains(Item i)
- {
- var cur = this;
- while (cur != null)
- {
- if (i.Equals(cur.Item)) return true;
- cur = cur.NextEntry;
- }
- return false;
- }
- public IEnumerator<Item> GetEnumerator()
- {
- var cur = this;
- while (cur != null)
- {
- yield return cur.Item;
- cur = cur.NextEntry;
- }
- }
- IEnumerator IEnumerable.GetEnumerator() => throw new NotImplementedException();
- }
- public abstract class Item
- {
- public string Name { get; set; }
- public int Damage { get; set; }
- public int Armor { get; set; }
- public override bool Equals(object obj) => obj is Item item && Name.Equals(item.Name, StringComparison.OrdinalIgnoreCase);
- public override int GetHashCode() => HashCode.Combine(Name);
- }
- public class Weapon : Item { }
- public class Armor : Item { }
- public class Ring : Item { }
- }
|