Advertisement
Hakuhun

BAse AI

Dec 1st, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.83 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. namespace Splix.NET.Models
  6. {
  7.     class Enemy : PlayerBase, IEnemy
  8.     {
  9.  
  10.         protected List<MovementType> movements = new List<MovementType>();
  11.  
  12.         protected static Random r = new Random();
  13.         protected int state = 1;
  14.  
  15.         public Enemy(User u, Block head):base(u, head)
  16.         {
  17.             //this.PlayerBrush = head.BlockBrush;
  18.  
  19.         }
  20.  
  21.         public virtual bool Attack()
  22.         {
  23.             throw new NotImplementedException();
  24.         }
  25.  
  26.         public virtual void Move()
  27.         {
  28.             if (state == 1)
  29.             {
  30.                 base.Heading = (MovementType)r.Next(4);
  31.                 movements.Add(base.Heading);
  32.                 state++;
  33.             }
  34.             if (state == 2)
  35.             {
  36.                 base.Heading = AcceptableMovements().ElementAt(r.Next(1));
  37.                 movements.Add(base.Heading);
  38.                 state++;
  39.             }
  40.             if (state == 3)
  41.             {
  42.                 base.Heading = Inverse(movements.ElementAt(movements.Count - 2));
  43.                 movements.Add(base.Heading);
  44.                 state++;
  45.             }
  46.             if (state == 4)
  47.             {
  48.                 base.Heading = Inverse(movements.ElementAt(movements.Count - 2));
  49.                 movements.Add(base.Heading);
  50.                 state = 1;
  51.             }
  52.         }
  53.  
  54.         protected List<MovementType> AcceptableMovements()
  55.         {
  56.             List<MovementType> local = new List<MovementType>();
  57.             if (base.Heading == MovementType.Up ||base.Heading == MovementType.Down)
  58.             {
  59.                 local.Add(MovementType.Left);
  60.                 local.Add(MovementType.Right);
  61.             }
  62.             if (base.Heading == MovementType.Left || base.Heading == MovementType.Right)
  63.             {
  64.                 local.Add(MovementType.Up);
  65.                 local.Add(MovementType.Down);
  66.             }
  67.  
  68.             return local;
  69.         }
  70.  
  71.         protected MovementType Inverse(MovementType mt)
  72.         {
  73.             if (mt == MovementType.Up)
  74.             {
  75.                 return MovementType.Down;
  76.             }
  77.             if (mt == MovementType.Down)
  78.             {
  79.                 return MovementType.Up;
  80.             }
  81.             if (mt == MovementType.Left)
  82.             {
  83.                 return MovementType.Right;
  84.             }
  85.             if (mt == MovementType.Right)
  86.             {
  87.                 return MovementType.Left;
  88.             }
  89.             return MovementType.Up;
  90.         }
  91.  
  92.         protected PlayerBase ClosestPlayer(IEnumerable<PlayerBase> players, int limitnumber = 0)
  93.         {
  94.             return players.Where(a => (this.Head.X - a.Head.X < limitnumber) ||  (this.Head.Y - a.Head.Y <= limitnumber)).FirstOrDefault();
  95.         }
  96.     }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement