Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- namespace Splix.NET.Models
- {
- class Enemy : PlayerBase, IEnemy
- {
- protected List<MovementType> movements = new List<MovementType>();
- protected static Random r = new Random();
- protected int state = 1;
- public Enemy(User u, Block head):base(u, head)
- {
- //this.PlayerBrush = head.BlockBrush;
- }
- public virtual bool Attack()
- {
- throw new NotImplementedException();
- }
- public virtual void Move()
- {
- if (state == 1)
- {
- base.Heading = (MovementType)r.Next(4);
- movements.Add(base.Heading);
- state++;
- }
- if (state == 2)
- {
- base.Heading = AcceptableMovements().ElementAt(r.Next(1));
- movements.Add(base.Heading);
- state++;
- }
- if (state == 3)
- {
- base.Heading = Inverse(movements.ElementAt(movements.Count - 2));
- movements.Add(base.Heading);
- state++;
- }
- if (state == 4)
- {
- base.Heading = Inverse(movements.ElementAt(movements.Count - 2));
- movements.Add(base.Heading);
- state = 1;
- }
- }
- protected List<MovementType> AcceptableMovements()
- {
- List<MovementType> local = new List<MovementType>();
- if (base.Heading == MovementType.Up ||base.Heading == MovementType.Down)
- {
- local.Add(MovementType.Left);
- local.Add(MovementType.Right);
- }
- if (base.Heading == MovementType.Left || base.Heading == MovementType.Right)
- {
- local.Add(MovementType.Up);
- local.Add(MovementType.Down);
- }
- return local;
- }
- protected MovementType Inverse(MovementType mt)
- {
- if (mt == MovementType.Up)
- {
- return MovementType.Down;
- }
- if (mt == MovementType.Down)
- {
- return MovementType.Up;
- }
- if (mt == MovementType.Left)
- {
- return MovementType.Right;
- }
- if (mt == MovementType.Right)
- {
- return MovementType.Left;
- }
- return MovementType.Up;
- }
- protected PlayerBase ClosestPlayer(IEnumerable<PlayerBase> players, int limitnumber = 0)
- {
- return players.Where(a => (this.Head.X - a.Head.X < limitnumber) || (this.Head.Y - a.Head.Y <= limitnumber)).FirstOrDefault();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement