Beispiel #1
0
        public Tears shoot(Point _p, Player.PlayerShoot _d)
        {
            Tears _tear = new Tears(Tears.side.enemy);

            _tear._Position  = _p;
            _tear._Direction = _d;
            return(_tear);
        }
 public void Move()
 {
     if (_side == side.player)
     {
         _speed_B = _speed;
     }
     else if (_side == side.enemy)
     {
         _speed_B = 5;
     }
     if (_direction == Player.PlayerShoot.Up)
     {
         if (_position.Y <= 380)
         {
             _position.Y += _speed_B;
         }
         else
         {
             _direction = Player.PlayerShoot.Stop;
         }
     }
     else if (_direction == Player.PlayerShoot.Down)
     {
         if (_position.Y >= 40)
         {
             _position.Y -= _speed_B;
         }
         else
         {
             _direction = Player.PlayerShoot.Stop;
         }
     }
     else if (_direction == Player.PlayerShoot.Left)
     {
         if (_position.X >= 70)
         {
             _position.X -= _speed_B;
         }
         else
         {
             _direction = Player.PlayerShoot.Stop;
         }
     }
     else if (_direction == Player.PlayerShoot.Right)
     {
         if (_position.X <= 760)
         {
             _position.X += _speed_B;
         }
         else
         {
             _direction = Player.PlayerShoot.Stop;
         }
     }
 }
 public void Shoot(Point _Position, int Width, int Height, Player.PlayerShoot _playerShoot)
 {
     _sound_Shoot.Play();
     _nowTear = _tear_0;
     if (_playerShoot == Player.PlayerShoot.Up)
     {
         _position = new Point(_Position.X + (Width) / 2 - _tear_0.Width / 2, _Position.Y + Height);
     }
     else if (_playerShoot == Player.PlayerShoot.Down)
     {
         _position = new Point(_Position.X + (Width) / 2 - _tear_0.Width / 2, _Position.Y);
     }
     else if (_playerShoot == Player.PlayerShoot.Left)
     {
         _position = new Point(_Position.X - _tear_0.Width, _Position.Y + Height / 2);
     }
     else if (_playerShoot == Player.PlayerShoot.Right)
     {
         _position = new Point(_Position.X + Width, _Position.Y + Height / 2);
     }
 }
 public void ShootBoss(Point _p, Player.PlayerShoot _d)
 {
     _position  = _p;
     _direction = _d;
     _nowTear   = _tear_boss;
 }
        private void timer1_Tick(object sender, EventArgs e)
        {
            #region 对键盘输入的相应
            if (_nowgame == gameState.open)
            {
                bool keyDown  = (((ushort)GetAsyncKeyState((int)Keys.Down)) & 0xffff) != 0;
                bool keyUp    = (((ushort)GetAsyncKeyState((int)Keys.Up)) & 0xffff) != 0;
                bool keyRight = (((ushort)GetAsyncKeyState((int)Keys.Right)) & 0xffff) != 0;
                bool keyLeft  = (((ushort)GetAsyncKeyState((int)Keys.Left)) & 0xffff) != 0;

                bool keyDownMove  = (((ushort)GetAsyncKeyState((int)Keys.W)) & 0xffff) != 0;
                bool keyUpMove    = (((ushort)GetAsyncKeyState((int)Keys.S)) & 0xffff) != 0;
                bool keyRightMove = (((ushort)GetAsyncKeyState((int)Keys.A)) & 0xffff) != 0;
                bool keyLeftMove  = (((ushort)GetAsyncKeyState((int)Keys.D)) & 0xffff) != 0;

                Tears _myTears;

                if (keyDown == true)
                {
                    if (_delayShoot <= 0)
                    {
                        _delayShoot          = _player._DelayShoot;
                        _player._PlayerShoot = Player.PlayerShoot.Up;
                        _myTears             = _player.Shoot(true);
                        _tearList.Add(_myTears);
                    }
                    else if (_player._DelayShoot - _delayShoot <= timer1.Interval * 3)
                    {
                        _delayShoot        -= timer1.Interval / 2;
                        _player._PlayerMove = Player.PlayerMove.Up;
                        _myTears            = _player.Shoot(true);
                    }
                    else
                    {
                        _delayShoot         -= timer1.Interval / 2;
                        _player._PlayerShoot = Player.PlayerShoot.Up;
                        _myTears             = _player.Shoot(false);
                    }
                }
                else if (keyUp == true)
                {
                    if (_delayShoot <= 0)
                    {
                        _delayShoot          = _player._DelayShoot;
                        _player._PlayerShoot = Player.PlayerShoot.Down;
                        _myTears             = _player.Shoot(true);
                        _tearList.Add(_myTears);
                    }
                    else if (_player._DelayShoot - _delayShoot <= timer1.Interval * 3)
                    {
                        _delayShoot        -= timer1.Interval / 2;
                        _player._PlayerMove = Player.PlayerMove.Down;
                        _myTears            = _player.Shoot(true);
                    }
                    else
                    {
                        _delayShoot         -= timer1.Interval / 2;
                        _player._PlayerShoot = Player.PlayerShoot.Down;
                        _myTears             = _player.Shoot(false);
                    }
                }
                else if (keyLeft == true)
                {
                    if (_delayShoot <= 0)
                    {
                        _delayShoot          = _player._DelayShoot;
                        _player._PlayerShoot = Player.PlayerShoot.Left;
                        _myTears             = _player.Shoot(true);
                        _tearList.Add(_myTears);
                    }
                    else if (_player._DelayShoot - _delayShoot <= timer1.Interval * 3)
                    {
                        _delayShoot        -= timer1.Interval / 2;
                        _player._PlayerMove = Player.PlayerMove.Left;
                        _myTears            = _player.Shoot(true);
                    }
                    else
                    {
                        _delayShoot         -= timer1.Interval / 2;
                        _player._PlayerShoot = Player.PlayerShoot.Left;
                        _myTears             = _player.Shoot(false);
                    }
                }
                else if (keyRight == true)
                {
                    if (_delayShoot <= 0)
                    {
                        _delayShoot          = _player._DelayShoot;
                        _player._PlayerShoot = Player.PlayerShoot.Right;
                        _myTears             = _player.Shoot(true);
                        _tearList.Add(_myTears);
                    }
                    else if (_player._DelayShoot - _delayShoot <= timer1.Interval * 3)
                    {
                        _delayShoot        -= timer1.Interval / 2;
                        _player._PlayerMove = Player.PlayerMove.Right;
                        _myTears            = _player.Shoot(true);
                    }
                    else
                    {
                        _delayShoot         -= timer1.Interval / 2;
                        _player._PlayerShoot = Player.PlayerShoot.Right;
                        _myTears             = _player.Shoot(false);
                    }
                }
                else
                {
                    _player._PlayerShoot = Player.PlayerShoot.Stop;
                    if (_delayShoot > 0)
                    {
                        _delayShoot -= 100;
                    }
                    else
                    {
                        _delayShoot         -= timer1.Interval / 2;
                        _player._PlayerShoot = Player.PlayerShoot.Stop;
                        _myTears             = _player.Shoot(false);
                    }
                }
                //判断按键且是否碰撞
                if (keyDownMove == true) //&& !_boss_0.ifMakeDMG(_player._NowplayerMove, new Point(_player._Position.X, _player._Position.Y - _player._Speed)))
                {
                    _player.Move(Player.PlayerMove.Down);
                }
                if (keyUpMove == true) //&& !_boss_0.ifMakeDMG(_player._NowplayerMove, new Point(_player._Position.X, _player._Position.Y + _player._Speed)))
                {
                    _player.Move(Player.PlayerMove.Up);
                }
                if (keyLeftMove == true) //&& !_boss_0.ifMakeDMG(_player._NowplayerMove, new Point(_player._Position.X- _player._Speed, _player._Position.Y )))
                {
                    _player.Move(Player.PlayerMove.Left);
                }
                if (keyRightMove == true) //&& !_boss_0.ifMakeDMG(_player._NowplayerMove, new Point(_player._Position.X+ _player._Speed, _player._Position.Y )))
                {
                    _player.Move(Player.PlayerMove.Right);
                }
                if (keyLeftMove == false && keyRightMove == false && keyDownMove == false && keyUpMove == false)
                {
                    _player.Move(Player.PlayerMove.Stop);
                }
                foreach (Tears t in _tearList)
                {
                    t.Move();
                }
            }
            #endregion
            #region 检测攻击与被攻击
            bool _IfGameOver = _player.ifGameOver();
            if (_can_not_BeDMG == 0)
            {
                _canBeDMG      = true;
                _can_not_BeDMG = 2000;
            }
            else
            {
                _can_not_BeDMG -= 100;
            }
            if (_can_not_BeDMG == 1000)
            {
                _player._IfHurt = false;
            }
            if (_boss_0.ifMakeDMG(_player._NowplayerMove, _player._Position) && _canBeDMG)
            {
                _player.hurt();
                _canBeDMG       = false;
                _can_not_BeDMG  = 2000;
                _player._IfHurt = true;
            }
            if (_IfGameOver)
            {
                _nowgame = gameState.over;
            }
            for (int i = 0; i < _tearList.Count; i++)
            {
                if (_tearList[i]._Side == Tears.side.player && _boss_0.ifMakeDMG(_tearList[i]._Tear_0, _tearList[i]._Position))
                {
                    _boss_0.hurt(_player._Dmg);
                    _tearList.RemoveAt(i);
                }
                else if (_tearList[i]._Side == Tears.side.enemy && _player.ifTakeDMG(_tearList[i]._Tear_0, _tearList[i]._Position))
                {
                    if (_canBeDMG)
                    {
                        _player.hurt();
                        _canBeDMG       = false;
                        _can_not_BeDMG  = 2000;
                        _player._IfHurt = true;
                    }
                    else
                    {
                        _tearList.RemoveAt(i);
                    }
                }
                if (_boss_0.ifBossDied())
                {
                    _nowgame       = gameState.win;
                    timer1.Enabled = false;
                    _tearList.Clear();
                }
                if (_player.ifGameOver())
                {
                    _nowgame       = gameState.over;
                    timer1.Enabled = false;
                    _tearList.Clear();
                }
            }
            #endregion
            #region Boss攻击
            Random ran = new Random();
            if (_bossTime == 0)
            {
                _Way = ran.Next(0, 2);
            }

            if (_bossTime <= 3000)
            {
                _bossTime += timer1.Interval;
                if (_true_attack == true)
                {
                    // 攻击方式===================0
                    if (_Way == 0)
                    {
                        _boss_0.attackWay(0, _bossTime);
                        if (_bossTime >= 1000 && _bossTime % 50 == 0)
                        {
                            // boss 射方向
                            Player.PlayerShoot _d = Player.PlayerShoot.Left;
                            Tears _t;
                            //随机眼泪方向
                            Point p = new Point();
                            if (_boss_0._Position.X < _player._Position.X)
                            {
                                _d = Player.PlayerShoot.Right;
                                int x = ran.Next((int)(_boss_0._Position.X + _boss_0._Nowenemy.Width * _boss_0._Size / 2), (int)(_boss_0._Position.X + _boss_0._Nowenemy.Width * _boss_0._Size));
                                int y = ran.Next((int)(_boss_0._Position.Y), (int)(_boss_0._Position.Y + _boss_0._Nowenemy.Height * _boss_0._Size));
                                p = new Point(x, y);
                            }
                            else if (_boss_0._Position.X > _player._Position.X)
                            {
                                _d = Player.PlayerShoot.Left;
                                int x = ran.Next((int)(_boss_0._Position.X), (int)(_boss_0._Position.X + _boss_0._Nowenemy.Width * _boss_0._Size / 2));
                                int y = ran.Next((int)(_boss_0._Position.Y), (int)(_boss_0._Position.Y + _boss_0._Nowenemy.Height * _boss_0._Size));
                                p = new Point(x, y);
                            }

                            _t = _boss_0.shoot(p, _d);
                            _tearList.Add(_t);
                        }
                        if (_bossTime == 2000)
                        {
                            _true_attack = false;
                        }
                    }

                    //======================== 1
                    if (_Way == 1)
                    {
                        _boss_0.attackWay(1, _bossTime);
                        //记录boss起跳时玩家位置
                        if (_bossTime >= 1000 && _bossTime <= 1100)
                        {
                            _boss_0._Position = new Point(0, 100000);
                            p = new Point(_player._Position.X - (int)(_boss_0._Nowenemy.Width * _boss_0._Size / 2), _player._Position.Y - (int)(_boss_0._Nowenemy.Height * _boss_0._Size / 2));
                        }
                        else if (_bossTime == 2000)
                        {
                            _boss_0._Position = p;
                        }
                        if (_bossTime == 3000)
                        {
                            _true_attack = false;
                        }
                    }
                }
            }
            else
            {
                _bossTime    = 0;
                _true_attack = true;
            }

            #endregion

            pictureBoxBackground.Invalidate();
        }