Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Threading;
- namespace Models.Zombies
- {
- public abstract class Zombie
- {
- public readonly int HIT_POINTS;
- public readonly int DAMAGE;
- public readonly int SPEED;
- private Timer _timer;
- public int CoordinateX { get; protected set; }
- public event EventHandler<int> MovingNotify;
- public Zombie(int hitPoints, int damage, int speed)
- {
- HIT_POINTS = hitPoints;
- DAMAGE = damage;
- SPEED = speed;
- CoordinateX = 1000;
- }
- //тут метод инициализирует таймер и зомби меняет свою координату
- public virtual void Move()
- {
- TimerCallback tm = new TimerCallback(ChangeCoordinate);
- _timer = new Timer(tm, null, 0, 1000);
- }
- public virtual void ChangeCoordinate(object obj)
- {
- if (CoordinateX - SPEED < 0)
- {
- CoordinateX = 0;
- _timer.Change(Timeout.Infinite, 0);
- }
- else
- CoordinateX -= SPEED;
- //тут оповещаю объекты о том, что зомби двигается
- MovingNotify?.Invoke(this, CoordinateX);
- }
- public override string ToString()
- {
- return "Hit points: " + HIT_POINTS + " Damage: " + DAMAGE + " Speed: " + SPEED + " Position: " + CoordinateX + "\n";
- }
- }
- }
- //не добавляю полностью весь класс, чтобы было поменьше кода, так понятней) Тут начинаю волну зомби
- public ICollection<Zombie> StartWave()
- {
- List<Zombie> zombies = SpawnZombies().ToList();
- for(int i = 0, count = zombies.Count(); i < count; i++)
- {
- zombies[i].MovingNotify += MoveZombie;
- zombies[i].Move();
- }
- return zombies;
- }
- //тут соответственно метод, который записывает логи в Logs - список. Тут всё окей работает, возможно из-за отсутствия синхронизации некорректно, но это не главная проблема сейчас
- private void MoveZombie(object sender, int e)
- {
- Logs.Add(e.ToString());
- }
- //тут мэйнвиндоу
- namespace Game
- {
- public partial class MainWindow : Window
- {
- Account acc = new Account("lol");
- public MainWindow()
- {
- InitializeComponent();
- List<Zombie> zombies = acc.StartWave().ToList();
- foreach(var zombie in zombies)
- {
- zombie.MovingNotify += MovingEvent;
- }
- }
- //метод аналогичен логам в лист, но на форму - тут ловлю эксепшн
- public void MovingEvent(object sender, int e)
- {
- TextBlockResult.Text += e;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement