예제 #1
0
        public override void Initialize()
        {
            SetMainLight(fk_Material.TrueWhite, new fk_Vector(0, 0, -1));
            SetStateLight(fk_Material.TrueWhite, new fk_Vector(0, 0, -1));
            SetMainCamera(new fk_Vector(0, 0, 100));
            SetStateCamera(new fk_Vector(0, 0, 100));

            _titleTex = new fk_RectTexture();
            if (!_titleTex.ReadJPG("sram.jpg"))
            {
                Console.WriteLine("Tex Load Error");
            }
            _titleTex.TextureSize = new fk_TexCoord(40, 30);

            _titleTexModel = new fk_Model()
            {
                Shape    = _titleTex,
                Material = fk_Material.White
            };
            _titleTexModel.GlMoveTo(new fk_Vector(0, 10, 0));
            MainScene.EntryModel(_titleTexModel);

            _guideSprite = new fk_SpriteModel();
            if (!_guideSprite.InitFont("PixelMplus12-Regular.ttf"))
            {
                Console.WriteLine("Font Load Error.");
            }

            _guideSprite.PrdScale(0.2);
            _guideSprite.DrawText("Enter : Start");
            _guideSprite.GlMoveTo(new fk_Vector(0, -20, 0));

            MainScene.EntryModel(_guideSprite);
            base.Initialize();
        }
예제 #2
0
        public Player(fk_Vector position) : base(CharacterSide.Player, LifeMax, position, 100)
        {
            Model = new fk_Model()
            {
                Shape    = new fk_Block(4, 4, 4),
                Material = new fk_Material()
                {
                    Ambient   = new fk_Color(0, 0, 0),
                    Alpha     = 0.7f,
                    Diffuse   = new fk_Color(0.8, 0.6, 0),
                    Emission  = new fk_Color(0, 0, 0),
                    Shininess = 0,
                    Specular  = new fk_Color(0, 0, 0)
                },
                BMode = fk_BoundaryMode.CAPSULE,
                //BDraw = true,
                BLineColor = fk_Material.Blue.Diffuse
            };
            Model.GlUpvec(new fk_Vector(1, 1, 0));
            Model.SetCapsule(new fk_Vector(0, 0, 0), new fk_Vector(0, 0, 0.01), 2);

            GameInfo.GetInstance().AddPlayerSide(this);
            GameInfo.GetInstance().ControllableCharacter = this;

            _shootLine = new fk_Model()
            {
                Shape    = new fk_Block(0.2, 0.2, ShootLineLength),
                Material = fk_Material.Pink,
            };
            _shootLine.Material.Alpha = 0.5f;

            _isImmotal = false;
        }
예제 #3
0
 private void SetModelTransform(fk_Model model, fk_Vector position, fk_Vector direction, fk_Vector upVec = null)
 {
     model.GlVec(direction);
     if (upVec != null)
     {
         model.GlUpvec(upVec);
     }
     model.GlMoveTo(position);
 }
예제 #4
0
 protected void SetStateCamera(fk_Vector position, fk_Vector direction = null)
 {
     stateCamera = new fk_Model();
     stateCamera.GlMoveTo(position);
     if (direction != null)
     {
         stateCamera.GlVec(direction);
     }
     StateScene.Camera = stateCamera;
 }
예제 #5
0
 protected void SetMainCamera(fk_Vector position, fk_Vector direction = null)
 {
     mainCamera = new fk_Model();
     mainCamera.GlMoveTo(position);
     if (direction != null)
     {
         mainCamera.GlVec(direction);
     }
     MainScene.Camera = mainCamera;
 }
예제 #6
0
        static void Main(string[] args)
        {
            fk_Material.InitDefault();

            // ウィンドウ生成
            var window = new fk_AppWindow();

            window.Size    = new fk_Dimension(600, 600);
            window.BGColor = new fk_Color(1, 1, 1);
            window.Open();

            var posArray = new fk_Vector[100];
            var point    = new fk_Point();

            for (int i = 0; i < 100; i++)
            {
                posArray[i] = new fk_Vector(0, 0, 0);
                point.PushVertex(posArray[i]);
            }

            var pointModel = new fk_Model();

            pointModel.Shape      = point;
            pointModel.PointColor = new fk_Color(0.0, 0.0, 0.0);
            pointModel.PointSize  = 2.0;
            window.Entry(pointModel);

            var line      = new fk_Line();
            var lineModel = new fk_Model();

            lineModel.Shape     = line;
            lineModel.LineColor = new fk_Color(0.0, 0.0, 1.0);
            window.Entry(lineModel);

            posArray[1] = new fk_Vector(0, 10, 0);
            posArray[1].Normalize();
            line.PushLine(posArray[0], posArray[1]);

            var count = 0;

            for (int i = 0; i < 10; i++)
            {
                count += 1;
            }
            Console.WriteLine(count);

            while (window.Update())
            {
                if (window.GetMouseStatus(fk_MouseButton.M1, fk_Switch.DOWN, true))
                {
                    Console.WriteLine("ZeroOne");
                }
            }
        }
예제 #7
0
 public ClusterBullet(CharacterSide side, fk_Vector position, fk_Vector velocity) : base(side, LifeMax, position,
                                                                                         velocity)
 {
     Model = new fk_Model()
     {
         Shape    = new fk_Block(2, 2, 2),
         Material = fk_Material.Red,
         BMode    = fk_BoundaryMode.CAPSULE,
         //BDraw = true,
         BLineColor = fk_Material.Green.Diffuse
     };
     Model.SetCapsule(new fk_Vector(0, 0, 0), new fk_Vector(0, 0, 0.01), 1);
 }
예제 #8
0
        public EnemySphere(fk_Vector position) : base(CharacterSide.Enemy, LifeMax, position)
        {
            Model = new fk_Model()
            {
                Shape      = new fk_Sphere(4, 2.0),
                Material   = fk_Material.Cyan,
                BMode      = fk_BoundaryMode.CAPSULE,
                BDraw      = false,
                BLineColor = fk_Material.Red.Diffuse
            };
            Model.SetCapsule(new fk_Vector(0, 0, 0), new fk_Vector(0, 0, 0.01), 3.5);

            GameInfo.GetInstance().AddEnemySide(this);
        }
예제 #9
0
 public NormalBullet(CharacterSide side, fk_Vector position, fk_Vector velocity, fk_Material material,
                     double scale = 1) : base(side, LifeMax, position,
                                              velocity)
 {
     Model = new fk_Model()
     {
         Shape    = new fk_Block(scale, scale, scale),
         Material = material,
         BMode    = fk_BoundaryMode.CAPSULE,
         //BDraw = true,
         BLineColor = fk_Material.Green.Diffuse
     };
     Model.SetCapsule(new fk_Vector(0, 0, 0), new fk_Vector(0, 0, 0.01), scale);
 }
예제 #10
0
 public PierceBullet(CharacterSide side, fk_Vector position, fk_Vector velocity) : base(side, LifeMax, position,
                                                                                        velocity)
 {
     Model = new fk_Model()
     {
         Shape    = new fk_Block(1, 1, 1),
         Material = fk_Material.DimYellow,
         BMode    = fk_BoundaryMode.CAPSULE,
         //BDraw = true,
         BLineColor = fk_Material.Green.Diffuse
     };
     Model.SetCapsule(new fk_Vector(0, 0, 0), new fk_Vector(0, 0, 0.01), 1);
     Model.GlRotate(Position, fk_Axis.Y, FK.PI / 4.0);
 }
예제 #11
0
        //ブロックの色を設定する
        static void ColorSet(fk_Model colorModel, fk_Color blockColor, fk_Color lineColor, float alpha)
        {
            var      set_color       = new fk_Material();
            fk_Color set_model_color = blockColor;
            fk_Color set_draw_color  = lineColor;

            set_color.Alpha      = alpha;
            set_color.Ambient    = set_model_color;
            set_color.Diffuse    = set_model_color;
            set_color.Emission   = set_model_color;
            set_color.Specular   = set_model_color;
            set_color.Shininess  = 64.0f;
            colorModel.Material  = set_color;
            colorModel.DrawMode  = player.model.DrawMode;
            colorModel.LineColor = set_draw_color;
        }
예제 #12
0
        public MissileMoveParticle(fk_AppWindow argWin, int randSeed)
        {
            Random rand = new Random(randSeed);
            double R, G, B;

            points           = new fk_Polyline();
            pmodel           = new fk_Model();
            pmodel.Shape     = points;
            pmodel.LineWidth = 3.5;
            R = rand.NextDouble();
            G = rand.NextDouble();
            B = rand.NextDouble();

            pmodel.LineColor = new fk_Color(R * (155.0 / 256.0) + (100.0 / 256.0), G * (155.0 / 256.0) + (100.0 / 256.0), B * (155.0 / 256.0) + (100.0 / 256.0));

            argWin.Entry(pmodel);
        }
예제 #13
0
        private void InitializeBackground()
        {
            _backTex = new fk_RectTexture();
            if (!_backTex.ReadJPG("cyback.jpg"))
            {
                Console.WriteLine("Tex Load Error.");
            }

            _graphicSize = (GameInfo.MoveRange + 7) * 2;

            _backTex.TextureSize = new fk_TexCoord(_graphicSize, _graphicSize);

            _backModels = new fk_Model[8];
            for (var i = 0; i < _backModels.Length; i++)
            {
                _backModels[i] = new fk_Model()
                {
                    Shape    = _backTex,
                    Material = fk_Material.White,
                };
            }

            SetModelTransform(_backModels[0], new fk_Vector(0, GameInfo.MoveRange, BackAnchor - _graphicSize),
                              new fk_Vector(0, 1, 0));
            SetModelTransform(_backModels[1], new fk_Vector(0, GameInfo.MoveRange, BackAnchor), new fk_Vector(0, 1, 0));
            SetModelTransform(_backModels[2], new fk_Vector(0, -GameInfo.MoveRange, BackAnchor - _graphicSize),
                              new fk_Vector(0, -1, 0));
            SetModelTransform(_backModels[3], new fk_Vector(0, -GameInfo.MoveRange, BackAnchor),
                              new fk_Vector(0, -1, 0));
            SetModelTransform(_backModels[4], new fk_Vector(GameInfo.MoveRange, 0, BackAnchor - _graphicSize),
                              new fk_Vector(1, 0, 0),
                              new fk_Vector(0, 0, 1));
            SetModelTransform(_backModels[5], new fk_Vector(GameInfo.MoveRange, 0, BackAnchor), new fk_Vector(1, 0, 0),
                              new fk_Vector(0, 0, 1));
            SetModelTransform(_backModels[6], new fk_Vector(-GameInfo.MoveRange, 0, BackAnchor - _graphicSize),
                              new fk_Vector(-1, 0, 0),
                              new fk_Vector(0, 0, 1));
            SetModelTransform(_backModels[7], new fk_Vector(-GameInfo.MoveRange, 0, BackAnchor),
                              new fk_Vector(-1, 0, 0),
                              new fk_Vector(0, 0, 1));

            foreach (var backModel in _backModels)
            {
                MainScene.EntryModel(backModel);
            }
        }
예제 #14
0
        public BossChild(fk_Vector position, Boss parent, fk_Vector relativePosition) : base(CharacterSide.Enemy,
                                                                                             LifeMax, position)
        {
            _parent           = parent;
            _relativePosition = relativePosition;

            Model = new fk_Model()
            {
                Shape      = new fk_Cone(4, 2.0, 4),
                Material   = fk_Material.BambooGreen,
                BMode      = fk_BoundaryMode.CAPSULE,
                BDraw      = false,
                BLineColor = fk_Material.Red.Diffuse
            };
            Model.SetCapsule(new fk_Vector(0, 0, 0), new fk_Vector(0, 0, 0.01), 3);

            GameInfo.GetInstance().AddEnemySide(this);
        }
예제 #15
0
        protected void SetMainLight(fk_Material lightMaterial, fk_Vector direction = null)
        {
            if (MainScene == null)
            {
                return;
            }
            mainLight      = new fk_Light();
            mainLightModel = new fk_Model()
            {
                Shape    = mainLight,
                Material = lightMaterial
            };
            if (direction != null)
            {
                mainLightModel.GlVec(direction);
            }

            MainScene.EntryModel(mainLightModel);
        }
예제 #16
0
        protected void SetStateLight(fk_Material lightMaterial, fk_Vector direction = null)
        {
            if (StateScene == null)
            {
                return;
            }
            stateLight      = new fk_Light();
            stateLightModel = new fk_Model()
            {
                Shape    = mainLight,
                Material = lightMaterial
            };
            if (direction != null)
            {
                stateLightModel.GlVec(direction);
            }

            StateScene.EntryModel(stateLightModel);
        }
예제 #17
0
        public PlayerCharacter(fk_Vector _position, fk_AppWindow appWindow)
        {
            playerModel          = new fk_Model();
            playerModel.Shape    = new fk_Block(20.0, 40.0, 20.0);
            playerModel.Material = fk_Material.Blue;
            playerModel.GlMoveTo(_position);
            playerModel.SmoothMode = true;
            playerModel.BMode      = fk_BoundaryMode.AABB;
            playerModel.AdjustAABB();
            var playerHead = new fk_Model();

            playerHead.Shape    = new fk_Sphere(4, 10);
            playerHead.Material = fk_Material.Blue;
            playerHead.Parent   = playerModel;
            playerHead.GlMoveTo(new fk_Vector(0, 30, 0) + _position);
            var texture = new fk_RectTexture();

            if (texture.ReadPNG("Face.png") == false)
            {
                Console.WriteLine("File Read Error");
            }
            texture.TextureSize = new fk_TexCoord(20.0, 20.0);
            var textureModel = new fk_Model();

            textureModel.Shape    = texture;
            textureModel.Material = fk_Material.White;
            textureModel.Parent   = playerModel;
            textureModel.GlMoveTo(new fk_Vector(0, 70, 0) + _position);
            textureModel.GlAngle(Math.PI, -Math.PI / 2, 0);
            muzzules[0] = new fk_Model();
            muzzules[0].GlMoveTo(new fk_Vector(0, 10, 15) + _position);
            muzzules[0].Parent = playerModel;
            muzzules[1]        = new fk_Model();
            muzzules[1].GlMoveTo(new fk_Vector(-20, 10, 15) + _position);
            muzzules[1].Parent = playerModel;
            muzzules[2]        = new fk_Model();
            muzzules[2].GlMoveTo(new fk_Vector(20, 10, 15) + _position);
            muzzules[2].Parent = playerModel;
            appWindow.Entry(playerModel);
            appWindow.Entry(playerHead);
            appWindow.Entry(textureModel);
        }
