コード例 #1
0
ファイル: AI_Combat.cs プロジェクト: Falgantil/StickFight
        public void Update(Player opponent)
        {
            bool isNearby = false;

            bool breakout = false;
            for (int i = PlayerObject.Collision.X - 1; i < PlayerObject.Collision.X + PlayerObject.Collision.Width + 1; i++)
            {
                for (int u = PlayerObject.Collision.Y - 1; u < PlayerObject.Collision.Y + PlayerObject.Collision.Height + 1; u++)
                {
                    if (PlayerObject.Nearby(new Point(i, u), opponent.Collision))
                    {
                        isNearby = true;

                        breakout = true;
                    }
                    if (breakout)
                        break;
                }
                if (breakout)
                    break;
            }

            if (isNearby)
            {
                Nearby(opponent);
            }
            else
            {
                NotNearby(opponent);
            }
        }
コード例 #2
0
ファイル: AI_Combat.cs プロジェクト: Falgantil/StickFight
        private void Nearby(Player opponent)
        {
            int min = (PlayerObject.State == Standing.Stand ? 0 : 1);

            switch (rnd.Next(min, 6))
            {
                case 0:
                    hasHit = true;
                    Attack();
                    break;
                case 1:
                    MoveAway(opponent);
                    break;
                case 2:
                    MoveTowards(opponent);
                    break;
                default:

                    break;
            }
        }
コード例 #3
0
ファイル: AI_Combat.cs プロジェクト: Falgantil/StickFight
        private void NotNearby(Player opponent)
        {
            int max = (hasHit ? 3 : 2);

            switch (rnd.Next(0, max))
            {
                case 0:
                    break;
                case 1:
                    MoveTowards(opponent);
                    break;
                case 2:
                    MoveAway(opponent);
                    break;
                default:

                    break;
            }

            if (hasHit && (GetPlayerCenter(PlayerObject).X - 3 > GetPlayerCenter(opponent).X || GetPlayerCenter(PlayerObject).X + 3 < GetPlayerCenter(opponent).X))
            {
                hasHit = false;
            }
        }
コード例 #4
0
ファイル: AI_Combat.cs プロジェクト: Falgantil/StickFight
 public AiCombat(Player player)
 {
     this.PlayerObject = player;
     rnd = new Random();
 }
コード例 #5
0
ファイル: AI_Combat.cs プロジェクト: Falgantil/StickFight
 private Point GetPlayerCenter(Player plr)
 {
     return new Point(plr.Collision.Width / 2 + plr.Collision.X, plr.Collision.Height / 2 + plr.Collision.Y); ;
 }
コード例 #6
0
ファイル: AI_Combat.cs プロジェクト: Falgantil/StickFight
        private void MoveTowards(Player opponent)
        {
            if (GetPlayerCenter(PlayerObject).X > GetPlayerCenter(opponent).X)
            {
                PlayerObject.Move(Direction.Left);
            }
            else if (GetPlayerCenter(PlayerObject).X < GetPlayerCenter(opponent).X)
            {
                PlayerObject.Move(Direction.Right);
            }

            if (GetPlayerCenter(PlayerObject).Y > GetPlayerCenter(opponent).Y && rnd.Next(0, 2) == 1)
            {
                PlayerObject.Jump();
            }
        }
コード例 #7
0
ファイル: AI_Combat.cs プロジェクト: Falgantil/StickFight
        private void MoveAway(Player opponent)
        {
            if (GetPlayerCenter(PlayerObject).X > GetPlayerCenter(opponent).X)
            {
                if (PlayerObject.Collision.X > 72)
                    PlayerObject.Jump();
                else
                    PlayerObject.Move(Direction.Right);
            }
            else if (GetPlayerCenter(PlayerObject).X < GetPlayerCenter(opponent).X)
            {
                if (PlayerObject.Collision.X < 3)
                    PlayerObject.Jump();
                else
                    PlayerObject.Move(Direction.Left);
            }

            if (GetPlayerCenter(PlayerObject).Y > GetPlayerCenter(opponent).Y && rnd.Next(0, 2) == 1)
            {
                PlayerObject.Jump();
            }
        }
