示例#1
0
        public Enemy(Category _category, fk_Vector position, fk_AppWindow window)
        {
            category = _category;
            switch (category)
            {
            case Category.Dash:
                model.Shape    = new fk_Sphere(4, 12);
                model.Material = fk_Material.Red;
                model.GlMoveTo(position);
                model.SmoothMode = false;
                model.BMode      = fk_BoundaryMode.SPHERE;
                model.AdjustSphere();
                window.Entry(model);
                ability    = false;
                preAbility = ability;
                hp         = 2;
                break;

            case Category.Patroll:
                model.Shape    = new fk_Sphere(4, 18);
                model.Material = fk_Material.Red;
                model.GlMoveTo(position);
                model.SmoothMode = false;
                model.BMode      = fk_BoundaryMode.SPHERE;
                model.AdjustSphere();
                window.Entry(model);
                ability    = false;
                preAbility = ability;
                hp         = 3;
                break;
            }
        }
示例#2
0
        public void Shoot(List <Bullet> bullets, fk_AppWindow window)
        {
            if (shootCount >= 18)
            {
                shootCount = 0;
                switch (shootType)
                {
                case ShootType.normal:
                    Bullet bullet = new Bullet(8, muzzules[0].InhPosition, -playerModel.Vec, fk_Material.Yellow, 6, 1, window);
                    bullets.Add(bullet);
                    break;

                case ShootType.diffusion:
                    Bullet[] threeBullets = new Bullet[3];
                    threeBullets[0] = new Bullet(8, muzzules[0].InhPosition, -playerModel.Vec, fk_Material.Pink, 6, 1, window);
                    threeBullets[1] = new Bullet(8, muzzules[1].InhPosition, -playerModel.Vec, fk_Material.Pink, 6, 1, window);
                    threeBullets[2] = new Bullet(8, muzzules[2].InhPosition, -playerModel.Vec, fk_Material.Pink, 6, 1, window);
                    bullets.AddRange(threeBullets);
                    break;

                case ShootType.bomb:
                    Bullet bullet2 = new Bullet(16, muzzules[0].InhPosition, -playerModel.Vec, fk_Material.Orange, 8, 3, window);
                    bullets.Add(bullet2);
                    break;
                }
            }
        }
示例#3
0
        public void Entry(fk_AppWindow argWin, fk_Vector pos, int randSeed)
        {
            moveParticle = new MissileMoveParticle(argWin, randSeed);
            rand         = new Random(randSeed);

            mbody.Shape = bodyshape;
            mwing.Shape = wingshape;

            mbody.Material = fk_Material.White;
            mwing.Material = fk_Material.LavaRed;

            mbody.GlVec(0.0, 0.0, -1.0);
            mwing.GlAngle(3.0 * FK.PI / 2.0, FK.PI / 2.0, 0.0);
            mwing.GlMoveTo(0.0, -0.125, 0.5);

            mbody.BMode = fk_BoundaryMode.AABB;
            mbody.AdjustAABB();

            argWin.Entry(mbody);
            argWin.Entry(mwing);

            mmodel.EntryChild(mbody);
            mbody.EntryChild(mwing);


            argWin.Entry(mmodel);
            position = pos;
            mmodel.GlMoveTo(pos);
            if (moveMode == (int)MoveMode.RandCurve || moveMode == (int)MoveMode.RandLine)
            {
                randPos.x = rand.NextDouble() * 20.0 - 10.0;
                randPos.y = rand.NextDouble() * 20.0 - 10.0;
                randPos.z = rand.NextDouble() * 20.0 - 10.0;
            }
        }
示例#4
0
        public void InputCtrl(fk_AppWindow window)
        {
            if (window.GetKeyStatus('w', fk_SwitchStatus.PRESS) && playerModel.Position.z < 1400)
            {
                playerModel.LoTranslate(0, 0, 0.5f);
            }
            else if (window.GetKeyStatus('s', fk_SwitchStatus.PRESS) && playerModel.Position.z > -200)
            {
                playerModel.LoTranslate(0, 0, -0.5f);
            }
            if (window.GetKeyStatus('a', fk_SwitchStatus.PRESS) && playerModel.Position.x < 200)
            {
                playerModel.LoTranslate(0.5f, 0, 0);
            }
            else if (window.GetKeyStatus('d', fk_SwitchStatus.PRESS) && playerModel.Position.x > -200)
            {
                playerModel.LoTranslate(-0.5f, 0, 0);
            }
            if (window.GetSpecialKeyStatus(fk_SpecialKey.F5, fk_SwitchStatus.DOWN))
            {
                hp += 10;
            }

            /*
             * if (window.GetKeyStatus(' ', fk_SwitchStatus.DOWN))
             * {
             *  Bullet bullet = new Bullet(8, playerModel.Position, -playerModel.Vec, fk_Material.Yellow, window);
             *  bullets.Add(bullet);
             * }*/
            if (window.GetKeyStatus(' ', fk_SwitchStatus.PRESS))
            {
                shootCount++;
            }
        }
示例#5
0
 public void Entry(fk_AppWindow argWin)
 {
     emodel.Shape    = cone;
     emodel.Material = fk_Material.LightCyan;
     emodel.GlVec(0.0, -1.0, 0.0);
     Pos = new fk_Vector(0.0, 20.0, 0.0);
     argWin.Entry(emodel);
 }
示例#6
0
        public void Move(fk_Vector Diff, fk_AppWindow argWin)
        {
            if (liveflag == true)
            {
                switch (moveMode)
                {
                case (int)MoveMode.Line:
                    accel  = new fk_Vector();
                    accel += 2.0 * (Diff - velocity * period) / (period * period);

                    period -= deltatime;

                    velocity += accel * deltatime;
                    position += velocity * deltatime;
                    mmodel.GlMoveTo(position);
                    break;

                case (int)MoveMode.Curve:

                    accel  = new fk_Vector();
                    accel += 2.0 * (Diff - velocity * period) / (period * period);
                    accel += new fk_Vector(rand.NextDouble() * 20 - 10.0, rand.NextDouble() * 3.0, rand.NextDouble() * 100.0 - 50.1);

                    period -= deltatime;

                    velocity += accel * deltatime;
                    position += velocity * deltatime;
                    mmodel.GlMoveTo(position);
                    break;

                case (int)MoveMode.RandCurve:

                    accel  = new fk_Vector();
                    accel += 2.0 * (Diff - velocity * period) / (period * period);
                    accel += new fk_Vector(rand.NextDouble() * 80.0 - 40.5, 0.0, rand.NextDouble() * 50.0 - 25.1);

                    period -= deltatime;


                    velocity += accel * deltatime;
                    position += velocity * deltatime;
                    mmodel.GlMoveTo(position);
                    break;

                case (int)MoveMode.RandLine:
                    accel  = new fk_Vector();
                    accel += 2.0 * (Diff - velocity * period) / (period * period);

                    period -= deltatime;


                    velocity += accel * deltatime;
                    position += velocity * deltatime;
                    mmodel.GlMoveTo(position);
                    break;
                }
            }
        }
示例#7
0
 public void CollideAttack(PlayerCharacter player, fk_AppWindow window)
 {
     if (model.IsInter(player.playerModel) && isActive == true)
     {
         player.hp--;
         window.Remove(model);
         isActive = false;
     }
 }
 public static bool Create(fk_AppWindow mainWindow, fk_AppWindow stateWindow, bool force = false)
 {
     if (_instance != null && !force)
     {
         return(false);
     }
     _instance = new FKSettings(mainWindow, stateWindow);
     return(true);
 }
示例#9
0
 public void Scattering(Enemy enemy, fk_AppWindow window)
 {
     progressTime++;
     if (progressTime == lifeTime)
     {
         window.Remove(model);
         isActive = false;
     }
 }
示例#10
0
 public void Shoot(fk_AppWindow window)
 {
     model.GlTranslate(direction * speed);
     progressTime++;
     if (progressTime == lifeTime)
     {
         window.Remove(model);
         isActive = false;
     }
 }
示例#11
0
 public Explosion(fk_Vector position, fk_AppWindow appWindow)
 {
     model.Shape    = new fk_Sphere(4, 16);
     model.Material = fk_Material.DimYellow;
     model.GlMoveTo(position);
     model.SmoothMode = true;
     model.BMode      = fk_BoundaryMode.SPHERE;
     model.AdjustSphere();
     appWindow.Entry(model);
 }
示例#12
0
 public void Entry(fk_AppWindow argWin)
 {
     pmodel.Shape    = cone;
     pmodel.Material = fk_Material.Red;
     pmodel.GlVec(0.0, 1.0, 0.0);
     Pos          = new fk_Vector(0.0, -20.0, 0.0);
     pmodel.BMode = fk_BoundaryMode.AABB;
     pmodel.AdjustAABB();
     argWin.Entry(pmodel);
 }
示例#13
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");
                }
            }
        }
示例#14
0
 public void ChangePos(fk_AppWindow argWin)
 {
     if (argWin.GetMouseStatus(fk_MouseButton.MOUSE1, fk_SwitchStatus.PRESS, false) == true)
     {
         var plane = new fk_Plane();
         plane.SetPosNormal(new fk_Vector(0.0, 0.0, 0.0), new fk_Vector(0.0, 0.0, 1.0));
         var pos3D = new fk_Vector();
         var pos2D = argWin.MousePosition;
         argWin.GetProjectPosition(pos2D.x, pos2D.y, plane, pos3D);
         Pos = pos3D;
     }
 }