예제 #18
0
        public Missile(int randNum)
        {
            liveflag  = true;
            mmodel    = new fk_Model();
            mbody     = new fk_Model();
            mwing     = new fk_Model();
            bodyshape = new fk_Capsule(2, 1.5, 0.5);
            wingshape = new fk_Prism(3, 1.25, 1.25, 0.25);
            rand      = new Random();
            randPos   = new fk_Vector();
            accel     = new fk_Vector();
            velocity  = new fk_Vector();
            position  = new fk_Vector();
            diff      = new fk_Vector();

            //ミサイルの移動パターン決定
            moveMode = randNum;
            if (moveMode < 10)
            {
                moveMode = (int)MoveMode.Line;
            }
            else if (moveMode < 50)
            {
                moveMode = (int)MoveMode.Curve;
            }
            else if (moveMode < 80)
            {
                moveMode = (int)MoveMode.RandCurve;
            }
            else
            {
                moveMode = (int)MoveMode.RandLine;
            }
            //ミサイルの消滅時間
            period = rand.Next(5, 8);
        }
예제 #19
0
        public Boss(fk_Vector position) : base(CharacterSide.Enemy, LifeMax, position)
        {
            _moveRange = GameInfo.MoveRange - 5;

            _childList = new BossChild[ChildrenCount];

            Model = new fk_Model()
            {
                Shape      = new fk_Block(4, 4, 4),
                Material   = fk_Material.Cyan,
                BMode      = fk_BoundaryMode.CAPSULE,
                BDraw      = false,
                BLineColor = fk_Material.Red.Diffuse
            };
            Model.SetCapsule(new fk_Vector(0, 0, 0), new fk_Vector(0, 0, 0.01), 2);

            GameInfo.GetInstance().AddEnemySide(this);

            SetRandomVelocity();

            GenerateNewChild(position);

            _restReviveCount = -1;
        }