コード例 #8
0
ファイル: Program.cs プロジェクト: Falgantil/StickFight
        /// <summary>
        ///     Starts the game, prompting the user to enter player 1 and 2 names and select color.
        /// </summary>
        private static void Initialize_Game_PVAI()
        {
            bool Replay = true;

            Console.Title = "Stick Fight - Player versus Artificial Intelligence";

            Console.Out.WriteLine("Enter Player 1 name.");
            string plr1Name = Console.ReadLine();
            while (plr1Name == "")
            {
                Console.Out.WriteLine("You need a name.");
                plr1Name = Console.ReadLine();
            }

            #region Player 1 Color Selecting

            ConsoleColor Plr1Color;

            #region Player 1 color listing and selection

            var colorName1 = new List<string>();
            var colorConsole1 = new List<ConsoleColor>();

            foreach (ConsoleColor item in Enum.GetValues(typeof(ConsoleColor)))
            {
                string colorName = item.ToString().ToLower();
                if (!colorName.Contains("black"))
                {
                    colorName1.Add(item.ToString());
                    colorConsole1.Add(item);
                }
            }

            #endregion

            Console.Clear();
            if (
                !Enum.TryParse(
                    ConsoleOptions.SendChoices("Select " + plr1Name + "'s Color", colorName1, colorConsole1),
                    out Plr1Color))
                throw new Exception("Error on converting player 1's color");

            #endregion

            #region Player 2 Color Selecting

            List<ConsoleColor> colors = Enum.GetValues(typeof (ConsoleColor)).Cast<ConsoleColor>().Where(item => item != Plr1Color && item != ConsoleColor.Black).ToList();

            ConsoleColor plr2Color = colors[new Random().Next(0, colors.Count)];

            Console.Clear();

            #endregion

            #region Handles Map Selection

            if (!Directory.Exists("Maps"))
                Directory.CreateDirectory("Maps");

            List<string> mapPaths = Directory.GetFiles("Maps").ToList();

            if (mapPaths.Count == 0)
            {
                File.WriteAllText(@"Maps\Map_00.txt", Settings.Default.StandardMap);
                mapPaths = Directory.GetFiles("Maps").ToList();
            }

            for (int i = 0; i < mapPaths.Count; i++)
            {
                mapPaths[i] = mapPaths[i].Replace(@"Maps\", "");
                mapPaths[i] = mapPaths[i].Replace(".txt", "");
            }

            string chosenMap = @"Maps\" + ConsoleOptions.SendChoices("Choose your Arena", mapPaths) + ".txt";

            #endregion

            Console.Out.WriteLine("Game Starting in 3 seconds");

            Thread.Sleep(3000);

            Player.EffectPlayer = new List<Effect>
                {
                    new Effect(Resources.Block),
                    new Effect(Resources.Punch_1),
                    new Effect(Resources.Punch_2),
                    new Effect(Resources.Punch_3)
                };

            Music = new BackgroundMusic("BackgroundMusic", Resources.Background_Theme, true);

            #region Controls the actual game process.

            while (Replay)
            {
                try
                {
                    Player1 = new Player(
                        plr1Name,
                        Plr1Color,
                        new Point(20, 20 + Offset))
                    {
                        HpBarPosition = 1
                    };

                    Player2 = new Player(
                        "Computer AI",
                        plr2Color,
                        new Point(60, 20 + Offset))
                    {
                        HpBarPosition = 59
                    };

                    AiCombat = new AiCombat(Player2);

                    //P1Status = new StatusBar(new Point(1, 31), 30, true);
                    //P2Status = new StatusBar(new Point(79, 31), 30, false);

                    GameWon = false;

                    Console.CursorVisible = false;

                    Map.CreateMap(chosenMap);

                    Player1.UpdateAnim();
                    Player2.UpdateAnim();

                    #region Countdown to start.

                    Thread.Sleep(1000);
                    SetHeaderMessage("Ready");
                    Thread.Sleep(1000);
                    SetHeaderMessage("Set!");

                    if (!Music.IsPlaying)
                        Music.StartMusic();

                    Thread.Sleep(1000);
                    SetHeaderMessage("GO!");

                    #endregion

                    #region The actual main loop, checking for user input, controlling the players according to the buttons pressed.

                    int plr1Left = Settings.Default.Plr1Left;
                    int plr1Right = Settings.Default.Plr1Right;
                    int plr1Down = Settings.Default.Plr1Down;
                    int plr1Up = Settings.Default.Plr1Up;
                    int plr1Hit = Settings.Default.Plr1Hit;
                    int plr1Kick = Settings.Default.Plr1Kick;
                    int plr1Block = Settings.Default.Plr1Block;

                    while (!GameWon)
                    {
                        if (NativeKeyboard.IsKeyDown(plr1Left))
                            Player1.Move(Direction.Left);
                        else if (NativeKeyboard.IsKeyDown(plr1Right))
                            Player1.Move(Direction.Right);
                        else if (NativeKeyboard.IsKeyDown(plr1Down))
                            Player1.Move(Direction.Down);
                        if (NativeKeyboard.IsKeyDown(plr1Up))
                            Player1.Jump();
                        if (NativeKeyboard.IsKeyDown(plr1Hit))
                            Player1.Hit();
                        if (NativeKeyboard.IsKeyDown(plr1Kick))
                            Player1.Kick();
                        if (NativeKeyboard.IsKeyDown(plr1Block))
                            Player1.Block();
                        Player1.UpdateMovement();

                        AiCombat.Update(Player1);
                        Player2.UpdateMovement();

                        GameWon = CheckForWinner();
                        Thread.Sleep(30);
                    }

                    #endregion

                    #region After game ends, moves the player models back to default position.

                    for (int i = Player1.Collision.X; i < Player1.Collision.X + 5; i++)
                    {
                        for (int u = Player1.Collision.Y; u < Player1.Collision.Y + 5; u++)
                        {
                            Console.SetCursorPosition(i, u);
                            Console.Out.Write(" ");
                        }
                    }

                    for (int i = Player2.Collision.X; i < Player2.Collision.X + 5; i++)
                    {
                        for (int u = Player2.Collision.Y; u < Player2.Collision.Y + 5; u++)
                        {
                            Console.SetCursorPosition(i, u);
                            Console.Out.Write(" ");
                        }
                    }

                    Player1.Collision = new Rectangle(20, 20 + Offset, 5, 5);
                    Player2.Collision = new Rectangle(60, 20 + Offset, 5, 5);
                    Player1.UpdateAnim();
                    Player2.UpdateAnim();

                    #endregion

                    if (Player1.Health == 0 && Player2.Health == 0)
                    {
                        SetHeaderMessage("It is tied!");
                    }
                    else if (Player1.Health == 0)
                    {
                        SetHeaderMessage(Player2.Name + " has won the Game!");
                    }
                    else if (Player2.Health == 0)
                    {
                        SetHeaderMessage(Player1.Name + " has won the Game!");
                    }
                    else
                    {
                        SetHeaderMessage("Unknown Player has won the Game!");
                    }
                    Thread.Sleep(3000); // Sleeps to allow for the winning to be displayed.
                }
                catch (Exception e)
                {
                    Debug.WriteLine(e.ToString());
                    Console.ReadLine();
                    Environment.Exit(0);
                }
                SetHeaderMessage("Play Again? Y/N");

                while (true)
                {
                    if (NativeKeyboard.IsKeyDown(Convert.ToInt32('Y')))
                    {
                        Replay = true;
                        break;
                    }
                    else if (NativeKeyboard.IsKeyDown(Convert.ToInt32('N')))
                    {
                        Replay = false;
                        break;
                    }

                    Thread.Sleep(10);
                }
            }

            #endregion
        }