示例#15
0
 public void LookVec(fk_Vector Target, fk_AppWindow argWin)
 {
     diff = Target - mmodel.Position + randPos;
     mmodel.GlVec(diff);
     moveParticle.PushPoints(mmodel.Position);
     Move(diff, argWin);
     if (period < 0.0)
     {
         argWin.Remove(mmodel);
         argWin.Remove(mwing);
         argWin.Remove(mbody);
         liveflag = false;
     }
 }
示例#16
0
 public void DamageCheck(PlayerCharacter player, Bullet bullet, fk_AppWindow window)
 {
     if (model.IsInter(bullet.model) && bullet.isActive == true && isActive == true)
     {
         hp -= bullet.damege;
         window.Remove(bullet.model);
         bullet.isActive = false;
     }
     if (hp <= 0 && isActive == true)
     {
         player.score += 100;
         window.Remove(model);
         isActive = false;
     }
 }
示例#17
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);
        }
示例#18
0
        public void GetItem(PlayerCharacter player, fk_AppWindow window)
        {
            if (model.IsInter(player.playerModel) && isActive == true)
            {
                isActive = false;
                window.Remove(model);
                switch (type)
                {
                case Type.diffusion:
                    player.shootType = PlayerCharacter.ShootType.diffusion;
                    break;

                case Type.bomb:
                    player.shootType = PlayerCharacter.ShootType.bomb;
                    break;
                }
            }
        }
示例#19
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);
        }
示例#20
0
        public Item(Type _type, fk_Vector position, fk_AppWindow window)
        {
            type        = _type;
            model.Shape = new fk_Block(15, 15, 15);
            model.GlMoveTo(position);
            model.SmoothMode = true;
            model.BMode      = fk_BoundaryMode.AABB;
            model.AdjustAABB();
            switch (type)
            {
            case Type.diffusion:
                model.Material = fk_Material.Pink;
                break;

            case Type.bomb:
                model.Material = fk_Material.Orange;
                break;
            }
            window.Entry(model);
        }
示例#21
0
        public void Move(fk_AppWindow argWin)
        {
            fk_Vector origin = new fk_Vector(0.0, 0.0, -2.0);

            if (argWin.GetSpecialKeyStatus(fk_SpecialKey.LEFT, fk_SwitchStatus.PRESS))
            {
                pmodel.LoTranslate(-Speed, 0.0, 0.0);
            }
            if (argWin.GetSpecialKeyStatus(fk_SpecialKey.RIGHT, fk_SwitchStatus.PRESS))
            {
                pmodel.LoTranslate(Speed, 0.0, 0.0);
            }
            if (argWin.GetSpecialKeyStatus(fk_SpecialKey.UP, fk_SwitchStatus.PRESS))
            {
                pmodel.LoTranslate(0.0, 0.0, -Speed);
            }
            if (argWin.GetSpecialKeyStatus(fk_SpecialKey.DOWN, fk_SwitchStatus.PRESS))
            {
                pmodel.LoTranslate(0.0, 0.0, Speed * 3.0);
            }
        }
示例#22
0
        public MissileDeleteParticle(fk_AppWindow argWin)
        {
            double R, G, B;

            points  = new fk_Polyline[MaxParticle];
            pmodel  = new fk_Model[MaxParticle];
            randPos = new fk_Vector();
            for (int n = 0; n < MaxParticle; n++)
            {
                points[n]           = new fk_Polyline();
                pmodel[n].Shape     = points[n];
                pmodel[n].PointSize = 4.5;

                R = rand.NextDouble();
                G = rand.NextDouble();
                B = rand.NextDouble();

                Console.WriteLine("R : " + R + " G : " + G + " B : " + B);

                pmodel[n].PointColor = 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[n]);
            }
        }
示例#23
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);
                }
            }
        }
示例#24
0
        static void Main(string[] args)
        {
            fk_Material.InitDefault();
            var win = new fk_AppWindow();

            win.TrackBallMode = true;
            MakeWindow(win);

            Player player;

            player = new Player();
            player.Entry(win);

            Enemy enemy;

            enemy = new Enemy();
            enemy.Entry(win);

            Random rand = new Random();

            Missile        missile;
            List <Missile> missiles = new List <Missile>();

            int DMode = 0;//初期通常描画

            fk_SpriteModel ModeSprite = new fk_SpriteModel();
            string         mtxt;

            if (ModeSprite.InitFont("mona.ttf") == false)
            {
                Console.WriteLine("Error");
            }
            ModeSprite.SetPositionLT(-300, 250);
            win.Entry(ModeSprite);
            mtxt = "1 : Normal";
            int t = 0;

            win.Open();
            while (win.Update() == true)
            {
                enemy.ChangePos(win);
                t++;
                rand = new Random(t);
                int nNum = rand.Next(3, 10);
                //CameraSet(win, player.Pos);
                player.Move(win);

                //描画モード選択
                if (win.GetKeyStatus('1', fk_SwitchStatus.DOWN))
                {
                    DMode = (int)DrawMode.Normal;
                    mtxt  = "1 : Normal";
                }
                if (win.GetKeyStatus('2', fk_SwitchStatus.DOWN))
                {
                    DMode = (int)DrawMode.Line;
                    mtxt  = "2 : Line";
                }
                if (win.GetKeyStatus('3', fk_SwitchStatus.DOWN))
                {
                    DMode = (int)DrawMode.Curve;
                    mtxt  = "3 : Curve";
                }
                if (win.GetKeyStatus('4', fk_SwitchStatus.DOWN))
                {
                    DMode = (int)DrawMode.RandLine;
                    mtxt  = "4 : RandLine";
                }
                if (win.GetKeyStatus('5', fk_SwitchStatus.DOWN))
                {
                    DMode = (int)DrawMode.RandCurve;
                    mtxt  = "5 : RandCurve";
                }
                if (win.GetKeyStatus('6', fk_SwitchStatus.DOWN))
                {
                    DMode = (int)DrawMode.Lines;
                    mtxt  = "6 : Lines";
                }
                if (win.GetKeyStatus('7', fk_SwitchStatus.DOWN))
                {
                    DMode = (int)DrawMode.Curves;
                    mtxt  = "7 : Curves";
                }
                ModeSprite.DrawText("モード(1~7) = " + mtxt, true);

                //発射
                if (win.GetKeyStatus(' ', fk_SwitchStatus.DOWN))
                {
                    Console.WriteLine("発射数 : " + nNum);
                    for (int n = 0; n < nNum; n++)
                    {
                        missile = new Missile(rand.Next(0, 100));
                        //描画モードに合わせる
                        switch (DMode)
                        {
                        case (int)DrawMode.Normal:
                            break;

                        case (int)DrawMode.Line:
                            missile.moveMode = Line;
                            break;

                        case (int)DrawMode.Curve:
                            missile.moveMode = Curve;
                            break;

                        case (int)DrawMode.RandCurve:
                            missile.moveMode = RandCurve;
                            break;

                        case (int)DrawMode.RandLine:
                            missile.moveMode = RandLine;
                            break;

                        case (int)DrawMode.Lines:
                            if (rand.NextDouble() > 0.81)
                            {
                                missile.moveMode = Line;
                            }
                            else
                            {
                                missile.moveMode = RandLine;
                            }
                            break;

                        case (int)DrawMode.Curves:
                            if (rand.NextDouble() > 0.65)
                            {
                                missile.moveMode = Curve;
                            }
                            else
                            {
                                missile.moveMode = RandCurve;
                            }
                            break;
                        }
                        missiles.Add(missile);
                        missiles[missiles.Count - 1].Entry(win, player.Pos, rand.Next());
                    }
                }
                //reset
                if (win.GetKeyStatus('R', fk_SwitchStatus.DOWN))
                {
                    win.ClearModel(true);
                    player.Entry(win);
                    win.Entry(ModeSprite);
                    enemy.Entry(win);
                }
                for (int n = 0; n < missiles.Count; n++)
                {
                    //ミサイル生存確認
                    if (missiles[n].liveflag == false)
                    {
                        missiles.Remove(missiles[n]);
                    }
                    else
                    {
                        missiles[n].LookVec(enemy.Pos, win);
                    }
                }
            }
        }
示例#25
0
 static void CameraSet(fk_AppWindow argWin, fk_Vector parentPos)
 {
     argWin.CameraPos   = parentPos + new fk_Vector(0.0, -30.0, 0.0);
     argWin.CameraFocus = parentPos;
 }
示例#26
0
 static void MakeWindow(fk_AppWindow argWin)
 {
     argWin.Size = new fk_Dimension(950, 700);
     argWin.FPS  = 60;
 }
示例#27
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())
            {
            }
        }
示例#28
0
 public Bullet(float size, fk_Vector position, fk_Vector _direction, fk_Material color, int _speed, int _damege, fk_AppWindow appWindow)
 {
     model.Shape    = new fk_Sphere(4, size);
     model.Material = color;
     model.GlMoveTo(position);
     model.SmoothMode = true;
     model.BMode      = fk_BoundaryMode.SPHERE;
     model.AdjustSphere();
     direction = _direction;
     speed     = _speed;
     damege    = _damege;
     appWindow.Entry(model);
 }
示例#29
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;
            }
        }
示例#30
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));
                    }
                }
            }
        }