示例#1
0
 public void Exit(object sender, GameObjectStateEventArgs args)
 {
     if (!args.IsAlive)
     {
         Console.Clear();
         Console.WriteLine("Looser:");
         foreach (string s in args.Sprite)
         {
             Console.Write(s);
         }
     }
 }
示例#2
0
 //Перемещения танка - синхронная отрисовка
 public void OnMoveUpdate(object sender, GameObjectStateEventArgs args)
 {
     this.dic[sender] = args;
     //Синхронизация отрисовки
     lock (this.sync)
     {
         for (int i = 0; i < args.Sprite.Length; i++)
         {
             Console.SetCursorPosition(args.NewStatePosX, args.NewStatePosY + i);
             Console.Write(args.Sprite[i]);
         }
     }
 }
示例#3
0
        //Метод отрисовки полёта снаряда
        protected void Shoot(object sender, GameObjectStateEventArgs args)
        {
            bool left = args.NewStatePosX == 0 ? true : false;
            int  posX = (left) ? args.NewStatePosX + 10 : args.NewStatePosX - 1;
            int  posY = args.NewStatePosY + 2;

            while (posX < GameField.MaxWidth && posX > 0 && !GameField.IsEndGame)
            {
                //Примитивы синхронизации отрисовки что бы не смешивалось
                lock (this.sync)
                {
                    Console.SetCursorPosition(posX, posY);
                    Console.Write("*");
                }
                Thread.Sleep(80);
                lock (this.sync)
                {
                    Console.SetCursorPosition(posX, posY);
                    Console.Write(" ");
                }
                if (left)
                {
                    posX++;
                }
                else
                {
                    posX--;
                }
            }
            //Определяет попадание
            foreach (var i in this.dic)
            {
                if (i.Key != sender)
                {
                    if (i.Value.NewStatePosX == posX && (i.Value.NewStatePosY < posY && posY < i.Value.NewStatePosY + i.Value.Sprite.Length))
                    {
                        i.Value.IsAlive     = false;
                        GameField.IsEndGame = true;
                    }
                    break;
                }
            }
        }
示例#4
0
 //Асинхронный вызов отрисовки полета снаряда
 public void OnShootUpdate(object sender, GameObjectStateEventArgs args)
 {
     this.shoot.BeginInvoke(sender, args, null, null);
 }