コード例 #1
0
        public static Keys WaitForKeys()
        {
            // to prevent a compiler bug
            int  a = 0;
            Keys key;

            while (true)
            {
                if (C64.IsKeyPressed(Keys.Space) || (C64.Joysticks.Joystick2.Pressed & JoystickButtons.Fire) == JoystickButtons.Fire)
                {
                    key = Keys.Space;
                    break;
                }

                if (C64.IsKeyPressed(Keys.B))
                {
                    key = Keys.B;
                    break;
                }
            }

            // wait for key up
            while (true)
            {
                if (!C64.IsKeyPressed(key))
                {
                    break;
                }
                Delay.Wait(500);
            }
            return(key);
        }
コード例 #2
0
        public override void Present()
        {
            Screen.Clear(Colors.Green);
            C64.Write(17, 12, "F  O  R", Colors.Green);

            var c64Logo = new MovingLogo
            {
                SpriteTL = C64.Sprites.Sprite0,
                SpriteBL = C64.Sprites.Sprite1,
                SpriteTR = C64.Sprites.Sprite2,
                SpriteBR = C64.Sprites.Sprite3,
                MinX     = 220,
                MaxX     = 265,
                MinY     = 50,
                MaxY     = 170,
                X        = 220,
                Y        = 160
            };

            var csharpLogo = new MovingLogo
            {
                SpriteTL = C64.Sprites.Sprite4,
                SpriteBL = C64.Sprites.Sprite5,
                SpriteTR = C64.Sprites.Sprite6,
                SpriteBR = null,
                MinX     = 30,
                MaxX     = 90,
                MinY     = 50,
                MaxY     = 170,
                X        = 50,
                Y        = 50
            };

            c64Logo.Init();
            csharpLogo.Init();
            for (; ;)
            {
                Delay.Wait(100);
                if (C64.IsKeyPressed(Keys.Space) || (C64.Joysticks.Joystick2.Pressed & JoystickButtons.Fire) == JoystickButtons.Fire)
                {
                    break;
                }

                c64Logo.Step();
                csharpLogo.Step();
            }
        }
コード例 #3
0
        public override void Present()
        {
            Colors color = Colors.Black;

            C64.Write(15, 12, "D E M O", Colors.Black);
            for (ulong i = 0; i < 1000; i++)
            {
                C64.SetBackgroundColor(color);
                C64.SetBorderColor(color);
                color++;

                if (C64.IsKeyPressed(Keys.Space) || (C64.Joysticks.Joystick2.Pressed & JoystickButtons.Fire) == JoystickButtons.Fire)
                {
                    break;
                }
            }
        }
コード例 #4
0
        public static void Display()
        {
            Screen.Clear(Colors.White);
            C64.CopyMemory(C64Address.FromLabel("(screenMemory+$CD)"), C64Address.FromLabel("titleScreen"), 0);
            C64.CopyMemory(C64Address.FromLabel("(screenMemory+$1CD)"), C64Address.FromLabel("titleScreen+$100"), 0);
            C64.CopyMemory(C64Address.FromLabel("(screenMemory+$21B)"), C64Address.FromLabel("titleScreen+$14E"), 0);

            C64.Write(13, 1, "OCEAN SOFTWARE", Colors.Green);
            C64.Write(13, 3, "   PRESENTS   ", Colors.White);
            C64.Write(25, 21, "   BY J.STEELE", Colors.Green);
            C64.Write(7, 23, "PRESS F1 FOR INSTRUCTIONS", Colors.White);
            C64.Write(7, 24, "    OR SPACE TO START    ", Colors.White);

            var tones = GetTones();

            for (; ;)
            {
                var color = (uint)1;
                foreach (var t in tones)
                {
                    color++;
                    if (color == 7)
                    {
                        color = 1;
                    }
                    C64.Sound.PlayEffectReg1(WaveForm.Saw, t.Frequency, 0, 9, 0, false);
                    C64.FillMemory(C64Address.FromLabel("(colorMemory+$CD)"), color, 0);
                    C64.FillMemory(C64Address.FromLabel("(colorMemory+$1CD)"), color, 0);
                    C64.FillMemory(C64Address.FromLabel("(colorMemory+$21B)"), color, 0);

                    for (uint k = 0; k < 50u; k++)
                    {
                        for (uint kk = 0; kk < t.Sustain; kk++)
                        {
                            if (C64.IsKeyPressed(Keys.Space) || (C64.Joysticks.Joystick2.Pressed & JoystickButtons.Fire) == JoystickButtons.Fire)
                            {
                                return;
                            }
                        }
                    }
                }
            }
        }
コード例 #5
0
        public bool Play(LevelDescription description, PlayerStats playerStats)
        {
            Wall wall = new Wall();

            wall.Draw(description.Color, description.WallType);
            playerStats.Draw();

            Player player = new Player()
            {
                Sprite = C64.Sprites.Sprite0
            };

            player.Init(wall);
            Knight knight = new Knight()
            {
                Sprite = C64.Sprites.Sprite1
            };

            knight.Init();
            GetReady();
            Rope rope = null;

            if (description.WallType == WallType.Rope)
            {
                rope = new Rope
                {
                    Sprite1 = C64.Sprites.Sprite3,
                    Sprite2 = C64.Sprites.Sprite4,
                };
                rope.Init();
            }
            else
            {
                C64.Sprites.Sprite3.Visible = false;
                C64.Sprites.Sprite4.Visible = false;
            }

            Enemy enemy = new Enemy()
            {
                Sprite    = C64.Sprites.Sprite2,
                EnemyType = description.EnemyType
            };

            enemy.Init();
            var gameObjects = new GameObject[] { enemy, knight, rope, wall };

            for (; ;)
            {
                player.Move();

                var collisions = C64.Sprites.Collisions;
                if ((collisions & 1u) > 0)
                {
                    if ((collisions & 6u) > 0)  // Player-enemy collision
                    {
                        player.Die();
                    }
                    else
                    {
                        player.SetOnRope(rope);
                    }
                }
                if (player.Dead)
                {
                    return(false);
                }
                if (player.Complete)
                {
                    return(true);
                }
                foreach (var go in gameObjects)
                {
                    go?.Move();
                }

                Delay.Wait(100);
                if (C64.IsKeyPressed(Keys.L))
                {
                    return(true);
                }
            }
        }