Advertisement
Guest User

Untitled

a guest
Apr 18th, 2020
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.02 KB | None | 0 0
  1. using System;
  2. using System.Threading;
  3.  
  4. namespace Models.Zombies
  5. {
  6.     public abstract class Zombie
  7.     {
  8.         public readonly int HIT_POINTS;
  9.  
  10.         public readonly int DAMAGE;
  11.  
  12.         public readonly int SPEED;
  13.  
  14.         private Timer _timer;
  15.  
  16.         public int CoordinateX { get; protected set; }
  17.  
  18.         public event EventHandler<int> MovingNotify;
  19.  
  20.         public Zombie(int hitPoints, int damage, int speed)
  21.         {
  22.             HIT_POINTS = hitPoints;
  23.             DAMAGE = damage;
  24.             SPEED = speed;
  25.             CoordinateX = 1000;
  26.         }
  27.        
  28.         //тут метод инициализирует таймер и зомби меняет свою координату
  29.         public virtual void Move()
  30.         {
  31.             TimerCallback tm = new TimerCallback(ChangeCoordinate);
  32.             _timer = new Timer(tm, null, 0, 1000);
  33.         }
  34.  
  35.         public virtual void ChangeCoordinate(object obj)
  36.         {
  37.             if (CoordinateX - SPEED < 0)
  38.             {
  39.                 CoordinateX = 0;
  40.                 _timer.Change(Timeout.Infinite, 0);
  41.             }
  42.             else
  43.                 CoordinateX -= SPEED;
  44.            
  45.             //тут оповещаю объекты о том, что зомби двигается
  46.             MovingNotify?.Invoke(this, CoordinateX);
  47.         }
  48.  
  49.         public override string ToString()
  50.         {
  51.             return "Hit points: " + HIT_POINTS + " Damage: " + DAMAGE + " Speed: " + SPEED + " Position: " + CoordinateX + "\n";
  52.         }
  53.     }
  54. }
  55.  
  56. //не добавляю полностью весь класс, чтобы было поменьше кода, так понятней) Тут начинаю волну зомби
  57. public ICollection<Zombie> StartWave()
  58. {
  59.     List<Zombie> zombies = SpawnZombies().ToList();
  60.  
  61.     for(int i = 0, count = zombies.Count(); i < count; i++)
  62.     {
  63.         zombies[i].MovingNotify += MoveZombie;
  64.         zombies[i].Move();
  65.     }
  66.  
  67.     return zombies;
  68. }
  69.  
  70. //тут соответственно метод, который записывает логи в Logs - список. Тут всё окей работает, возможно из-за отсутствия синхронизации некорректно, но это не главная проблема сейчас
  71. private void MoveZombie(object sender, int e)
  72. {
  73.     Logs.Add(e.ToString());
  74. }
  75.  
  76. //тут мэйнвиндоу
  77. namespace Game
  78. {
  79.     public partial class MainWindow : Window
  80.     {
  81.         Account acc = new Account("lol");
  82.  
  83.         public MainWindow()
  84.         {
  85.             InitializeComponent();
  86.             List<Zombie> zombies = acc.StartWave().ToList();
  87.  
  88.             foreach(var zombie in zombies)
  89.             {
  90.                 zombie.MovingNotify += MovingEvent;
  91.             }
  92.         }
  93.        
  94.         //метод аналогичен логам в лист, но на форму - тут ловлю эксепшн
  95.         public void MovingEvent(object sender, int e)
  96.         {
  97.             TextBlockResult.Text += e;
  98.         }
  99.     }
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement