亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? flybyai.cs

?? 說明如何使用托管 Direct3D Mobile 創建一個簡單的二維游戲。
?? CS
字號:
//---------------------------------------------------------------------
//  This file is part of the Microsoft .NET Framework SDK Code Samples.
// 
//  Copyright (C) Microsoft Corporation.  All rights reserved.
// 
//This source code is intended only as a supplement to Microsoft
//Development Tools and/or on-line documentation.  See these other
//materials for detailed information regarding Microsoft code samples.
// 
//THIS CODE AND INFORMATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY
//KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
//IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
//PARTICULAR PURPOSE.
//---------------------------------------------------------------------

using System;

namespace GameApp
{
    /// <summary>
    /// Fly by attacking AI implementation.  Defines AI type
    /// kFlyby.  This type swoops in to drop bombs, then swoops back
    /// up to a circling altitude and circles back for another attack.
    /// </summary>
    class FlybyAI : AI
    {
        /// <summary>
        /// Current state of the AI instance
        /// </summary>
        private enum FlybyState
        {
            Circling,
            Attacking,
        }
        private FlybyState flybyState = FlybyState.Attacking;

        /// <summary>
        /// Specifies if an attack has been launched.  This is used to
        /// determine whether the object is circling into or out of an attack.
        /// </summary>
        private bool attackLaunched = false;

        /// <summary>
        /// Circling altitude.  This is actually the height above the player
        /// that the object should fly when circling.
        /// </summary>
        private float circleY = 0.0F;

        /// <summary>
        /// Attacking altitude.  This is actually the height above the player
        /// that the object should fly when attacking.
        /// </summary>
        private float attackY = 0.0F;

        /// <summary>
        /// When resetting a level, this AI type needs to reset some
        /// extra data as well.
        /// </summary>
        public override void Reset()
        {
            base.Reset();
            flybyState = FlybyState.Attacking;
            attackLaunched = false;
        }

        /// <summary>
        /// Initialize this instance of the fly by AI.
        /// </summary>
        /// <param name="wo">WorldObject owning this AI</param>
        /// <param name="lev">Current level</param>
        public override void Init(WorldObject wo, Level lev)
        {
            // Determine random circling and attacking altitudes
            circleY = MaxY * .6F + .8F * MaxY * GameMain.Random();
            attackY = MinY * .8F + .4F * MinY * GameMain.Random();

            // Make sure the object is stopped
            wo.VelocityY = 0.0F;
            wo.VelocityX = 0.0F;

            // Make sure that the circling altitude is at least as high as
            // the attacking altitude.
            if (circleY < attackY)
                circleY = attackY;

            // Start at the circling altitude
            wo.WorldY = circleY;

            // Start with the walking animation
            wo.Walk();
        }

        /// <summary>
        /// Update the AI instance.
        /// </summary>
        /// <param name="wo">WorldObject that owns the AI</param>
        /// <param name="lev">Current level</param>
        public override void Update(WorldObject wo, Level lev)
        {
            // If the player is dead then stop
            if (lev.Player.Dead)
            {
                wo.VelocityX = 0.0F;
                wo.VelocityY = 0.0F;
                wo.Stand();
                return;
            }

            // Update the timers
            CurFireTime += GameMain.SecondsPerFrame;
            CurDuckTime += GameMain.SecondsPerFrame;

            // If attacking then let it finish
            if (wo.State == WorldObject.AnimationState.Attack)
                return;

            // Check the state and update accordingly
            switch (flybyState)
            {
                case FlybyState.Attacking:
                    UpdateFlybyAttacking(lev, wo);
                    break;
                default:
                    UpdateFlybyCircling(lev, wo);
                    break;
            }
        }

        /// <summary>
        /// Update the AI in attacking mode.
        /// </summary>
        /// <param name="lev">Current level</param>
        /// <param name="wo">WorldObject that owns AI</param>
        private void UpdateFlybyAttacking(Level lev, WorldObject wo)
        {
            // If shots are fired then prepare for next attack
            // by chaning the mode to circling
            if (attackLaunched)
            {
                wo.Walk();
                flybyState = FlybyState.Circling;
                attackLaunched = false;
                return;
            }

            // Distance to any incoming shots
            float shotDistX = 0.0F;
            float shotDistY = 0.0F;

            // Check if evasion is required
            if (CheckDuck(wo, lev, ref shotDistX, ref shotDistY))
            {
                flybyState = FlybyState.Circling;
                wo.VelocityY = 0.0F;
                return;
            }

            // Cache some parameters
            Player p = lev.Player;
            float deltaPlayerX = p.WorldX - wo.WorldX;
            float deltaPlayerY = p.WorldY - wo.WorldY;

            // Check if conditions are right for attacking
            if (Math.Abs(deltaPlayerX) <= MinX)
            {
                wo.VelocityY = 0.0F;
                wo.Attack();
                attackLaunched = true;
                return;
            }

            // Move into attack position
            if (deltaPlayerX > 0.0F)
                ApplyPositiveAccelerationX(wo);
            else
                ApplyNegativeAccelerationX(wo);

            if (deltaPlayerY > attackY)
            {
                ApplyPositiveAccelerationY(wo);
            }
            else
            {
                wo.WorldY = lev.Player.WorldY - attackY;
                wo.VelocityY = 0.0F;
            }
        }

        /// <summary>
        /// Update the AI in circling mode
        /// </summary>
        /// <param name="lev">Current level</param>
        /// <param name="wo">WorldObject that owns the AI</param>
        private void UpdateFlybyCircling(Level lev, WorldObject wo)
        {
            // Cache some parameters
            Player p = lev.Player;
            float deltaPlayerX = p.WorldX - wo.WorldX;
            float deltaPlayerY = p.WorldY - wo.WorldY;

            // If far enough from player then switch to attack mode
            if (Math.Abs(deltaPlayerX) >= MaxX)
            {
                wo.VelocityY = 0.0F;
                flybyState = FlybyState.Attacking;
                return;
            }

            // Move into circling position
            if (wo.VelocityX > 0.0F)
                ApplyPositiveAccelerationX(wo);
            else
                ApplyNegativeAccelerationX(wo);

            if (deltaPlayerY < circleY)
            {
                ApplyNegativeAccelerationY(wo);
            }
            else
            {
                wo.WorldY = lev.Player.WorldY - circleY;
                wo.VelocityY = 0.0F;
            }
        }
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
26uuu精品一区二区| 日本久久一区二区| 亚洲免费大片在线观看| 欧美一区二区三区不卡| 成人avav在线| 日韩 欧美一区二区三区| 欧美v亚洲v综合ⅴ国产v| 欧美伊人久久久久久久久影院| 精品亚洲成a人| 视频一区视频二区中文字幕| 国产精品乱码一区二区三区软件| 日韩一区二区麻豆国产| 成人午夜免费视频| 国产黄色91视频| 一区二区三区四区蜜桃| 久久人人爽人人爽| 亚洲精品在线免费观看视频| 欧美二区在线观看| 欧美午夜精品久久久久久孕妇| 99在线视频精品| av日韩在线网站| 99久久精品99国产精品| 99热精品一区二区| 99re这里只有精品6| 国产精品一区二区果冻传媒| 经典一区二区三区| 国产又粗又猛又爽又黄91精品| 日本不卡1234视频| 精品一二三四在线| 懂色av一区二区在线播放| 成人18精品视频| 91一区二区三区在线观看| 91浏览器在线视频| 欧美区在线观看| 欧美成人精品二区三区99精品| 欧美xxxx老人做受| 国产午夜亚洲精品午夜鲁丝片| 国产精品免费视频一区| 亚洲另类在线视频| 男人操女人的视频在线观看欧美| 久久99国产精品麻豆| 五月婷婷综合网| 久久精品国产免费| 粉嫩绯色av一区二区在线观看 | 日韩精品三区四区| 七七婷婷婷婷精品国产| 国产福利不卡视频| 色综合久久久久网| 欧美高清视频一二三区| 国产蜜臀97一区二区三区| 精品乱人伦一区二区三区| 中文字幕制服丝袜成人av| 婷婷开心激情综合| 国产酒店精品激情| 经典三级一区二区| 欧美主播一区二区三区美女| 91精品国产91久久综合桃花| 欧美国产欧美亚州国产日韩mv天天看完整 | 欧美精选一区二区| 久久欧美中文字幕| 亚洲bt欧美bt精品| 成人午夜视频在线| 欧美日韩在线不卡| 国产精品美女一区二区三区| 日韩电影免费一区| av一区二区三区四区| 日韩欧美成人激情| 亚洲男人天堂av| 国产白丝网站精品污在线入口| 欧美日韩国产一区二区三区地区| 欧美一级欧美三级在线观看 | 制服丝袜av成人在线看| 久久久久久久性| 亚洲电影一级片| www.久久精品| 国产亚洲人成网站| 全国精品久久少妇| 国产高清不卡二三区| 欧美成人精品二区三区99精品| 欧美韩日一区二区三区| 亚洲尤物在线视频观看| 成人黄色软件下载| 久久久综合激的五月天| 蜜臀av一区二区在线观看| 欧美系列在线观看| 一区二区三区丝袜| 日本高清成人免费播放| 综合久久给合久久狠狠狠97色| 国产一区啦啦啦在线观看| 91精品欧美综合在线观看最新 | 国产精品美女一区二区三区 | 欧美情侣在线播放| 亚洲国产欧美日韩另类综合 | 国产精品午夜免费| 福利电影一区二区三区| 欧美日韩一区二区在线观看视频| 亚洲欧美成人一区二区三区| 高清国产一区二区三区| 亚洲国产高清在线观看视频| 国产美女一区二区三区| 久久精品视频免费| 成人动漫在线一区| 欧美r级在线观看| 日韩国产欧美在线播放| 日韩一区二区在线播放| 久久99国产精品尤物| 精品免费视频一区二区| 精品伊人久久久久7777人| 久久先锋影音av鲁色资源网| 麻豆91精品视频| 2021中文字幕一区亚洲| 国产成人精品一区二| 欧美激情一区三区| av不卡免费在线观看| 中文字幕亚洲在| 欧美自拍偷拍一区| 亚洲日本一区二区| av电影在线观看完整版一区二区| 亚洲欧洲日本在线| 91麻豆国产自产在线观看| 亚洲国产精品久久久久婷婷884 | 精品国产一二三区| 懂色av一区二区在线播放| 亚洲视频 欧洲视频| 欧美三级乱人伦电影| 国产在线一区二区| 亚洲精品久久久蜜桃| 欧美一区二区三级| 91精品国产综合久久久久久久| 亚洲色大成网站www久久九九| 亚洲精品在线免费播放| 欧美日韩国产精选| 一本色道亚洲精品aⅴ| 国产在线精品一区二区不卡了| 亚洲午夜电影网| 国产精品国产自产拍高清av王其| 精品国产污网站| 欧美大片在线观看一区二区| 欧美日韩一级大片网址| 91老师片黄在线观看| 成人av资源站| 国产91丝袜在线播放| 国产一区二区在线观看视频| 麻豆国产精品一区二区三区 | 日韩视频一区二区三区在线播放| 色综合久久综合| www.亚洲免费av| va亚洲va日韩不卡在线观看| 成人av动漫网站| 99久久综合色| 91视频.com| 欧美专区日韩专区| 欧美人狂配大交3d怪物一区| 欧美日韩免费观看一区二区三区| 色悠久久久久综合欧美99| 91久久精品国产91性色tv | 另类人妖一区二区av| 美女视频黄免费的久久 | 亚洲美女视频一区| 综合网在线视频| 亚洲一区二区三区四区五区中文| 樱花影视一区二区| 午夜精品久久久久久不卡8050| 午夜精品福利视频网站| 午夜精品久久久久久久久| 日本网站在线观看一区二区三区| 欧美a级理论片| 国产一区 二区| 91免费观看视频| 9191久久久久久久久久久| 日韩欧美一级精品久久| 日本一区二区三区电影| 亚洲另类在线视频| 青青国产91久久久久久| 国产精品自产自拍| 日本二三区不卡| 欧美tickling网站挠脚心| 国产精品免费久久| 五月天激情综合| 国产伦精品一区二区三区视频青涩| 顶级嫩模精品视频在线看| 色综合久久久久综合体| 91精品欧美久久久久久动漫 | 婷婷夜色潮精品综合在线| 国内不卡的二区三区中文字幕 | 91首页免费视频| 欧美一区二区三区公司| 国产精品全国免费观看高清| 天堂精品中文字幕在线| 福利一区二区在线观看| 这里是久久伊人| 亚洲日本一区二区三区| 日韩精品一二三| 99久久综合色| 精品日韩在线一区| 亚洲一区二区五区| 国产成人自拍网| 8x福利精品第一导航| 国产精品麻豆久久久| 青青草91视频|