예제 #20
0
        static void Main(string[] args)
        {
            Field c_field = new Field();

            c_field.map[0, 0] = 0;

            var fk_win     = new fk_AppWindow();
            var camera     = new fk_Model();
            var light      = new fk_Light();
            var lightmodel = new fk_Model();

            //BGM
            var bgm = new MyBGM("BGM/fullon_demo.ogg");

            /*曲候補
             * Heart_Precaution_bms.ogg
             * Dawn_to_Earth.ogg
             * Icycave.ogg
             * fullon_demo.ogg
             */
            var    bgmTask = new Task(bgm.Start);
            double volume  = 0.5;

            var se     = new MySE(4);
            var seTask = new Task(se.Start);

            se.LoadData(0, "SE/sword1.wav");
            se.LoadData(1, "SE/strange_wave.wav");
            se.LoadData(2, "SE/reflection.wav");
            se.LoadData(3, "SE/light_saber1.wav");


            //マテリアルの初期化
            fk_Material.InitDefault();
            //色
            var black_col          = new fk_Color(0.0, 0.0, 0.0);
            var BG_black_col       = new fk_Color(0.05, 0.05, 0.05);
            var BG_white_col       = new fk_Color(0.85, 0.85, 0.85);
            var white_col          = new fk_Color(1.0, 1.0, 1.0);
            var gray_col           = new fk_Color(0.2, 0.2, 0.2);
            var gray_col_line      = new fk_Color(0.3, 0.3, 0.3);
            var green_col          = new fk_Color(0.0, 0.8, 0.0);
            var blue_col           = new fk_Color(0.0, 0.0, 0.8);
            var yellow_col         = new fk_Color(0.8, 0.8, 0.0);
            var red_col            = new fk_Color(0.8, 0.0, 0.0);
            var purple_col         = new fk_Color(0.8, 0.0, 0.8);
            var model_col_previous = new fk_Color(1.0, 1.0, 1.0);//プレイヤーの色の保存

            //int
            int touch_flag        = 0;
            int change_color      = 1;
            int start_x           = 0;
            int start_z           = 0;
            int change_yuka_count = 0;
            int camera_mode       = 0;

            int[] warp_x        = new int[22];
            int[] warp_z        = new int[22];
            int[] change_yuka_x = new int[22];
            int[] change_yuka_z = new int[22];
            int   warp_num      = 0;
            //double
            double parallel      = 1;
            double move_speed    = FK.PI / 50.0;
            double move_time     = 0.0;
            double move_time_end = 10;
            double move_time_end_count;
            double warp_timing      = 1000;
            double move_warp_x      = 0.0;
            double move_warp_z      = 0.0;
            double warp_camera_x    = 0.0;
            double warp_camera_y    = 0.0;
            double warp_camera_z    = 0.0;
            double move_up          = 1.0;
            double move_count       = 0;
            double warp_speed       = 0;
            double warp_angle_speed = 0;
            double move_spd;
            //bool
            bool debug                  = false;
            bool change_flag            = true;
            bool warp_flag              = false;
            bool warp_move_flag         = false;
            bool frozen                 = false;
            bool change_color_move_flag = false;
            bool change_yuka_flag_black = false;
            bool change_yuka_flag_white = false;
            bool goal_flag              = false;
            bool SE_flag                = false;

            //ウインドウの生成と設定

            fk_win.Size    = new fk_Dimension(800, 600);
            fk_win.BGColor = BG_black_col;

            //プレイヤー設定
            var model = new fk_Model();

            double    player_size = 20.0;
            int       move_x      = 0;
            int       move_z      = 0;
            fk_Vector pos;

            model.Shape = new fk_Block(player_size, player_size, player_size);
            var mat = new fk_Material();



            model.DrawMode  = fk_DrawMode.POLYMODE | fk_DrawMode.LINEMODE;
            model.LineColor = white_col;
            model.LineWidth = 5.0;
            mat.Alpha       = 0.8f;
            mat.Ambient     = black_col;
            mat.Diffuse     = black_col;
            mat.Emission    = black_col;
            mat.Specular    = black_col;
            mat.Shininess   = 64.0f;
            model.Material  = mat;

            //床
            fk_Model[,] yuka = new fk_Model[22, 22];
            fk_Vector yuka_pos;

            //床の配置
            for (int i = 0; i < 22; i++)
            {
                for (int j = 0; j < 22; j++)
                {
                    //無
                    if (c_field.map[i, j] != 0)
                    {
                        yuka[i, j]       = new fk_Model();
                        yuka[i, j].Shape = new fk_Block(player_size, 0.05, player_size);
                        //黒
                        if (c_field.map[i, j] == 1)
                        {
                            yuka[i, j].Material  = fk_Material.MatBlack;
                            yuka[i, j].DrawMode  = model.DrawMode;
                            yuka[i, j].LineColor = gray_col_line;
                        }
                        //白
                        else if (c_field.map[i, j] == 2)
                        {
                            yuka[i, j].Material  = fk_Material.TrueWhite;
                            yuka[i, j].DrawMode  = model.DrawMode;
                            yuka[i, j].LineColor = gray_col_line;
                        }
                        //灰色 チェンジカラー
                        else if (c_field.map[i, j] == 3)
                        {
                            var mat_gray = new fk_Material();
                            mat_gray.Alpha       = 1.0f;
                            mat_gray.Ambient     = gray_col;
                            mat_gray.Diffuse     = gray_col;
                            mat_gray.Emission    = gray_col;
                            mat_gray.Specular    = gray_col;
                            mat_gray.Shininess   = 64.0f;
                            yuka[i, j].Material  = mat_gray;
                            yuka[i, j].DrawMode  = model.DrawMode;
                            yuka[i, j].LineColor = new fk_Color(0.5, 0.5, 0.5);
                        }
                        //赤 ゴール地点
                        else if (c_field.map[i, j] == 4)
                        {
                            var mat_red = new fk_Material();
                            mat_red.Alpha        = 1.0f;
                            mat_red.Ambient      = red_col;
                            mat_red.Diffuse      = red_col;
                            mat_red.Emission     = red_col;
                            mat_red.Specular     = red_col;
                            mat_red.Shininess    = 64.0f;
                            yuka[i, j].Material  = mat_red;
                            yuka[i, j].DrawMode  = model.DrawMode;
                            yuka[i, j].LineColor = new fk_Color(0.5, 0.0, 0.0);
                        }
                        //青 スタート地点
                        else if (c_field.map[i, j] == 5)
                        {
                            var mat_blue = new fk_Material();
                            mat_blue.Alpha       = 1.0f;
                            mat_blue.Ambient     = blue_col;
                            mat_blue.Diffuse     = blue_col;
                            mat_blue.Emission    = blue_col;
                            mat_blue.Specular    = blue_col;
                            mat_blue.Shininess   = 64.0f;
                            yuka[i, j].Material  = mat_blue;
                            yuka[i, j].DrawMode  = model.DrawMode;
                            yuka[i, j].LineColor = new fk_Color(0.0, 0.0, 0.5);
                            start_x = j * 20;
                            start_z = i * 20;
                            move_x  = j;
                            move_z  = i;
                            model.GlMoveTo(j * 20, 0.0, i * 20);
                            fk_win.Entry(model);
                        }
                        //黄色 マップ変更 白
                        else if (c_field.map[i, j] == 6)
                        {
                            var mat_yellow = new fk_Material();
                            mat_yellow.Alpha     = 1.0f;
                            mat_yellow.Ambient   = yellow_col;
                            mat_yellow.Diffuse   = yellow_col;
                            mat_yellow.Emission  = yellow_col;
                            mat_yellow.Specular  = yellow_col;
                            mat_yellow.Shininess = 64.0f;
                            yuka[i, j].Material  = mat_yellow;
                            yuka[i, j].DrawMode  = model.DrawMode;
                            yuka[i, j].LineColor = new fk_Color(0.5, 0.5, 0.0);
                        }

                        //黄色 マップ変更 黒
                        else if (c_field.map[i, j] == 7)
                        {
                            var mat_yellow = new fk_Material();
                            mat_yellow.Alpha     = 1.0f;
                            mat_yellow.Ambient   = yellow_col;
                            mat_yellow.Diffuse   = yellow_col;
                            mat_yellow.Emission  = yellow_col;
                            mat_yellow.Specular  = yellow_col;
                            mat_yellow.Shininess = 64.0f;
                            yuka[i, j].Material  = mat_yellow;
                            yuka[i, j].DrawMode  = model.DrawMode;
                            yuka[i, j].LineColor = new fk_Color(0.5, 0.5, 0.0);
                        }
                        //黒 変更される床
                        else if (c_field.map[i, j] == 8)
                        {
                            yuka[i, j].Material  = fk_Material.MatBlack;
                            yuka[i, j].DrawMode  = model.DrawMode;
                            yuka[i, j].LineColor = gray_col_line;
                            change_yuka_x[0]     = i;
                            change_yuka_z[0]     = j;
                        }
                        //白 変更される床
                        else if (c_field.map[i, j] == 9)
                        {
                            yuka[i, j].Material  = fk_Material.TrueWhite;
                            yuka[i, j].DrawMode  = model.DrawMode;
                            yuka[i, j].LineColor = gray_col_line;
                            change_yuka_x[1]     = i;
                            change_yuka_z[1]     = j;
                        }
                        //緑 ワープ
                        else if (c_field.map[i, j] >= 10)
                        {
                            var mat_green = new fk_Material();
                            mat_green.Alpha      = 1.0f;
                            mat_green.Ambient    = green_col;
                            mat_green.Diffuse    = green_col;
                            mat_green.Emission   = green_col;
                            mat_green.Specular   = green_col;
                            mat_green.Shininess  = 64.0f;
                            yuka[i, j].Material  = mat_green;
                            yuka[i, j].DrawMode  = model.DrawMode;
                            yuka[i, j].LineColor = new fk_Color(0.0, 0.5, 0.0);
                            if (c_field.map[i, j] == 10)
                            {
                                warp_x[10] = 12;
                                warp_z[10] = 10;
                            }
                            else if (c_field.map[i, j] == 11)
                            {
                                warp_x[11] = 9;
                                warp_z[11] = 13;
                            }
                            else if (c_field.map[i, j] == 12)
                            {
                                warp_x[12] = 1;
                                warp_z[12] = 5;
                            }
                            else if (c_field.map[i, j] == 13)
                            {
                                warp_x[13] = 19;
                                warp_z[13] = 20;
                            }
                            else if (c_field.map[i, j] == 14)
                            {
                                yuka[i, j].Material  = fk_Material.MatBlack;
                                yuka[i, j].DrawMode  = model.DrawMode;
                                yuka[i, j].LineColor = gray_col_line;
                                warp_x[14]           = 9;
                                warp_z[14]           = 20;
                            }
                            else if (c_field.map[i, j] == 15)
                            {
                                warp_x[15] = 15;
                                warp_z[15] = 6;
                            }
                        }
                        yuka[i, j].LineWidth = model.LineWidth;
                        yuka_pos             = yuka[i, j].Position;
                        fk_win.Entry(yuka[i, j]);
                        yuka[i, j].GlMoveTo(j * 20.0, -10.0, i * 20.0);
                    }
                }
            }
            //カメラ
            fk_Vector camera_pos;

            fk_win.CameraModel = camera;
            //ウィンドウのサイズを設定
            fk_win.Size = new fk_Dimension(1080, 720);

            //ウィンドウを開く
            fk_win.Open();
            bgmTask.Start();
            seTask.Start();
            //メインループ
            while (fk_win.Update() == true)
            {
                move_time_end_count = move_time_end * 2;
                move_spd            = player_size / move_time_end;
                camera_pos          = camera.Position;
                move_count         += 1;
                pos = model.Position;

                //色変換
                if (c_field.map[move_z, move_x] == 3 && debug == false)
                {
                    if (change_flag == true && move_count == 5)
                    {
                        change_color_move_flag = true;
                        se.StartSE(3);
                    }
                    else
                    {
                        change_flag = true;
                    }

                    if (change_color_move_flag == true)
                    {
                        if (change_color == 1)
                        {
                            model.LineColor = black_col;
                            fk_win.BGColor  = BG_white_col;
                            mat.Alpha       = 0.8f;
                            mat.Ambient     = white_col;
                            mat.Diffuse     = white_col;
                            mat.Emission    = white_col;
                            mat.Specular    = white_col;
                            mat.Shininess   = 64.0f;
                            model.Material  = mat;

                            parallel = -1.5;
                            pos.y   += (-20.0 - pos.y) / 15;
                            model.GlMoveTo(pos.x, pos.y, pos.z);
                            frozen = true;
                            if (pos.y <= -19.5)
                            {
                                pos.y                  = -20.0;
                                change_color           = -1;
                                change_flag            = false;
                                change_color_move_flag = false;
                                frozen                 = false;
                            }
                        }
                        else if (change_color == -1)
                        {
                            fk_win.BGColor  = BG_black_col;
                            model.LineColor = white_col;
                            mat.Alpha       = 0.8f;
                            mat.Ambient     = black_col;
                            mat.Diffuse     = black_col;
                            mat.Emission    = black_col;
                            mat.Specular    = black_col;
                            mat.Shininess   = 64.0f;
                            model.Material  = mat;
                            parallel        = 1;
                            pos.y          += (0 - pos.y) / 15;
                            model.GlMoveTo(pos.x, pos.y, pos.z);
                            frozen = true;
                            if (pos.y >= -0.5)
                            {
                                pos.y                  = 0;
                                change_color           = 1;
                                change_flag            = false;
                                change_color_move_flag = false;
                                frozen                 = false;
                            }
                        }
                        change_flag = false;
                    }
                }
                //ワープ関連
                if (c_field.map[move_z, move_x] >= 10 && debug == false && warp_flag == false)
                {
                    if (move_count == 5)
                    {
                        se.StartSE(1);
                        frozen = true;
                        if (c_field.map[move_z, move_x] == 14)
                        {
                            var mat_purple = new fk_Material();
                            mat_purple.Alpha               = 1.0f;
                            mat_purple.Ambient             = purple_col;
                            mat_purple.Diffuse             = purple_col;
                            mat_purple.Emission            = purple_col;
                            mat_purple.Specular            = purple_col;
                            mat_purple.Shininess           = 64.0f;
                            yuka[move_z, move_x].Material  = mat_purple;
                            yuka[move_z, move_x].DrawMode  = model.DrawMode;
                            yuka[move_z, move_x].LineColor = new fk_Color(0.5, 0.0, 0.5);
                        }
                    }

                    if (frozen == true)
                    {
                        if (warp_move_flag == false)
                        {
                            for (int i = 10; i < 22; i++)
                            {
                                if (c_field.map[move_z, move_x] == i)
                                {
                                    warp_num = i;
                                    break;
                                }
                            }
                            move_warp_x       = pos.x;
                            move_warp_z       = pos.z;
                            warp_speed       += 0.16f * change_color;
                            warp_angle_speed += 0.16f;
                            pos.y            += warp_speed;
                            model.GlMoveTo(pos.x, pos.y, pos.z);
                            model.GlAngle(warp_speed, 0.0, 0.0);
                        }
                        if (pos.y >= warp_timing && change_color == 1)
                        {
                            pos.y            = warp_timing - 15;
                            warp_move_flag   = true;
                            warp_speed       = -warp_speed;
                            warp_angle_speed = -warp_angle_speed;
                        }
                        else if (pos.y <= -warp_timing && change_color == -1)
                        {
                            pos.y            = -warp_timing + 15;
                            warp_move_flag   = true;
                            warp_speed       = -warp_speed;
                            warp_angle_speed = -warp_angle_speed;
                        }
                        if (warp_move_flag == true)
                        {
                            warp_angle_speed += 0.16f * change_color;

                            if (pos.y <= 0 && change_color == 1)
                            {
                                warp_speed = 0;
                                pos.y      = 0;
                                model.GlAngle(0.0, 0.0, 0.0);
                                move_x = warp_x[warp_num];
                                move_z = warp_z[warp_num];
                                model.GlMoveTo(pos.x, pos.y, pos.z);
                                warp_move_flag = false;
                                warp_flag      = true;
                                frozen         = false;
                            }
                            else if (pos.y >= -20 && change_color == -1)
                            {
                                warp_speed = 0;
                                pos.y      = -20;
                                model.GlAngle(0.0, 0.0, 0.0);
                                move_x = warp_x[warp_num];
                                move_z = warp_z[warp_num];
                                model.GlMoveTo(pos.x, pos.y, pos.z);
                                warp_flag      = true;
                                frozen         = false;
                                warp_move_flag = false;
                            }
                            else
                            {
                                warp_speed += 0.16f * change_color;
                                if (move_warp_x != warp_x[warp_num] * 20)
                                {
                                    move_warp_x += (warp_x[warp_num] * 20 - move_warp_x) / 10;
                                }

                                if (move_warp_z != warp_z[warp_num] * 20)
                                {
                                    move_warp_z += (warp_z[warp_num] * 20 - move_warp_z) / 10;
                                }

                                pos.y += warp_speed;
                                model.GlMoveTo(move_warp_x, pos.y, move_warp_z);
                                model.GlAngle(warp_angle_speed, 0.0, 0.0);
                            }
                        }
                    }
                }
                else if (c_field.map[move_z, move_x] < 10)
                {
                    warp_flag = false;
                }

                //マップ変換
                if (c_field.map[move_z, move_x] == 6 && debug == false && move_count == 5)
                {
                    frozen = true;

                    camera_mode            = 3;
                    change_yuka_flag_white = true;
                    c_field.map[change_yuka_x[1], change_yuka_z[1]] = 3;
                }

                if (change_yuka_flag_white == true)
                {
                    change_yuka_count += 1;
                    if (change_yuka_count >= 120 && change_yuka_count < 180)
                    {
                        if (SE_flag == false)
                        {
                            se.StartSE(2);
                            SE_flag = true;
                        }



                        var mat_gray = new fk_Material();
                        mat_gray.Alpha     = 1.0f;
                        mat_gray.Ambient   = gray_col;
                        mat_gray.Diffuse   = gray_col;
                        mat_gray.Emission  = gray_col;
                        mat_gray.Specular  = gray_col;
                        mat_gray.Shininess = 64.0f;
                        yuka[change_yuka_x[1], change_yuka_z[1]].Material  = mat_gray;
                        yuka[change_yuka_x[1], change_yuka_z[1]].DrawMode  = model.DrawMode;
                        yuka[change_yuka_x[1], change_yuka_z[1]].LineColor = new fk_Color(0.5, 0.5, 0.5);
                    }
                    if (change_yuka_count >= 180)
                    {
                        camera_mode            = 0;
                        frozen                 = false;
                        change_yuka_count      = 0;
                        change_yuka_flag_white = false;
                        SE_flag                = false;
                    }
                }


                if (c_field.map[move_z, move_x] == 7 && debug == false && move_count == 5)
                {
                    frozen = true;

                    camera_mode            = 2;
                    change_yuka_flag_black = true;
                    c_field.map[change_yuka_x[0], change_yuka_z[0]] = 16;
                    if (c_field.map[change_yuka_x[0], change_yuka_z[0]] == 16)
                    {
                        warp_x[16] = 9;
                        warp_z[16] = 13;
                    }
                }

                if (change_yuka_flag_black == true)
                {
                    change_yuka_count += 1;
                    if (change_yuka_count >= 120 && change_yuka_count < 180)
                    {
                        if (change_yuka_count <= 121)
                        {
                            se.StartSE(2);
                        }
                        var mat_green = new fk_Material();
                        mat_green.Alpha     = 1.0f;
                        mat_green.Ambient   = green_col;
                        mat_green.Diffuse   = green_col;
                        mat_green.Emission  = green_col;
                        mat_green.Specular  = green_col;
                        mat_green.Shininess = 64.0f;

                        yuka[change_yuka_x[0], change_yuka_z[0]].Material  = mat_green;
                        yuka[change_yuka_x[0], change_yuka_z[0]].DrawMode  = model.DrawMode;
                        yuka[change_yuka_x[0], change_yuka_z[0]].LineColor = new fk_Color(0.0, 0.5, 0.0);
                    }
                    if (change_yuka_count >= 180)
                    {
                        camera_mode            = 0;
                        frozen                 = false;
                        change_yuka_count      = 0;
                        change_yuka_flag_black = false;
                    }
                }

                //ゴール処理
                if (c_field.map[move_z, move_x] == 4 && goal_flag == false && move_count == 5)
                {
                    goal_flag = true;
                }
                if (goal_flag == true)
                {
                    frozen            = true;
                    warp_speed       += 0.32f * change_color;
                    warp_angle_speed += 0.32f;
                    pos.y            += warp_speed;
                    model.GlMoveTo(pos.x, pos.y, pos.z);
                    model.GlAngle(warp_speed, 0.0, 0.0);
                    if (pos.y >= 6000)
                    {
                        goal_flag = false;
                    }
                }

                //移動関連
                if (move_count >= 10 && debug == false && frozen == false && camera_mode == 0)
                {
                    if (fk_win.GetSpecialKeyStatus(fk_SpecialKey.RIGHT, fk_SwitchStatus.PRESS) == true && touch_flag == 0)
                    {
                        if (c_field.map[move_z, move_x + 1] != 0)
                        {
                            if (change_color == 1)
                            {
                                if (c_field.map[move_z, move_x + 1] != 2 && c_field.map[move_z, move_x + 1] != 9)
                                {
                                    move_time  = 0;
                                    touch_flag = 1;
                                    move_x    += 1;
                                }
                            }
                            else if (change_color == -1)
                            {
                                if (c_field.map[move_z, move_x + 1] != 1 && c_field.map[move_z, move_x + 1] != 8)
                                {
                                    move_time  = 0;
                                    touch_flag = 1;
                                    move_x    += 1;
                                }
                            }
                        }
                        else
                        {
                            touch_flag = 0;
                        }
                    }
                    else if (fk_win.GetSpecialKeyStatus(fk_SpecialKey.LEFT, fk_SwitchStatus.PRESS) == true && touch_flag == 0)
                    {
                        if (c_field.map[move_z, move_x - 1] != 0)
                        {
                            if (change_color == 1)
                            {
                                if (c_field.map[move_z, move_x - 1] != 2 && c_field.map[move_z, move_x - 1] != 9)
                                {
                                    move_time  = 0;
                                    touch_flag = 2;
                                    move_x    -= 1;
                                }
                            }
                            else if (change_color == -1)
                            {
                                if (c_field.map[move_z, move_x - 1] != 1 && c_field.map[move_z, move_x - 1] != 8)
                                {
                                    move_time  = 0;
                                    touch_flag = 2;
                                    move_x    -= 1;
                                }
                            }
                        }
                        else
                        {
                            touch_flag = 0;
                        }
                    }
                    else if (fk_win.GetSpecialKeyStatus(fk_SpecialKey.UP, fk_SwitchStatus.PRESS) == true && touch_flag == 0)
                    {
                        if (change_color == 1)
                        {
                            if (c_field.map[move_z - 1, move_x] != 0)
                            {
                                if (c_field.map[move_z - 1, move_x] != 2 && c_field.map[move_z - 1, move_x] != 9)
                                {
                                    move_time  = 0;
                                    touch_flag = 3;
                                    move_z    -= 1;
                                }
                            }
                        }
                        else if (change_color == -1)
                        {
                            if (c_field.map[move_z + 1, move_x] != 0)
                            {
                                if (c_field.map[move_z + 1, move_x] != 1 && c_field.map[move_z + 1, move_x] != 8)
                                {
                                    move_time  = 0;
                                    touch_flag = 3;
                                    move_z    += 1;
                                }
                            }
                        }


                        else
                        {
                            touch_flag = 0;
                        }
                    }
                    else if (fk_win.GetSpecialKeyStatus(fk_SpecialKey.DOWN, fk_SwitchStatus.PRESS) == true && touch_flag == 0)
                    {
                        if (change_color == 1)
                        {
                            if (c_field.map[move_z + 1, move_x] != 0)
                            {
                                if (c_field.map[move_z + 1, move_x] != 2 && c_field.map[move_z + 1, move_x] != 9)
                                {
                                    move_time  = 0;
                                    touch_flag = 4;
                                    move_z    += 1;
                                }
                            }
                        }
                        else if (change_color == -1)
                        {
                            if (c_field.map[move_z - 1, move_x] != 0)
                            {
                                if (c_field.map[move_z - 1, move_x] != 1 && c_field.map[move_z - 1, move_x] != 8)
                                {
                                    move_time  = 0;
                                    touch_flag = 4;
                                    move_z    -= 1;
                                }
                            }
                        }


                        else
                        {
                            touch_flag = 0;
                        }
                    }
                }

                //移動処理

                if (touch_flag == 1)
                {
                    move_time++;
                    if (move_time <= move_time_end)
                    {
                        move_speed = FK.PI / move_time_end_count;
                        model.GlRotateWithVec(pos, fk_Axis.Z, -move_speed * change_color);
                        pos.x += move_spd;

                        if (move_time <= move_time_end / 2)
                        {
                            model.GlMoveTo(pos.x, pos.y + move_up * parallel, pos.z);
                        }
                        else if (move_time > move_time_end / 2)
                        {
                            model.GlMoveTo(pos.x, pos.y - move_up * parallel, pos.z);
                        }
                    }
                    else
                    {
                        se.StartSE(0);
                        move_speed = 0.0;
                        touch_flag = 0;
                        move_spd   = 0;
                        move_count = 0;
                    }
                }

                else if (touch_flag == 2)
                {
                    move_time++;
                    if (move_time <= move_time_end)
                    {
                        move_speed = FK.PI / move_time_end_count;
                        model.GlRotateWithVec(pos, fk_Axis.Z, move_speed * change_color);
                        pos.x -= move_spd;
                        if (move_time <= move_time_end / 2)
                        {
                            model.GlMoveTo(pos.x, pos.y + move_up * parallel, pos.z);
                        }
                        else if (move_time > move_time_end / 2)
                        {
                            model.GlMoveTo(pos.x, pos.y - move_up * parallel, pos.z);
                        }
                    }
                    else
                    {
                        se.StartSE(0);
                        move_speed = 0.0;
                        touch_flag = 0;
                        move_spd   = 0;
                        move_count = 0;
                    }
                }

                else if (touch_flag == 3)
                {
                    move_time++;
                    if (move_time <= move_time_end)
                    {
                        move_speed = FK.PI / move_time_end_count;
                        model.GlRotateWithVec(pos, fk_Axis.X, -move_speed * change_color);
                        if (change_color == 1)
                        {
                            pos.z -= move_spd;
                        }
                        else if (change_color == -1)
                        {
                            pos.z += move_spd;
                        }
                        if (move_time <= move_time_end / 2)
                        {
                            model.GlMoveTo(pos.x, pos.y + move_up * parallel, pos.z);
                        }
                        else if (move_time > move_time_end / 2)
                        {
                            model.GlMoveTo(pos.x, pos.y - move_up * parallel, pos.z);
                        }
                    }
                    else
                    {
                        se.StartSE(0);
                        move_speed = 0.0;
                        touch_flag = 0;
                        move_count = 0;
                    }
                }

                else if (touch_flag == 4)
                {
                    move_time++;
                    if (move_time <= move_time_end)
                    {
                        move_speed = FK.PI / move_time_end_count;
                        model.GlRotateWithVec(pos, fk_Axis.X, move_speed * change_color);
                        if (change_color == 1)
                        {
                            pos.z += move_spd;
                        }
                        if (change_color == -1)
                        {
                            pos.z -= move_spd;
                        }
                        if (move_time <= move_time_end / 2)
                        {
                            model.GlMoveTo(pos.x, pos.y + move_up * parallel, pos.z);
                        }
                        else if (move_time > move_time_end / 2)
                        {
                            model.GlMoveTo(pos.x, pos.y - move_up * parallel, pos.z);
                        }
                    }
                    else
                    {
                        se.StartSE(0);
                        move_speed = 0.0;
                        touch_flag = 0;
                        move_count = 0;
                    }
                }

                //デバック関連
                if ((fk_win.GetKeyStatus('D', fk_SwitchStatus.DOWN) == true))
                {
                    if (debug == false)
                    {
                        debug = true;
                    }
                    else if (debug == true)
                    {
                        debug = false;
                    }
                }
                if (debug == true)
                {
                    if (fk_win.GetSpecialKeyStatus(fk_SpecialKey.RIGHT, fk_SwitchStatus.PRESS) == true && touch_flag == 0)
                    {
                        move_time  = 0;
                        touch_flag = 1;
                        move_x    += 1;
                    }
                    else if (fk_win.GetSpecialKeyStatus(fk_SpecialKey.LEFT, fk_SwitchStatus.PRESS) == true && touch_flag == 0)
                    {
                        move_time  = 0;
                        touch_flag = 2;
                        move_x    -= 1;
                    }
                    else if (fk_win.GetSpecialKeyStatus(fk_SpecialKey.UP, fk_SwitchStatus.PRESS) == true && touch_flag == 0)
                    {
                        move_time  = 0;
                        touch_flag = 3;
                        move_z    -= 1;
                    }
                    else if (fk_win.GetSpecialKeyStatus(fk_SpecialKey.DOWN, fk_SwitchStatus.PRESS) == true && touch_flag == 0)
                    {
                        move_time  = 0;
                        touch_flag = 4;
                        move_z    += 1;
                    }
                }

                if (fk_win.GetSpecialKeyStatus(fk_SpecialKey.ENTER, fk_SwitchStatus.DOWN) == true && touch_flag == 0 && frozen == false)
                {
                    if (camera_mode == 0)
                    {
                        camera_mode        = 1;
                        model_col_previous = model.LineColor;
                        model.LineColor    = new fk_Color(0.8, 0.0, 0.0);
                    }
                    else if (camera_mode == 1)
                    {
                        model.LineColor = model_col_previous;
                        camera_mode     = 0;
                    }
                }
                //カメラ処理
                if (camera_mode == 0)
                {
                    warp_camera_y     += (pos.y + (20.0 * parallel) - warp_camera_y) / 15;
                    fk_win.CameraPos   = new fk_Vector(pos.x, warp_camera_y, pos.z + 150.0);
                    fk_win.CameraFocus = new fk_Vector(pos.x, 20.0 * parallel, 0.0);
                    warp_camera_x      = pos.x;
                    warp_camera_z      = pos.z;
                }
                else if (camera_mode == 1)
                {
                    fk_win.CameraPos = new fk_Vector(((22 * 20) / 2), warp_camera_y, ((22 * 20) / 2));

                    if (change_color == 1)
                    {
                        warp_camera_y += (800 - warp_camera_y) / 15;
                    }
                    else
                    {
                        warp_camera_y -= (800 + warp_camera_y) / 15;
                    }
                    fk_win.CameraFocus = new fk_Vector((22 * 20) / 2, 1.0, (22 * 20) / 2);
                }
                else if (camera_mode == 2)
                {
                    warp_camera_x     += ((change_yuka_x[0] * 20) - warp_camera_x) / 15;
                    warp_camera_y     += (300 - warp_camera_y) / 20;
                    warp_camera_z     += ((change_yuka_z[0] * 20) - warp_camera_z) / 15;
                    fk_win.CameraPos   = new fk_Vector(warp_camera_z, warp_camera_y, warp_camera_x);
                    fk_win.CameraFocus = new fk_Vector(warp_camera_z, 1.0 * change_color * parallel, warp_camera_x);
                }
                else if (camera_mode == 3)//マップ変換
                {
                    warp_camera_x     += ((change_yuka_x[1] * 20) - warp_camera_x) / 15;
                    warp_camera_y     += (300 - warp_camera_y) / 20;
                    warp_camera_z     += ((change_yuka_z[1] * 20) - warp_camera_z) / 15;
                    fk_win.CameraPos   = new fk_Vector(warp_camera_z, warp_camera_y, warp_camera_x);
                    fk_win.CameraFocus = new fk_Vector(warp_camera_z, 1.0 * change_color * parallel, warp_camera_x);
                }

                bgm.Gain = volume;

                if (fk_win.GetKeyStatus('Z', fk_SwitchStatus.DOWN) == true)
                {
                }
                //Task.WaitAll(new[] { bgmTask});
                //  se.EndStatus = true;
            }
        }
예제 #21
0
 static void CameraLookAt(fk_Model lookat, fk_Model camera)
 {
     camera.GlMoveTo(lookat.Position.x, camera.Position.y, lookat.Position.z);
 }
예제 #22
0
        static void Main(string[] args)
        {
            fk_Material.InitDefault();

            // ウィンドウ生成
            var window = new fk_AppWindow();

            window.Size = new fk_Dimension(800, 600);
            var camera = new fk_Model();

            window.CameraModel = camera;
            window.CameraPos   = new fk_Vector(0, 400, -10);
            window.CameraFocus = new fk_Vector(0, 0, 50);
            window.Entry(camera);

            PlayerCharacter  player          = new PlayerCharacter(new fk_Vector(0, 0, 0), window);
            List <Bullet>    fieldBullets    = new List <Bullet>();
            List <Enemy>     fieldEnemys     = new List <Enemy>();
            List <Explosion> fieldExceptions = new List <Explosion>();

            for (int i = 0; i < 30; i += 5)
            {
                for (int j = -300; j < 300; j += 50)
                {
                    Enemy enemy = new Enemy(Enemy.Category.Dash, new fk_Vector(j, 0, i * 20 + 800), window);
                    fieldEnemys.Add(enemy);
                }
            }
            for (int i = 0; i < 4; i++)
            {
                for (int j = -200; j < 200; j += 100)
                {
                    Enemy enemy = new Enemy(Enemy.Category.Patroll, new fk_Vector(j, 0, i * 100 + 200), window);
                    fieldEnemys.Add(enemy);
                }
            }
            for (int i = 0; i < 10; i++)
            {
                Enemy enemy = new Enemy(Enemy.Category.Patroll, new fk_Vector(-200 + i * 40, 0, 1300), window);
                fieldEnemys.Add(enemy);
            }

            List <Item> fieldItems = new List <Item>();
            Item        item       = new Item(Item.Type.diffusion, new fk_Vector(-100, 0, 100), window);

            fieldItems.Add(item);
            Item item1 = new Item(Item.Type.bomb, new fk_Vector(150, 0, 200), window);

            fieldItems.Add(item1);
            Item item2 = new Item(Item.Type.bomb, new fk_Vector(0, 0, 600), window);

            fieldItems.Add(item2);
            Item item3 = new Item(Item.Type.diffusion, new fk_Vector(-50, 0, 800), window);

            fieldItems.Add(item3);
            Item item4 = new Item(Item.Type.diffusion, new fk_Vector(-100, 0, 1200), window);

            fieldItems.Add(item4);
            Item item5 = new Item(Item.Type.bomb, new fk_Vector(100, 0, 1200), window);

            fieldItems.Add(item5);

            var hpText = new fk_SpriteModel();

            if (hpText.InitFont("rm1b.ttf") == false)
            {
                Console.Write("Font Init Error");
            }
            window.Entry(hpText);

            var texture = new fk_RectTexture();

            if (texture.ReadJPG("Stage.jpg") == false)
            {
                Console.WriteLine("File Read Error");
            }
            texture.TextureSize = new fk_TexCoord(400.0, 800.0);
            var stage = new fk_Model();

            stage.Shape    = texture;
            stage.Material = fk_Material.White;
            stage.GlMoveTo(0, 0, 1000);
            stage.GlFocus(camera.Position);
            stage.GlAngle(0, -Math.PI / 2, 0);
            window.Entry(stage);

            var texture0 = new fk_RectTexture();

            if (texture0.ReadPNG("Stage0.png") == false)
            {
                Console.WriteLine("File Read Error");
            }
            texture0.TextureSize = new fk_TexCoord(400.0, 800.0);
            var stage0 = new fk_Model();

            stage0.Shape    = texture0;
            stage0.Material = fk_Material.White;
            stage0.GlMoveTo(0, 0, 200);
            stage0.GlFocus(camera.Position);
            stage0.GlAngle(Math.PI, -Math.PI / 2, 0);
            window.Entry(stage0);

            var texture1 = new fk_RectTexture();

            if (texture1.ReadJPG("goal.jpg") == false)
            {
                Console.WriteLine("File Read Error");
            }
            texture1.TextureSize = new fk_TexCoord(100, 100);
            var goal = new fk_Model();

            goal.Shape    = texture1;
            goal.Material = fk_Material.White;
            goal.GlMoveTo(0, 5, 1350);
            goal.GlAngle(Math.PI, -Math.PI / 2, 0);
            goal.SmoothMode = true;
            goal.BMode      = fk_BoundaryMode.AABB;
            goal.AABB       = new fk_Vector(50, 50, 50);
            window.Entry(goal);

            window.Open();



            while (window.Update())
            {
                if (player.hp <= 0)
                {
                    return;
                }
                if (gameclear == false)
                {
                    player.InputCtrl(window);
                }

                player.Shoot(fieldBullets, window);
                CameraLookAt(player.playerModel, camera);
                BulletCtrl();
                EnemyCtrl();
                ItemCtrl();
                TextCtrl();
                GameClear();
            }

            void BulletCtrl()
            {
                for (int i = 0; i < fieldBullets.Count; i++)
                {
                    fieldBullets[i].Shoot(window);
                }
            }

            void EnemyCtrl()
            {
                for (int i = 0; i < fieldBullets.Count; i++)
                {
                    for (int j = 0; j < fieldEnemys.Count; j++)
                    {
                        fieldEnemys[j].DamageCheck(player, fieldBullets[i], window);
                    }
                }
                for (int i = 0; i < fieldEnemys.Count; i++)
                {
                    fieldEnemys[i].CollideAttack(player, window);
                    fieldEnemys[i].Ability(player);
                }
            }

            void ItemCtrl()
            {
                for (int i = 0; i < fieldItems.Count; i++)
                {
                    fieldItems[i].GetItem(player, window);
                }
            }

            void TextCtrl()
            {
                hpText.DrawText("HP:" + player.hp.ToString() + "     Score" + player.score.ToString(), true);
                hpText.SetPositionLT(-400.0, 300.0);
            }

            void GameClear()
            {
                if (goal.IsInter(player.playerModel) && gameclear == false)
                {
                    gameclear = true;
                    fieldEnemys.Clear();
                    window.Remove(goal);
                    var clearText = new fk_SpriteModel();
                    if (clearText.InitFont("rm1b.ttf") == false)
                    {
                        Console.Write("Font Init Error");
                    }
                    window.Entry(clearText);
                    clearText.DrawText("Game Clear", true);
                    hpText.SetPositionLT(0.0, 0.0);
                }
            }
        }
예제 #23
0
 public Player()
 {
     pmodel = new fk_Model();
     cone   = new fk_Cone(4, 1.5, 3.5);
     Speed  = 0.2;
 }
예제 #24
0
        static void Main(string[] args)
        {
            fk_Material.InitDefault();

            // ウィンドウ生成
            var window = new fk_AppWindow();

            window.Size    = new fk_Dimension(600, 600);
            window.BGColor = new fk_Color(1, 1, 1);
            window.Open();

            var posArray = new fk_Vector[100];
            var point    = new fk_Point();

            for (int i = 0; i < 100; i++)
            {
                posArray[i] = new fk_Vector(fk_Math.DRand(-25.0, 25.0),
                                            fk_Math.DRand(-25.0, 25.0), 0.0);
                point.PushVertex(posArray[i]);
            }

            var pointModel = new fk_Model();

            pointModel.Shape      = point;
            pointModel.PointColor = new fk_Color(0.0, 0.0, 0.0);
            pointModel.PointSize  = 2.0;
            window.Entry(pointModel);

            var debugPoint      = new fk_Point();
            var debugPointModel = new fk_Model();

            debugPointModel.Shape      = debugPoint;
            debugPointModel.PointColor = new fk_Color(1.0, 0.0, 0.0);
            debugPointModel.PointSize  = 3.0;
            window.Entry(debugPointModel);

            var line      = new fk_Line();
            var lineModel = new fk_Model();

            lineModel.Shape     = line;
            lineModel.LineColor = new fk_Color(0.0, 0.0, 1.0);
            window.Entry(lineModel);

            var posList = new List <fk_Vector>();

            posList.AddRange(posArray);
            var    startPos = new fk_Vector();
            double posX     = -9999;

            foreach (fk_Vector pos in posList)
            {
                if (pos.x > posX)
                {
                    posX     = pos.x;
                    startPos = pos;
                }
            }

            var    startPos1 = new fk_Vector();
            double y         = -999;

            foreach (fk_Vector pos in posArray)
            {
                var    vec1    = pos - startPos; vec1.Normalize();
                var    vec2    = new fk_Vector(0, 1, 0); vec2.Normalize();
                double naiseki = vec1 * vec2;
                if (naiseki >= y && pos != startPos)
                {
                    y         = naiseki;
                    startPos1 = pos;
                }
            }
            var newPosList = new List <fk_Vector>();

            newPosList.Add(startPos);
            newPosList.Add(startPos1);


            debugPoint.PushVertex(startPos);

            line.PushLine(startPos, startPos1);

            var startVec = startPos1 - startPos;
            var vecList  = new List <fk_Vector>();

            vecList.Add(startVec);

            for (int i = 2; i < posArray.Length; i++)
            {
                var    nextPos  = new fk_Vector();
                double naiseki0 = -9999;
                foreach (fk_Vector pos in posList)
                {
                    var    vec1    = pos - newPosList[i - 1]; vec1.Normalize();
                    var    vec2    = vecList[i - 2]; vec2.Normalize();
                    double naiseki = vec1 * vec2;
                    if (naiseki > naiseki0)
                    {
                        naiseki0 = naiseki;
                        nextPos  = pos;
                    }
                }

                newPosList.Add(nextPos);
                line.PushLine(newPosList[i - 1], nextPos);
                var vec = nextPos - newPosList[i - 1];
                vecList.Add(vec);
                if (nextPos == startPos)
                {
                    break;
                }
            }

            while (window.Update())
            {
            }
        }
예제 #25
0
        static void Main(string[] args)
        {
            fk_Material.InitDefault();

            // ウィンドウ生成
            var window = new fk_AppWindow();

            window.Size    = new fk_Dimension(600, 600);
            window.BGColor = new fk_Color(1, 1, 1);
            window.Open();

            var posArray = new fk_Vector[100];
            var point    = new fk_Point();

            for (int i = 0; i < 100; i++)
            {
                posArray[i] = new fk_Vector(fk_Math.DRand(-25.0, 25.0),
                                            fk_Math.DRand(-25.0, 25.0), 0.0);
                point.PushVertex(posArray[i]);
            }

            var pointModel = new fk_Model();

            pointModel.Shape      = point;
            pointModel.PointColor = new fk_Color(0.0, 0.0, 0.0);
            pointModel.PointSize  = 2.0;
            window.Entry(pointModel);
            pointModel.ElementMode = fk_ElementMode.ELEMENT;

            var line      = new fk_Line();
            var lineModel = new fk_Model();

            lineModel.Shape     = line;
            lineModel.LineColor = new fk_Color(0.0, 0.0, 1.0);
            window.Entry(lineModel);

            var posList = new List <fk_Vector>();

            posList.AddRange(posArray);
            var    startPos = new fk_Vector();
            double posX     = -9999;

            foreach (fk_Vector pos in posList)
            {
                if (pos.x > posX)
                {
                    posX     = pos.x;
                    startPos = pos;
                }
            }

            var    startPos1 = new fk_Vector();
            double y         = -999;

            foreach (fk_Vector pos in posArray)
            {
                var    vec1    = pos - startPos; vec1.Normalize();
                var    vec2    = new fk_Vector(0, 1, 0); vec2.Normalize();
                double naiseki = vec1 * vec2;
                if (naiseki >= y && pos != startPos)
                {
                    y         = naiseki;
                    startPos1 = pos;
                }
            }
            var newPosList = new List <fk_Vector>();

            newPosList.Add(startPos);
            newPosList.Add(startPos1);
            //posList.Remove(startPos);
            posList.Remove(startPos1);

            line.PushLine(startPos, startPos1);

            var startVec = startPos1 - startPos;
            var vecList  = new List <fk_Vector>();

            vecList.Add(startVec);

            for (int i = 2; i < posArray.Length; i++)
            {
                var    nextPos  = new fk_Vector();
                double naiseki0 = -9999;
                foreach (fk_Vector pos in posList)
                {
                    var    vec1    = pos - newPosList[i - 1]; vec1.Normalize();
                    var    vec2    = vecList[i - 2]; vec2.Normalize();
                    double naiseki = vec1 * vec2;
                    if (naiseki > naiseki0)
                    {
                        naiseki0 = naiseki;
                        nextPos  = pos;
                    }
                }
                posList.Remove(nextPos);
                newPosList.Add(nextPos);
                line.PushLine(newPosList[i - 1], nextPos);
                var vec = nextPos - newPosList[i - 1];
                vecList.Add(vec);
                if (nextPos == startPos)
                {
                    break;
                }
            }

            var clickPos = new fk_Vector();
            var winPos   = new fk_Vector();

            var plane = new fk_Plane();

            plane.SetPosNormal(clickPos, new fk_Vector(0.0, 0.0, 1.0));

            Console.WriteLine(startPos);
            Console.WriteLine(vecList.Count);

            int pointID = 99;

            while (window.Update())
            {
                if (window.GetMouseStatus(fk_MouseButton.M1, fk_Switch.DOWN, true))
                {
                    pointID += 1;
                    winPos   = window.MousePosition;
                    window.GetProjectPosition(winPos.x, winPos.y, plane, clickPos);
                    clickPos = new fk_Vector(clickPos.x, clickPos.y, 0);
                    var count = 0;
                    for (int i = 0; i < vecList.Count; i++)
                    {
                        var vx1 = newPosList[i + 1].x - newPosList[i].x;
                        var vy1 = newPosList[i + 1].y - newPosList[i].y;
                        var vx2 = clickPos.x - newPosList[i].x;
                        var vy2 = clickPos.y - newPosList[i].y;
                        var ans = vx1 * vy2 - vy1 * vx2;
                        Console.WriteLine(ans);
                        if (ans < 0)
                        {
                            count += 1;
                        }
                    }
                    Console.WriteLine(count);
                    if (count > 0)
                    {
                        point.PushVertex(clickPos);
                        point.SetColor(pointID, new fk_Color(1, 0, 0));
                    }
                    else
                    {
                        point.PushVertex(clickPos);
                        point.SetColor(pointID, new fk_Color(0, 1, 0));
                    }
                }
            }
        }
예제 #26
0
        static void Main(string[] args)
        {
            fk_Material.InitDefault();

            // ウィンドウ生成
            var window = new fk_AppWindow();

            window.Size    = new fk_Dimension(600, 600);
            window.BGColor = new fk_Color(1, 1, 1);
            window.Open();

            var triArray = new fk_Vector[3];
            var triPoint = new fk_Point();

            for (int i = 0; i < 3; i++)
            {
                triArray[i] = new fk_Vector(fk_Math.DRand(-25.0, 25.0),
                                            fk_Math.DRand(-25.0, 25.0), 0.0);
                triPoint.PushVertex(triArray[i]);
            }
            var triModel = new fk_Model();

            triModel.Shape      = triPoint;
            triModel.PointColor = new fk_Color(0.0, 0.0, 0.0);
            triModel.PointSize  = 2.0;
            window.Entry(triModel);

            var triLine   = new fk_Line();
            var lineModel = new fk_Model();

            lineModel.Shape     = triLine;
            lineModel.LineColor = new fk_Color(0.0, 0.0, 1.0);
            window.Entry(lineModel);
            for (int i = 0; i < 2; i++)
            {
                triLine.PushLine(triArray[i], triArray[i + 1]);
            }
            triLine.PushLine(triArray[2], triArray[0]);

            var confiLine  = new fk_Line();
            var lineModel1 = new fk_Model();

            lineModel1.Shape     = confiLine;
            lineModel1.LineColor = new fk_Color(0.0, 1.0, 0.0);
            window.Entry(lineModel1);

            var squareList = new List <fk_Vector>();

            for (int i = 0; i < triArray.Length; i++)
            {
                var squarePoint0 = new fk_Vector(triArray[i].x + squareX * 2, triArray[i].y + squareX * 2, 0);
                squareList.Add(squarePoint0);
                var squarePoint1 = new fk_Vector(triArray[i].x - squareX * 2, triArray[i].y + squareX * 2, 0);
                squareList.Add(squarePoint1);
                var squarePoint2 = new fk_Vector(triArray[i].x - squareX * 2, triArray[i].y - squareX * 2, 0);
                squareList.Add(squarePoint2);
                var squarePoint3 = new fk_Vector(triArray[i].x + squareX * 2, triArray[i].y - squareX * 2, 0);
                squareList.Add(squarePoint3);
            }

            var allPosList = new List <fk_Vector>();

            allPosList.AddRange(squareList);
            allPosList.AddRange(triArray);

            var    startPos = new fk_Vector();
            double posX     = -9999;

            foreach (fk_Vector pos in allPosList)
            {
                if (pos.x > posX)
                {
                    posX     = pos.x;
                    startPos = pos;
                }
            }
            var    startPos1 = new fk_Vector();
            double y         = -9999;

            foreach (fk_Vector pos in allPosList)
            {
                var    vec1    = pos - startPos; vec1.Normalize();
                var    vec2    = new fk_Vector(0, 1, 0); vec2.Normalize();
                double naiseki = vec1 * vec2;
                if (naiseki >= y && pos != startPos)
                {
                    y         = naiseki;
                    startPos1 = pos;
                }
            }
            var confiPosList = new List <fk_Vector>();

            confiPosList.Add(startPos);
            confiPosList.Add(startPos1);

            var startVec = startPos1 - startPos;
            var vecList  = new List <fk_Vector>();

            vecList.Add(startVec);

            confiLine.PushLine(startPos, startPos1);
            for (int i = 2; i < allPosList.Count; i++)
            {
                var    nextPos  = new fk_Vector();
                double naiseki0 = -9999;
                foreach (fk_Vector pos in allPosList)
                {
                    var    vec1    = pos - confiPosList[i - 1]; vec1.Normalize();
                    var    vec2    = vecList[i - 2]; vec2.Normalize();
                    double naiseki = vec1 * vec2;
                    if (naiseki > naiseki0)
                    {
                        naiseki0 = naiseki;
                        nextPos  = pos;
                    }
                }
                allPosList.Remove(nextPos);
                confiPosList.Add(nextPos);
                confiLine.PushLine(confiPosList[i - 1], nextPos);
                var vec = nextPos - confiPosList[i - 1];
                vecList.Add(vec);
                if (nextPos == startPos)
                {
                    break;
                }
            }

            while (window.Update())
            {
            }
        }
예제 #27
0
        //床設定
        static void yukaSet(fk_Model[,] yuka, fk_Vector yuka_pos)
        {
            int start_x = 0;
            int start_z = 0;

            for (int i = 0; i < 32; i++)
            {
                for (int j = 0; j < 22; j++)
                {
                    //無
                    if (c_field.map[i, j] != 0)
                    {
                        yuka[i, j]       = new fk_Model();
                        yuka[i, j].Shape = new fk_Block(player.size, 0.05, player.size);
                        //黒
                        if (c_field.map[i, j] == 1)
                        {
                            ColorSet(yuka[i, j], block_color.black_col, block_color.black_white_line_col, 1.0f);
                        }
                        //白
                        else if (c_field.map[i, j] == 2)
                        {
                            ColorSet(yuka[i, j], block_color.white_col, block_color.black_white_line_col, 1.0f);
                        }
                        //灰色 チェンジカラー
                        else if (c_field.map[i, j] == 3)
                        {
                            ColorSet(yuka[i, j], block_color.gray_col, block_color.gray_line_col, 1.0f);
                        }
                        //赤 ゴール地点
                        else if (c_field.map[i, j] == 4)
                        {
                            ColorSet(yuka[i, j], block_color.red_col, block_color.red_line_col, 1.0f);
                        }
                        //青 スタート地点
                        else if (c_field.map[i, j] == 5)
                        {
                            ColorSet(yuka[i, j], block_color.blue_col, block_color.blue_line_col, 1.0f);
                            start_x  = j * 20;
                            start_z  = i * 20;
                            player.x = j;
                            player.z = i;
                            player.model.GlMoveTo(j * 20, 0.0, i * 20);
                            fk_win.Entry(player.model);
                        }
                        //黄色 マップ変更 白
                        else if (c_field.map[i, j] == 6)
                        {
                            ColorSet(yuka[i, j], block_color.yellow_col, block_color.yellow_line_col, 1.0f);
                        }

                        //黄色 マップ変更 黒
                        else if (c_field.map[i, j] == 7)
                        {
                            ColorSet(yuka[i, j], block_color.yellow_col, block_color.yellow_line_col, 1.0f);
                        }
                        //黒 変更される床
                        else if (c_field.map[i, j] == 8)
                        {
                            ColorSet(yuka[i, j], block_color.black_col, block_color.black_white_line_col, 1.0f);
                            change_yuka_x[0] = i;
                            change_yuka_z[0] = j;
                        }
                        //白 変更される床
                        else if (c_field.map[i, j] == 9)
                        {
                            ColorSet(yuka[i, j], block_color.white_col, block_color.black_white_line_col, 1.0f);
                            change_yuka_x[1] = i;
                            change_yuka_z[1] = j;
                        }
                        //緑 ワープ
                        else if (c_field.map[i, j] >= 10)
                        {
                            ColorSet(yuka[i, j], block_color.green_col, block_color.green_line_col, 1.0f);
                            if (c_field.map[i, j] == 10)
                            {
                                warp_x[10] = 12;
                                warp_z[10] = 10;
                            }
                            else if (c_field.map[i, j] == 11)
                            {
                                warp_x[11] = 9;
                                warp_z[11] = 13;
                            }
                            else if (c_field.map[i, j] == 12)
                            {
                                warp_x[12] = 1;
                                warp_z[12] = 5;
                            }
                            else if (c_field.map[i, j] == 13)
                            {
                                warp_x[13] = 19;
                                warp_z[13] = 20;
                            }
                            else if (c_field.map[i, j] == 14)
                            {
                                yuka[i, j].Material  = fk_Material.MatBlack;
                                yuka[i, j].DrawMode  = player.model.DrawMode;
                                yuka[i, j].LineColor = block_color.gray_line_col;
                                warp_x[14]           = 9;
                                warp_z[14]           = 20;
                            }
                            else if (c_field.map[i, j] == 15)
                            {
                                warp_x[15] = 15;
                                warp_z[15] = 6;
                            }
                        }
                        yuka[i, j].LineWidth = player.model.LineWidth;
                        yuka_pos             = yuka[i, j].Position;
                        fk_win.Entry(yuka[i, j]);
                        yuka[i, j].GlMoveTo(j * 20.0, -10.0, i * 20.0);
                    }
                }
            }
        }
예제 #28
0
        static void Main(string[] args)
        {
            fk_Material.InitDefault();
            var window = new fk_AppWindow();

            window.CameraPos   = new fk_Vector(0.0, 10.0, 50.0);
            window.CameraFocus = new fk_Vector(0.0, 0.0, 0.0);
            window.Size        = new fk_Dimension(800, 600);
            window.BGColor     = new fk_Color(0.6, 0.7, 0.8);



            var floor      = new fk_Model();
            var floorshape = new fk_Block(130.0, 2.0, 10.0);

            floor.Shape    = floorshape;
            floor.Material = fk_Material.Brown;
            window.Entry(floor);

            var player = new fk_Model();

            player.SmoothMode = true;
            player.BMode      = fk_BoundaryMode.OBB;
            player.OBB        = new fk_Vector(0.6, 2.6, 0.5);
            player.BDraw      = true;
            window.Entry(player);

            var body      = new fk_Model();
            var bodyShape = new fk_Prism(20, 0.5, 0.5, 2.0);

            body.Shape    = bodyShape;
            body.Parent   = player;
            body.Material = fk_Material.Gray2;
            window.Entry(body);

            var head      = new fk_Model();
            var headShape = new fk_Sphere(10, 0.5);

            head.Shape    = headShape;
            head.Material = fk_Material.White;
            head.GlMoveTo(0.0, 0.0, -2.5);
            head.Parent = body;
            window.Entry(head);


            var tube      = new fk_Model[6];
            var tubeShape = new fk_Prism(20, 1.0, 1.0, 4.5);

            for (int a = 0; a < 4; a++)
            {
                tube[a]          = new fk_Model();
                tube[a].Shape    = tubeShape;
                tube[a].Material = fk_Material.Green;
                tube[a].GlVec(0.0, 1.0, 0.0);

                window.Entry(tube[a]);
            }

            var needle      = new fk_Model[6];
            var needleShape = new fk_Cone(30, 0.5, 3.0);

            for (int b = 0; b < 6; b++)
            {
                needle[b]          = new fk_Model();
                needle[b].Shape    = needleShape;
                needle[b].Material = fk_Material.Red;
                needle[b].GlVec(0.0, 1.0, 0.0);
                needle[b].SmoothMode = true;
                needle[b].BMode      = fk_BoundaryMode.OBB;
                needle[b].AdjustOBB();
                needle[b].BDraw = false;

                window.Entry(needle[b]);
            }

            var enemy      = new fk_Model[9];
            var enemyShape = new fk_Sphere(10, 1.0);

            for (int i = 0; i < 9; i++)
            {
                enemy[i]            = new fk_Model();
                enemy[i].Shape      = enemyShape;
                enemy[i].Material   = fk_Material.Pink;
                enemy[i].SmoothMode = true;
                enemy[i].BMode      = fk_BoundaryMode.OBB;
                enemy[i].AdjustOBB();
                enemy[i].BDraw = false;

                window.Entry(enemy[i]);
            }

            var enemy0 = new fk_Model[3];

            for (int x = 0; x < 3; x++)
            {
                enemy0[x]            = new fk_Model();
                enemy0[x].Shape      = enemyShape;
                enemy0[x].Material   = fk_Material.Purple;
                enemy0[x].SmoothMode = true;
                enemy0[x].BMode      = fk_BoundaryMode.OBB;
                enemy0[x].AdjustOBB();
                enemy0[x].BDraw = false;

                window.Entry(enemy0[x]);
            }

            var enemy1 = new fk_Model[3];

            for (int y = 0; y < 3; y++)
            {
                enemy1[y]            = new fk_Model();
                enemy1[y].Shape      = enemyShape;
                enemy1[y].Material   = fk_Material.Yellow;
                enemy1[y].SmoothMode = true;
                enemy1[y].BMode      = fk_BoundaryMode.OBB;
                enemy1[y].AdjustOBB();
                enemy1[y].BDraw = false;

                window.Entry(enemy1[y]);
            }

            var velocity0  = new fk_Vector(-0.15, 0.2, 0.0);
            var velocity1  = new fk_Vector(-0.1, 0.3, 0.0);
            var velocity2  = new fk_Vector(-0.15, 0.2, 0.0);
            var velocity3  = new fk_Vector(-0.1, 0.3, 0.0);
            var velocity4  = new fk_Vector(-0.5, 0.2, 0.0);
            var velocity5  = new fk_Vector(-0.15, 0.3, 0.0);
            var velocity6  = new fk_Vector(-0.15, 0.3, 0.0);
            var velocity7  = new fk_Vector(-0.5, 0.3, 0.0);
            var velocity8  = new fk_Vector(-0.5, 0.3, 0.0);
            var velocity00 = new fk_Vector(0.25, 0.0, 0.0);
            var velocity10 = new fk_Vector(0.0, -0.3, 0.0);

            var camera = new fk_Model();

            window.CameraModel = camera;
            camera.GlMoveTo(-10.0, 6.0, 50.0);

            var sprite = new fk_SpriteModel();

            if (sprite.InitFont("rm1b.ttf") == false)
            {
                Console.WriteLine("Font Init Error");
            }
            window.Entry(sprite);

            var gate      = new fk_Model();
            var gateshape = new fk_Block(1.5, 3.0, 0.0);

            gate.Shape    = gateshape;
            gate.Material = fk_Material.Cream;
            window.Entry(gate);

            var goal = new fk_Model();

            goal.Shape    = gateshape;
            goal.Material = fk_Material.Blue;
            window.Entry(goal);

            floor.GlMoveTo(25.0, -1.0, 0.0);
            goal.GlMoveTo(86.0, 1.5, 0.0);
            player.GlMoveTo(-20.0, 0.0, 0.0);
            body.GlVec(0.0, 1.0, 0.0);
            gate.GlMoveTo(-20.0, 1.5, 0.0);

            enemy[0].GlMoveTo(30, 0.5, 0.0);
            enemy[1].GlMoveTo(80, 0.5, 0.0);
            enemy[2].GlMoveTo(130, 0.5, 0.0);
            enemy[3].GlMoveTo(140, 0.5, 0.0);
            enemy[4].GlMoveTo(160, 0.5, 0.0);
            enemy[5].GlMoveTo(190, 0.5, 0.0);
            enemy[6].GlMoveTo(200, 0.5, 0.0);
            enemy[7].GlMoveTo(280, 0.5, 0.0);
            enemy[8].GlMoveTo(340, 0.5, 0.0);

            tube[0].GlMoveTo(20.0, 0.0, -2.0);
            tube[1].GlMoveTo(40.0, 0.0, -2.0);
            tube[2].GlMoveTo(60.0, 0.0, -2.0);
            tube[3].GlMoveTo(80.0, 0.0, -2.0);

            enemy0[0].GlMoveTo(-50, 0.5, 0.0);
            enemy0[1].GlMoveTo(-100, 0.5, 0.0);
            enemy0[2].GlMoveTo(-150, 0.5, 0.0);

            enemy1[0].GlMoveTo(45, 26.0, 0.0);
            enemy1[1].GlMoveTo(60, 26.0, 0.0);
            enemy1[2].GlMoveTo(70, 26.0, 0.0);

            needle[0].GlMoveTo(-10, 0.0, 0.0);
            needle[1].GlMoveTo(5, 0.0, 0.0);
            needle[2].GlMoveTo(25, 0.0, 0.0);
            needle[3].GlMoveTo(50, 0.0, 0.0);
            needle[4].GlMoveTo(70, 0.0, 0.0);
            needle[5].GlMoveTo(73, 0.0, 0.0);



            var velocity = new fk_Vector(0.0, 0.2, 0.0);

            var bgm = new GP_BGM("Shissou.ogg");

            bgm.Gain = 0.5;
            var se = new GP_SE(1);

            se.LoadData(0, "MIDTOM2.wav");

            window.Open();
            bgm.Start();
            se.Start();

            int life = 3;

            bool oldCrash0 = false;
            bool nowCrash0 = false;
            bool oldCrash1 = false;
            bool nowCrash1 = false;
            bool oldCrash2 = false;
            bool nowCrash2 = false;
            bool oldCrash3 = false;
            bool nowCrash3 = false;
            bool oldCrash4 = false;
            bool nowCrash4 = false;
            bool oldCrash5 = false;
            bool nowCrash5 = false;
            bool oldCrash6 = false;
            bool nowCrash6 = false;
            bool oldCrash7 = false;
            bool nowCrash7 = false;
            bool oldCrash8 = false;
            bool nowCrash8 = false;

            bool oldCrash00 = false;
            bool nowCrash00 = false;
            bool oldCrash01 = false;
            bool nowCrash01 = false;
            bool oldCrash02 = false;
            bool nowCrash02 = false;

            bool oldCrashN0 = false;
            bool nowCrashN0 = false;
            bool oldCrashN1 = false;
            bool nowCrashN1 = false;
            bool oldCrashN2 = false;
            bool nowCrashN2 = false;
            bool oldCrashN3 = false;
            bool nowCrashN3 = false;
            bool oldCrashN4 = false;
            bool nowCrashN4 = false;
            bool oldCrashN5 = false;
            bool nowCrashN5 = false;

            bool oldCrash11 = false;
            bool nowCrash11 = false;
            bool oldCrash12 = false;
            bool nowCrash12 = false;
            bool oldCrash10 = false;
            bool nowCrash10 = false;

            while (window.Update() == true)
            {
                string str = "残りライフ       " + life.ToString();
                sprite.DrawText(str, true);
                sprite.SetPositionLT(-400.0, 300.0);

                if (life == 0)
                {
                    player.GlMoveTo(-20.0, 0.0, 0.0);
                    camera.GlMoveTo(-10.0, 6.0, 50.0);
                    enemy[0].GlMoveTo(30, 0.5, 0.0);
                    enemy[1].GlMoveTo(80, 0.5, 0.0);
                    enemy[2].GlMoveTo(130, 0.5, 0.0);
                    enemy[3].GlMoveTo(140, 0.5, 0.0);
                    enemy[4].GlMoveTo(160, 0.5, 0.0);
                    enemy[5].GlMoveTo(190, 0.5, 0.0);
                    enemy[6].GlMoveTo(200, 0.5, 0.0);
                    enemy[7].GlMoveTo(280, 0.5, 0.0);
                    enemy[8].GlMoveTo(340, 0.5, 0.0);
                    enemy0[0].GlMoveTo(-50, 0.5, 0.0);
                    enemy0[1].GlMoveTo(-100, 0.5, 0.0);
                    enemy0[2].GlMoveTo(-150, 0.5, 0.0);
                    enemy1[0].GlMoveTo(45, 26.0, 0.0);
                    enemy1[1].GlMoveTo(60, 26.0, 0.0);
                    enemy1[2].GlMoveTo(70, 26.0, 0.0);
                    life += 2;
                }

                var pos = player.Position;
                if (pos.x < 86.0)
                {
                    if (-20.0 < pos.x)
                    {
                        if (pos.y > 0.0)
                        {
                            velocity.y -= 0.003;
                        }
                        else
                        {
                            velocity.y = 0.0;
                            if (window.GetKeyStatus(' ', fk_SwitchStatus.PRESS) == true)
                            {
                                velocity.y = 0.2;
                            }
                        }
                        if (window.GetSpecialKeyStatus(fk_SpecialKey.LEFT, fk_SwitchStatus.PRESS) == true)
                        {
                            player.LoTranslate(-0.07, 0.0, 0.0);
                            camera.LoTranslate(-0.07, 0.0, 0.0);
                        }
                        if (window.GetSpecialKeyStatus(fk_SpecialKey.RIGHT, fk_SwitchStatus.PRESS) == true)
                        {
                            player.LoTranslate(0.07, 0.0, 0.0);
                            camera.LoTranslate(0.07, 0.0, 0.0);
                        }
                    }
                    else if (-20.0 >= pos.x)
                    {
                        if (pos.y > 0.0)
                        {
                            velocity.y -= 0.003;
                        }
                        else
                        {
                            velocity.y = 0.0;
                            if (window.GetKeyStatus(' ', fk_SwitchStatus.PRESS) == true)
                            {
                                velocity.y = 0.2;
                            }
                            if (window.GetSpecialKeyStatus(fk_SpecialKey.RIGHT, fk_SwitchStatus.PRESS) == true)
                            {
                                player.LoTranslate(0.1, 0.0, 0.0);
                                camera.LoTranslate(0.1, 0.0, 0.0);
                            }
                        }
                    }
                    player.GlTranslate(velocity);
                }
                else
                {
                    player.GlMoveTo(86.0, 0.0, 0.0);
                }

                if (pos.x >= 40.0)
                {
                    enemy1[0].GlTranslate(velocity10);
                }

                nowCrash10 = player.IsInter(enemy1[0]);
                if (nowCrash10 == true && oldCrash10 == false)
                {
                    life -= 1;
                }
                oldCrash10 = nowCrash10;

                if (pos.x >= 55.0)
                {
                    enemy1[1].GlTranslate(velocity10);
                }
                nowCrash11 = player.IsInter(enemy1[1]);
                if (nowCrash11 == true && oldCrash11 == false)
                {
                    se.StartSE(0);
                    life -= 1;
                }
                oldCrash11 = nowCrash11;

                if (pos.x >= 65.0)
                {
                    enemy1[2].GlTranslate(velocity10);
                }
                nowCrash12 = player.IsInter(enemy1[2]);
                if (nowCrash12 == true && oldCrash12 == false)
                {
                    se.StartSE(0);
                    life -= 1;
                }
                oldCrash12 = nowCrash12;



                var pos0 = enemy[0].Position;

                if (pos0.y > 0.0)
                {
                    velocity0.y -= 0.003;
                }
                else
                {
                    velocity0.y = 0.3;
                }


                enemy[0].GlTranslate(velocity0);


                nowCrash0 = player.IsInter(enemy[0]);
                if (nowCrash0 == true && oldCrash0 == false)
                {
                    se.StartSE(0);
                    life -= 1;
                }
                oldCrash0 = nowCrash0;

                var pos1 = enemy[1].Position;
                if (pos1.y > 0.0)
                {
                    velocity1.y -= 0.003;
                }
                else
                {
                    velocity1.y = 0.3;
                }
                enemy[1].GlTranslate(velocity1);

                nowCrash1 = player.IsInter(enemy[1]);
                if (nowCrash1 == true && oldCrash1 == false)
                {
                    se.StartSE(0);
                    life -= 1;
                }
                oldCrash1 = nowCrash1;

                var pos2 = enemy[2].Position;
                if (pos2.y > 0.0)
                {
                    velocity2.y -= 0.003;
                }
                else
                {
                    velocity2.y = 0.3;
                }
                enemy[2].GlTranslate(velocity2);

                nowCrash2 = player.IsInter(enemy[2]);
                if (nowCrash2 == true && oldCrash2 == false)
                {
                    se.StartSE(0);
                    life -= 1;
                }
                oldCrash2 = nowCrash2;

                var pos3 = enemy[3].Position;
                if (pos3.y > 0.0)
                {
                    velocity3.y -= 0.003;
                }
                else
                {
                    velocity3.y = 0.3;
                }
                enemy[3].GlTranslate(velocity3);

                nowCrash3 = player.IsInter(enemy[3]);
                if (nowCrash3 == true && oldCrash3 == false)
                {
                    se.StartSE(0);
                    life -= 1;
                }
                oldCrash3 = nowCrash3;

                var pos4 = enemy[4].Position;
                if (pos4.y > 0.0)
                {
                    velocity4.y -= 0.003;
                }
                else
                {
                    velocity4.y = 0.3;
                }
                enemy[4].GlTranslate(velocity4);

                nowCrash4 = player.IsInter(enemy[4]);
                if (nowCrash4 == true && oldCrash4 == false)
                {
                    life -= 1;
                }
                oldCrash4 = nowCrash4;

                var pos5 = enemy[5].Position;
                if (pos5.y > 0.0)
                {
                    velocity5.y -= 0.003;
                }
                else
                {
                    velocity5.y = 0.3;
                }
                enemy[5].GlTranslate(velocity5);

                nowCrash5 = player.IsInter(enemy[5]);
                if (nowCrash5 == true && oldCrash5 == false)
                {
                    se.StartSE(0);
                    life -= 1;
                }
                oldCrash5 = nowCrash5;

                var pos6 = enemy[6].Position;
                if (pos6.y > 0.0)
                {
                    velocity6.y -= 0.003;
                }
                else
                {
                    velocity6.y = 0.3;
                }
                enemy[6].GlTranslate(velocity6);

                nowCrash6 = player.IsInter(enemy[6]);
                if (nowCrash6 == true && oldCrash6 == false)
                {
                    se.StartSE(0);
                    life -= 1;
                }
                oldCrash6 = nowCrash6;

                var pos7 = enemy[7].Position;
                if (pos7.y > 0.0)
                {
                    velocity7.y -= 0.003;
                }
                else
                {
                    velocity7.y = 0.3;
                }
                enemy[7].GlTranslate(velocity7);

                nowCrash7 = player.IsInter(enemy[7]);
                if (nowCrash7 == true && oldCrash7 == false)
                {
                    se.StartSE(0);
                    life -= 1;
                }
                oldCrash7 = nowCrash7;

                var pos8 = enemy[8].Position;
                if (pos8.y > 0.0)
                {
                    velocity8.y -= 0.003;
                }
                else
                {
                    velocity8.y = 0.3;
                }
                enemy[8].GlTranslate(velocity8);

                nowCrash8 = player.IsInter(enemy[8]);
                if (nowCrash8 == true && oldCrash8 == false)
                {
                    se.StartSE(0);
                    life -= 1;
                }
                oldCrash8 = nowCrash8;

                var pos00 = enemy0[0].Position;
                enemy0[0].GlTranslate(velocity00);

                nowCrash00 = player.IsInter(enemy0[0]);
                if (nowCrash00 == true && oldCrash00 == false)
                {
                    se.StartSE(0);
                    life -= 1;
                }
                oldCrash00 = nowCrash00;

                var pos01 = enemy0[1].Position;
                enemy0[1].GlTranslate(velocity00);

                nowCrash01 = player.IsInter(enemy0[1]);
                if (nowCrash01 == true && oldCrash01 == false)
                {
                    se.StartSE(0);
                    life -= 1;
                }
                oldCrash01 = nowCrash01;

                var pos02 = enemy0[2].Position;
                enemy0[2].GlTranslate(velocity00);

                nowCrash02 = player.IsInter(enemy0[2]);
                if (nowCrash02 == true && oldCrash02 == false)
                {
                    se.StartSE(0);
                    life -= 1;
                }
                oldCrash02 = nowCrash02;

                nowCrashN0 = player.IsInter(needle[0]);
                if (nowCrashN0 == true && oldCrashN0 == false)
                {
                    se.StartSE(0);
                    life -= 1;
                }
                oldCrashN0 = nowCrashN0;

                nowCrashN1 = player.IsInter(needle[1]);
                if (nowCrashN1 == true && oldCrashN1 == false)
                {
                    se.StartSE(0);
                    life -= 1;
                }
                oldCrashN1 = nowCrashN1;

                nowCrashN2 = player.IsInter(needle[2]);
                if (nowCrashN2 == true && oldCrashN2 == false)
                {
                    se.StartSE(0);
                    life -= 1;
                }
                oldCrashN2 = nowCrashN2;

                nowCrashN3 = player.IsInter(needle[3]);
                if (nowCrashN3 == true && oldCrashN3 == false)
                {
                    se.StartSE(0);
                    life -= 1;
                }
                oldCrashN3 = nowCrashN3;

                nowCrashN4 = player.IsInter(needle[4]);
                if (nowCrashN4 == true && oldCrashN4 == false)
                {
                    se.StartSE(0);
                    life -= 1;
                }
                oldCrashN4 = nowCrashN4;

                nowCrashN5 = player.IsInter(needle[5]);
                if (nowCrashN5 == true && oldCrashN5 == false)
                {
                    se.StartSE(0);
                    life -= 1;
                }
                oldCrashN5 = nowCrashN5;
            }


            bgm.StopStatus = true;
            se.StopStatus  = true;
        }
예제 #29
0
        static void Main(string[] args)
        {
            c_field.map[0, 0] = 0;
            //BGM
            var    bgm     = new MyBGM("BGM/fullon_demo.ogg");
            var    bgmTask = new Task(bgm.Start);
            double volume  = 0.5;
            //SE
            var se     = new MySE(4);
            var seTask = new Task(se.Start);

            se.LoadData(0, "SE/sword1.wav");
            se.LoadData(1, "SE/strange_wave.wav");
            se.LoadData(2, "SE/reflection.wav");
            se.LoadData(3, "SE/light_saber1.wav");


            //マテリアルの初期化
            fk_Material.InitDefault();

            //ウインドウの生成と設定

            fk_win.Size    = new fk_Dimension(480, 270);
            fk_win.BGColor = block_color.BG_black_col;

            //床
            fk_Model[,] yuka = new fk_Model[32, 22];
            fk_Vector yuka_pos = new fk_Vector(0.0, 0.0, 0.0);

            //床の配置
            yukaSet(yuka, yuka_pos);
            //カメラ
            fk_Vector camera_pos;

            fk_win.CameraModel = camera;
            //ウィンドウのサイズを設定
            fk_win.Size = new fk_Dimension(800, 600);

            //fk_win.Size = new fk_Dimension(480, 270);
            //ウィンドウを開く
            fk_win.Open();
            bgmTask.Start();
            seTask.Start();
            //メインループ
            while (fk_win.Update() == true)
            {
                move_time_end_count = move_time_end * 2;
                move_spd            = player.size / move_time_end;
                camera_pos          = camera.Position;
                move_count         += 1;
                player.pos          = player.model.Position;
                fk_win.BGColor      = BGColor;
                //色変換
                if (c_field.map[player.z, player.x] == 3 && debug == false)
                {
                    if (change_flag == true && move_count == 5)
                    {
                        change_color_move_flag = true;
                        se.StartSE(3);
                    }
                    else
                    {
                        change_flag = true;
                    }

                    if (change_color_move_flag == true)
                    {
                        changePlayerColor();
                        change_flag = false;
                    }
                }
                //ワープ関連
                if (c_field.map[player.z, player.x] >= 10 && debug == false && warp_flag == false)
                {
                    if (move_count == 5)
                    {
                        se.StartSE(1);
                        frozen = true;
                        if (c_field.map[player.z, player.x] == 14)
                        {
                            ColorSet(yuka[player.z, player.x], block_color.purple_col, new fk_Color(0.5, 0.0, 0.5), 1.0f);
                        }
                    }

                    if (frozen == true)
                    {
                        playerWarp();
                    }
                }
                else if (c_field.map[player.z, player.x] < 10)
                {
                    warp_flag = false;
                }

                //マップ変換
                if (c_field.map[player.z, player.x] == 6 && debug == false && move_count == 5)
                {
                    frozen = true;

                    camera_mode            = 3;
                    change_yuka_flag_white = true;
                    c_field.map[change_yuka_x[1], change_yuka_z[1]] = 3;
                }

                if (change_yuka_flag_white == true)
                {
                    change_yuka_count += 1;
                    if (change_yuka_count >= 120 && change_yuka_count < 180)
                    {
                        if (SE_flag == false)
                        {
                            se.StartSE(2);
                            SE_flag = true;
                        }

                        var mat_gray = new fk_Material();
                        mat_gray.Alpha     = 1.0f;
                        mat_gray.Ambient   = block_color.gray_col;
                        mat_gray.Diffuse   = block_color.gray_col;
                        mat_gray.Emission  = block_color.gray_col;
                        mat_gray.Specular  = block_color.gray_col;
                        mat_gray.Shininess = 64.0f;
                        yuka[change_yuka_x[1], change_yuka_z[1]].Material  = mat_gray;
                        yuka[change_yuka_x[1], change_yuka_z[1]].DrawMode  = player.model.DrawMode;
                        yuka[change_yuka_x[1], change_yuka_z[1]].LineColor = new fk_Color(0.5, 0.5, 0.5);
                    }
                    if (change_yuka_count >= 180)
                    {
                        camera_mode            = 0;
                        frozen                 = false;
                        change_yuka_count      = 0;
                        change_yuka_flag_white = false;
                        SE_flag                = false;
                    }
                }


                if (c_field.map[player.z, player.x] == 7 && debug == false && move_count == 5)
                {
                    frozen = true;

                    camera_mode            = 2;
                    change_yuka_flag_black = true;
                    c_field.map[change_yuka_x[0], change_yuka_z[0]] = 16;
                    if (c_field.map[change_yuka_x[0], change_yuka_z[0]] == 16)
                    {
                        warp_x[16] = 9;
                        warp_z[16] = 13;
                    }
                }

                if (change_yuka_flag_black == true)
                {
                    change_yuka_count += 1;
                    if (change_yuka_count >= 120 && change_yuka_count < 180)
                    {
                        if (change_yuka_count <= 121)
                        {
                            se.StartSE(2);
                        }
                        var mat_green = new fk_Material();
                        mat_green.Alpha     = 1.0f;
                        mat_green.Ambient   = block_color.green_col;
                        mat_green.Diffuse   = block_color.green_col;
                        mat_green.Emission  = block_color.green_col;
                        mat_green.Specular  = block_color.green_col;
                        mat_green.Shininess = 64.0f;

                        yuka[change_yuka_x[0], change_yuka_z[0]].Material  = mat_green;
                        yuka[change_yuka_x[0], change_yuka_z[0]].DrawMode  = player.model.DrawMode;
                        yuka[change_yuka_x[0], change_yuka_z[0]].LineColor = new fk_Color(0.0, 0.5, 0.0);
                    }
                    if (change_yuka_count >= 180)
                    {
                        camera_mode            = 0;
                        frozen                 = false;
                        change_yuka_count      = 0;
                        change_yuka_flag_black = false;
                    }
                }

                //ゴール処理
                if (c_field.map[player.z, player.x] == 4 && goal_flag == false && move_count == 5)
                {
                    goal_flag = true;
                }
                if (goal_flag == true)
                {
                    frozen            = true;
                    warp_speed       += 0.32f * change_color;
                    warp_angle_speed += 0.32f;
                    player.pos.y     += warp_speed;
                    player.model.GlMoveTo(player.pos.x, player.pos.y, player.pos.z);
                    player.model.GlAngle(warp_speed, 0.0, 0.0);
                }

                //移動関連
                if (start_flag == true)
                {
                    if (move_count >= 10 && debug == false && frozen == false && camera_mode == 0)
                    {
                        if (fk_win.GetSpecialKeyStatus(fk_SpecialKey.RIGHT, fk_SwitchStatus.PRESS) == true && touch_flag == 0)
                        {
                            if (c_field.map[player.z, player.x + 1] != 0)
                            {
                                if (change_color == 1)
                                {
                                    if (c_field.map[player.z, player.x + 1] != 2 && c_field.map[player.z, player.x + 1] != 9)
                                    {
                                        move_time  = 0;
                                        touch_flag = 1;
                                        player.x  += 1;
                                    }
                                }
                                else if (change_color == -1)
                                {
                                    if (c_field.map[player.z, player.x + 1] != 1 && c_field.map[player.z, player.x + 1] != 8)
                                    {
                                        move_time  = 0;
                                        touch_flag = 1;
                                        player.x  += 1;
                                    }
                                }
                            }
                            else
                            {
                                touch_flag = 0;
                            }
                        }
                        else if (fk_win.GetSpecialKeyStatus(fk_SpecialKey.LEFT, fk_SwitchStatus.PRESS) == true && touch_flag == 0)
                        {
                            if (c_field.map[player.z, player.x - 1] != 0)
                            {
                                if (change_color == 1)
                                {
                                    if (c_field.map[player.z, player.x - 1] != 2 && c_field.map[player.z, player.x - 1] != 9)
                                    {
                                        move_time  = 0;
                                        touch_flag = 2;
                                        player.x  -= 1;
                                    }
                                }
                                else if (change_color == -1)
                                {
                                    if (c_field.map[player.z, player.x - 1] != 1 && c_field.map[player.z, player.x - 1] != 8)
                                    {
                                        move_time  = 0;
                                        touch_flag = 2;
                                        player.x  -= 1;
                                    }
                                }
                            }
                            else
                            {
                                touch_flag = 0;
                            }
                        }
                        else if (fk_win.GetSpecialKeyStatus(fk_SpecialKey.UP, fk_SwitchStatus.PRESS) == true && touch_flag == 0)
                        {
                            if (change_color == 1)
                            {
                                if (c_field.map[player.z - 1, player.x] != 0)
                                {
                                    if (c_field.map[player.z - 1, player.x] != 2 && c_field.map[player.z - 1, player.x] != 9)
                                    {
                                        move_time  = 0;
                                        touch_flag = 3;
                                        player.z  -= 1;
                                    }
                                }
                            }
                            else if (change_color == -1)
                            {
                                if (c_field.map[player.z + 1, player.x] != 0)
                                {
                                    if (c_field.map[player.z + 1, player.x] != 1 && c_field.map[player.z + 1, player.x] != 8)
                                    {
                                        move_time  = 0;
                                        touch_flag = 3;
                                        player.z  += 1;
                                    }
                                }
                            }


                            else
                            {
                                touch_flag = 0;
                            }
                        }
                        else if (fk_win.GetSpecialKeyStatus(fk_SpecialKey.DOWN, fk_SwitchStatus.PRESS) == true && touch_flag == 0)
                        {
                            if (change_color == 1)
                            {
                                if (c_field.map[player.z + 1, player.x] != 0)
                                {
                                    if (c_field.map[player.z + 1, player.x] != 2 && c_field.map[player.z + 1, player.x] != 9)
                                    {
                                        move_time  = 0;
                                        touch_flag = 4;
                                        player.z  += 1;
                                    }
                                }
                            }
                            else if (change_color == -1)
                            {
                                if (c_field.map[player.z - 1, player.x] != 0)
                                {
                                    if (c_field.map[player.z - 1, player.x] != 1 && c_field.map[player.z - 1, player.x] != 8)
                                    {
                                        move_time  = 0;
                                        touch_flag = 4;
                                        player.z  -= 1;
                                    }
                                }
                            }


                            else
                            {
                                touch_flag = 0;
                            }
                        }
                    }

                    //移動処理

                    if (touch_flag == 1)
                    {
                        move_time++;
                        if (move_time <= move_time_end)
                        {
                            move_speed = FK.PI / move_time_end_count;
                            player.model.GlRotateWithVec(player.pos, fk_Axis.Z, -move_speed * change_color);
                            player.pos.x += move_spd;

                            if (move_time <= move_time_end / 2)
                            {
                                player.model.GlMoveTo(player.pos.x, player.pos.y + move_up * parallel, player.pos.z);
                            }
                            else if (move_time > move_time_end / 2)
                            {
                                player.model.GlMoveTo(player.pos.x, player.pos.y - move_up * parallel, player.pos.z);
                            }
                        }
                        else
                        {
                            se.StartSE(0);
                            move_speed = 0.0;
                            touch_flag = 0;
                            move_spd   = 0;
                            move_count = 0;
                        }
                    }

                    else if (touch_flag == 2)
                    {
                        move_time++;
                        if (move_time <= move_time_end)
                        {
                            move_speed = FK.PI / move_time_end_count;
                            player.model.GlRotateWithVec(player.pos, fk_Axis.Z, move_speed * change_color);
                            player.pos.x -= move_spd;
                            if (move_time <= move_time_end / 2)
                            {
                                player.model.GlMoveTo(player.pos.x, player.pos.y + move_up * parallel, player.pos.z);
                            }
                            else if (move_time > move_time_end / 2)
                            {
                                player.model.GlMoveTo(player.pos.x, player.pos.y - move_up * parallel, player.pos.z);
                            }
                        }
                        else
                        {
                            se.StartSE(0);
                            move_speed = 0.0;
                            touch_flag = 0;
                            move_spd   = 0;
                            move_count = 0;
                        }
                    }

                    else if (touch_flag == 3)
                    {
                        move_time++;
                        if (move_time <= move_time_end)
                        {
                            move_speed = FK.PI / move_time_end_count;
                            player.model.GlRotateWithVec(player.pos, fk_Axis.X, -move_speed);
                            if (change_color == 1)
                            {
                                player.pos.z -= move_spd;
                            }
                            else if (change_color == -1)
                            {
                                player.pos.z += move_spd;
                            }
                            if (move_time <= move_time_end / 2)
                            {
                                player.model.GlMoveTo(player.pos.x, player.pos.y + move_up * parallel, player.pos.z);
                            }
                            else if (move_time > move_time_end / 2)
                            {
                                player.model.GlMoveTo(player.pos.x, player.pos.y - move_up * parallel, player.pos.z);
                            }
                        }
                        else
                        {
                            se.StartSE(0);
                            move_speed = 0.0;
                            touch_flag = 0;
                            move_count = 0;
                        }
                    }

                    else if (touch_flag == 4)
                    {
                        move_time++;
                        if (move_time <= move_time_end)
                        {
                            move_speed = FK.PI / move_time_end_count;
                            player.model.GlRotateWithVec(player.pos, fk_Axis.X, move_speed);
                            if (change_color == 1)
                            {
                                player.pos.z += move_spd;
                            }
                            if (change_color == -1)
                            {
                                player.pos.z -= move_spd;
                            }
                            if (move_time <= move_time_end / 2)
                            {
                                player.model.GlMoveTo(player.pos.x, player.pos.y + move_up * parallel, player.pos.z);
                            }
                            else if (move_time > move_time_end / 2)
                            {
                                player.model.GlMoveTo(player.pos.x, player.pos.y - move_up * parallel, player.pos.z);
                            }
                        }
                        else
                        {
                            se.StartSE(0);
                            move_speed = 0.0;
                            touch_flag = 0;
                            move_count = 0;
                        }
                    }
                }
                //デバック関連
                if ((fk_win.GetKeyStatus('D', fk_SwitchStatus.DOWN) == true))
                {
                    if (debug == false)
                    {
                        debug = true;
                    }
                    else if (debug == true)
                    {
                        debug = false;
                    }
                }

                if (debug == true)
                {
                    if (fk_win.GetSpecialKeyStatus(fk_SpecialKey.RIGHT, fk_SwitchStatus.PRESS) == true && touch_flag == 0)
                    {
                        move_time  = 0;
                        touch_flag = 1;
                        player.x  += 1;
                    }
                    else if (fk_win.GetSpecialKeyStatus(fk_SpecialKey.LEFT, fk_SwitchStatus.PRESS) == true && touch_flag == 0)
                    {
                        move_time  = 0;
                        touch_flag = 2;
                        player.x  -= 1;
                    }
                    else if (fk_win.GetSpecialKeyStatus(fk_SpecialKey.UP, fk_SwitchStatus.PRESS) == true && touch_flag == 0)
                    {
                        move_time  = 0;
                        touch_flag = 3;
                        player.z  -= 1;
                    }
                    else if (fk_win.GetSpecialKeyStatus(fk_SpecialKey.DOWN, fk_SwitchStatus.PRESS) == true && touch_flag == 0)
                    {
                        move_time  = 0;
                        touch_flag = 4;
                        player.z  += 1;
                    }
                }

                if (fk_win.GetSpecialKeyStatus(fk_SpecialKey.ENTER, fk_SwitchStatus.DOWN) == true && touch_flag == 0 && frozen == false)
                {
                    if (camera_mode == 0)
                    {
                        camera_mode            = 1;
                        model_col_previous     = player.model.LineColor;
                        player.model.LineColor = new fk_Color(0.8, 0.0, 0.0);
                        player.pos.y          *= -1;
                    }
                    else if (camera_mode == 1)
                    {
                        player.model.LineColor = model_col_previous;
                        if (change_color == -1)
                        {
                            player.pos.y = -20.0;
                            player.model.GlMoveTo(player.pos.x, player.pos.y, player.pos.z);
                        }
                        camera_mode = 0;
                    }
                }
                //カメラ処理

                if (camera_mode == 0)
                {
                    warp_camera_y += (player.pos.y + (20.0 * parallel) - warp_camera_y) / 15;
                    if (parallel == 1)
                    {
                        fk_win.CameraPos   = new fk_Vector(player.pos.x, warp_camera_y + (20 * parallel), player.pos.z + 170);
                        fk_win.CameraFocus = new fk_Vector(player.pos.x, 5.0 * parallel, 0.0);
                    }
                    else
                    {
                        fk_win.CameraPos   = new fk_Vector(player.pos.x, warp_camera_y + (12.5 * parallel), player.pos.z + 170);
                        fk_win.CameraFocus = new fk_Vector(player.pos.x, 5.0 * parallel, 0.0);
                    }
                    warp_camera_x = player.pos.x;
                    warp_camera_z = player.pos.z;
                }
                else if (camera_mode == 1)
                {
                    fk_win.CameraPos = new fk_Vector(((22 * 20) / 2), warp_camera_y, ((32 * 20) / 2));
                    if (change_color == 1)
                    {
                        warp_camera_y += (1000 - warp_camera_y) / 15;
                    }
                    else
                    {
                        player.pos.y = 0;
                        player.model.GlMoveTo(player.pos.x, player.pos.y, player.pos.z);
                        warp_camera_y += (1000 - warp_camera_y) / 15;
                    }
                    fk_win.CameraFocus = new fk_Vector((22 * 20) / 2, 1.0, (32 * 20) / 2);
                }
                else if (camera_mode == 2)
                {
                    warp_camera_x     += ((change_yuka_x[0] * 20) - warp_camera_x) / 15;
                    warp_camera_y     += (300 - warp_camera_y) / 20;
                    warp_camera_z     += ((change_yuka_z[0] * 20) - warp_camera_z) / 15;
                    fk_win.CameraPos   = new fk_Vector(warp_camera_z, warp_camera_y, warp_camera_x);
                    fk_win.CameraFocus = new fk_Vector(warp_camera_z, 1.0 * change_color * parallel, warp_camera_x);
                }
                else if (camera_mode == 3)    //マップ変換
                {
                    warp_camera_x     += ((change_yuka_x[1] * 20) - warp_camera_x) / 15;
                    warp_camera_y     += (300 - warp_camera_y) / 20;
                    warp_camera_z     += ((change_yuka_z[1] * 20) - warp_camera_z) / 15;
                    fk_win.CameraPos   = new fk_Vector(warp_camera_z, warp_camera_y, warp_camera_x);
                    fk_win.CameraFocus = new fk_Vector(warp_camera_z, 1.0 * change_color * parallel, warp_camera_x);
                }
                else if (camera_mode == 4)
                {
                    theta             += step;
                    warp_camera_x      = 200 * Math.Cos(theta + step);
                    warp_camera_y      = 400;
                    warp_camera_z      = 200 * Math.Sin(theta + step);
                    fk_win.CameraPos   = new fk_Vector(warp_camera_z, warp_camera_y, warp_camera_x);
                    fk_win.CameraFocus = new fk_Vector(220, 0, 320);
                }

                if (start_flag == false)
                {
                    camera_mode = 4;
                    if (fk_win.GetKeyStatus(' ', fk_SwitchStatus.DOWN) || fk_win.GetSpecialKeyStatus(fk_SpecialKey.ENTER, fk_SwitchStatus.DOWN) == true)
                    {
                        camera_mode = 0;
                        start_flag  = true;
                    }
                }

                bgm.Gain = volume;
            }
        }
예제 #30
0
 public Enemy()
 {
     emodel = new fk_Model();
     cone   = new fk_Cone(4, 1.5, 3.5);
     rand   = new Random();
 }