private void BackButtonClick(object sender, RoutedEventArgs e)
 {
     networkPeer.killPeer();
     networkPeer = null;
     MultiplayerMode.ShouldBreakOut = true;
     Switcher.Switch(new MainPage());
 }
 private void BackButtonClick(object sender, RoutedEventArgs e)
 {
     networkPeer.killPeer();
     networkPeer = null;
     MultiplayerMode.ShouldBreakOut = true;
     Switcher.Switch(new MainPage());
 }
예제 #3
0
 private void Disconnect()
 {
     if (networkPeer != null)
     {
         networkPeer.killPeer();
         networkPeer = null;
     }
     connected = false;
     Switcher.Switch(new ConnectionLostPage());
 }
예제 #4
0
 private void yesButton_Click(object sender, RoutedEventArgs e)
 {
     checkConnect.Stop();
     networkPeer.killPeer();
     networkPeer = null;
     soundEffectPlayer.Stop();
     soundEffectPlayer.Close();
     soundTrackMediaPlayer.Stop();
     soundTrackMediaPlayer.Close();
     Switcher.Switch(new MainPage());
 }
예제 #5
0
        private async void NextButtonClick(object sender, RoutedEventArgs e)
        {
            soundEffectPlayer.ButtonSound();
            string playerName = (string)LANPlayerNameTextBox.Text;

            if (playerName == "")
            {
                playerName = "Anonymous";
            }
            LidgrenKulamiPeer.KulamiPeer networkPeer = new LidgrenKulamiPeer.KulamiPeer(3070);
            networkPeer.Start();
            Switcher.Switch(new WaitingForConnectionPage(networkPeer));
            await StartNetworkGame(playerName, networkPeer);
        }
        public WaitingForConnectionPage(LidgrenKulamiPeer.KulamiPeer peer)
        {
            InitializeComponent();
            networkPeer = peer;
            ImageBrush backgrnd = new ImageBrush();
            backgrnd.ImageSource = new BitmapImage(new Uri(startupPath + "/images/SelectionPage.png", UriKind.Absolute));
            ImageBrush backButtonib = new ImageBrush();
            backButtonib.ImageSource = new BitmapImage(new Uri(startupPath + "/images/backButton.png", UriKind.Absolute));
            Background.Background = backgrnd;
            BackButton.Background = backButtonib;

            //Task.Delay(6000);
            
        }
        public WaitingForConnectionPage(LidgrenKulamiPeer.KulamiPeer peer)
        {
            InitializeComponent();
            networkPeer = peer;
            ImageBrush backgrnd = new ImageBrush();

            backgrnd.ImageSource = new BitmapImage(new Uri(startupPath + "/images/SelectionPage.png", UriKind.Absolute));
            ImageBrush backButtonib = new ImageBrush();

            backButtonib.ImageSource = new BitmapImage(new Uri(startupPath + "/images/backButton.png", UriKind.Absolute));
            Background.Background    = backgrnd;
            BackButton.Background    = backButtonib;

            //Task.Delay(6000);
        }
예제 #8
0
        public GamePage(bool easyLevel, GameType gType)
        {
            InitializeComponent();

            string songPath = startupPath + "/sound/music/Soundtrack.mp3";
            soundTrackMediaPlayer.Open(new Uri(songPath));
            soundTrackMediaPlayer.MediaEnded += new EventHandler(Song_Ended);
            soundTrackMediaPlayer.Play();

            if (gType == GameType.LANMultiplayer)
            {
                networkPeer = new LidgrenKulamiPeer.KulamiPeer(3070);
                //wait until connection is established
            }

            buttonNames = new Dictionary<string,Button>();
            allButtons = GameBackground.Children.OfType<Button>();
            foreach (Button b in allButtons)
            {
                buttonNames.Add(b.Name.ToString(), b);
            }

            int networkingBoardNum = 0;
            if (gType == GameType.LANMultiplayer)
            {
                Random rnd = new Random();
                int myRandomBoardNum = rnd.Next(1, 8);

                networkPeer.sendMove(myRandomBoardNum.ToString());
                int opponentRandomBoardNum = Convert.ToInt32(networkPeer.getMove());
                
                networkingBoardNum = (myRandomBoardNum + opponentRandomBoardNum)/2;
                while (myRandomBoardNum == opponentRandomBoardNum)
                {
                    myRandomBoardNum = rnd.Next(1, 8);
                    networkPeer.sendMove(myRandomBoardNum.ToString());
                    opponentRandomBoardNum = Convert.ToInt32(networkPeer.getMove());
                }
                if (myRandomBoardNum > opponentRandomBoardNum)
                    player1turn = true;
                else
                    player1turn = false;
            }

            engine = new KulamiEngine();
            if (gType == GameType.LANMultiplayer)
                engine.StartGame(gType, networkingBoardNum);
            else
                engine.StartGame(gType);

            easyLevelAIOn = easyLevel;
           
            if (engine.CurrentGame.GameType != GameType.LANMultiplayer)
            {
                Random rndMoveFirst = new Random();
                int playFirst = rndMoveFirst.Next(0, 2);

                if (playFirst == 1)
                    player1turn = true;
                else
                    player1turn = false;
            }

            if (engine.CurrentGame.GameType == GameType.LocalComputer)
            {
                if (easyLevelAIOn)
                    easyAI = new EasyAI(engine.CurrentGame);
                else
                    hardAI = new HardAI(engine.CurrentGame);
            }

            ImageBrush ib = new ImageBrush();
            ib.ImageSource = new BitmapImage(new Uri(startupPath + "/images/GameBoard" + engine.GameBoardNumber + ".png", UriKind.Absolute));
            BoardBackground.Background = ib;

            ImageBrush gb = new ImageBrush();
            gb.ImageSource = new BitmapImage(new Uri(startupPath + "/images/GameBackground.jpg", UriKind.Absolute));
            backgroundButton.Background = gb;

            ImageBrush sb = new ImageBrush();
            sb.ImageSource = new BitmapImage(new Uri(startupPath + "/images/soundOnButton.png", UriKind.Absolute));
            toggleSound_Btn.Background = sb;

            ImageBrush rb = new ImageBrush();
            rb.ImageSource = new BitmapImage(new Uri(startupPath + "/images/radarOnButton.png", UriKind.Absolute));
            toggleRadar_Btn.Background = rb;

            ImageBrush mb = new ImageBrush();
            mb.ImageSource = new BitmapImage(new Uri(startupPath + "/images/musicOnButton.png", UriKind.Absolute));
            toggleMusicBtn.Background = mb;
            
            ImageBrush ButtonImage = new ImageBrush();
            ButtonImage.ImageSource = new BitmapImage(new Uri(startupPath + "/images/GenericPlan.png", UriKind.Absolute));
            ApplyBackgroundButtons(ButtonImage);

            ImageBrush RedConquer = new ImageBrush();
            RedConquer.ImageSource = new BitmapImage(new Uri(startupPath + "/images/PlanConquerRed.png", UriKind.Absolute));
            planetConquerOne.Background = RedConquer;

            ImageBrush BlueConquer = new ImageBrush();
            BlueConquer.ImageSource = new BitmapImage(new Uri(startupPath + "/images/PlanConquerBlue.png", UriKind.Absolute));
            planetConquerTwo.Background = BlueConquer;

            DoubleAnimation fadeInAnimation = new DoubleAnimation();
            fadeInAnimation.From = 0.0;
            fadeInAnimation.To = 1.0;
            fadeInAnimation.Duration = new Duration(TimeSpan.FromSeconds(2));

            DoubleAnimation fadeOutAnimation = new DoubleAnimation();
            fadeOutAnimation.From = 1.0;
            fadeOutAnimation.To = 0.1;
            fadeOutAnimation.Duration = new Duration(TimeSpan.FromSeconds(2));

            DoubleAnimation planetConquerOneAnimation = new DoubleAnimation();
            planetConquerOneAnimation.From = 0.0;
            planetConquerOneAnimation.To = 1.0;
            planetConquerOneAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.3));
            planetConquerOneAnimation.AutoReverse = true;

            DoubleAnimation planetConquerTwoAnimation = new DoubleAnimation();
            planetConquerTwoAnimation.From = 0.0;
            planetConquerTwoAnimation.To = 1.0;
            planetConquerTwoAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.3));
            planetConquerTwoAnimation.AutoReverse = true;

            gameOverStoryboard = new Storyboard();
            HumanConquerStoryboard = new Storyboard();
            AIConquerStoryboard = new Storyboard();

            gameOverStoryboard.Children.Add(fadeInAnimation);
            gameOverStoryboard.Children.Add(fadeOutAnimation);
            HumanConquerStoryboard.Children.Add(planetConquerOneAnimation);
            AIConquerStoryboard.Children.Add(planetConquerTwoAnimation);

            Storyboard.SetTargetName(fadeInAnimation, WinnerLabel.Name);
            Storyboard.SetTargetProperty(fadeInAnimation, new PropertyPath(Rectangle.OpacityProperty));
            Storyboard.SetTargetName(fadeOutAnimation, GameBackground.Name);
            Storyboard.SetTargetProperty(fadeOutAnimation, new PropertyPath(Rectangle.OpacityProperty));

            Storyboard.SetTargetName(planetConquerOneAnimation, planetConquerOne.Name);
            Storyboard.SetTargetProperty(planetConquerOneAnimation, new PropertyPath(Rectangle.OpacityProperty));

            Storyboard.SetTargetName(planetConquerTwoAnimation, planetConquerTwo.Name);
            Storyboard.SetTargetProperty(planetConquerTwoAnimation, new PropertyPath(Rectangle.OpacityProperty));

            soundEffectPlayer.PlayStartGameSound();

            if (!player1turn && engine.CurrentGame.GameType == GameType.LocalComputer)
            {
                PlayerTurnLabel.Visibility = Visibility.Hidden;
                ComputerTurnLabel.Visibility = Visibility.Visible;
                MakeAIMove();
            }
            else if (engine.CurrentGame.GameType == GameType.LocalMultiplayer)
            {
                PlayerTurnLabel.Visibility = Visibility.Hidden;
                ComputerTurnLabel.Visibility = Visibility.Hidden;

                if (player1turn)
                    PlayerOneTurnLabel.Visibility = Visibility.Visible;
                else
                    PlayerTwoTurnLabel.Visibility = Visibility.Visible;
            }
        }
예제 #9
0
        private async Task StartNetworkGame(string playerName, LidgrenKulamiPeer.KulamiPeer networkPeer)
        {
            shouldBreakOut = false;
            bool shouldContinue = true;
            bool terminate = false;
            Random rnd = new Random();
            DateTime start = DateTime.Now;
            DateTime end;
            bool keepWaiting;
            if (networkPeer.listener.connection == null)
                keepWaiting = true;
            else if (networkPeer.listener.connection.Status == Lidgren.Network.NetConnectionStatus.None)
                keepWaiting = true;
            else
                keepWaiting = (networkPeer.listener.connection.Status != Lidgren.Network.NetConnectionStatus.Connected);

            while (keepWaiting)
            {
                if(shouldBreakOut)
                {
                    terminate = true;
                    break;
                }
                await Task.Delay(1000);
                Console.WriteLine("Waiting for connection");
                if (networkPeer.listener.connection == null)
                    keepWaiting = true;
                else if (networkPeer.listener.connection.Status == Lidgren.Network.NetConnectionStatus.None)
                    keepWaiting = true;
                else if (networkPeer.listener.connection.Status == Lidgren.Network.NetConnectionStatus.Disconnected)
                {
                    keepWaiting = true;
                    networkPeer.killPeer();
                    networkPeer = null;
                    Console.WriteLine("reconnecting...");
                    networkPeer = new LidgrenKulamiPeer.KulamiPeer(3070);
                    networkPeer.Start();
                }
                else
                    keepWaiting = (networkPeer.listener.connection.Status != Lidgren.Network.NetConnectionStatus.Connected);
                
                end = DateTime.Now;
                if ((end - start).TotalSeconds > 20)
                {
                    shouldContinue = false;
                    networkPeer.killPeer();
                    networkPeer = null;
                    break;
                }
            }
            if (terminate)
            {
                Console.WriteLine("No Longer Looking For Connections. Exiting to Main Menu");
            }
            else if (!shouldContinue)
            {
                Switcher.Switch(new NoConnectionsFoundPage());
            }
            else
            {
                bool connectionLost = false;
                networkPeer.sendMove(playerName);
                string opponentName = networkPeer.getMove();
                while (opponentName == null)
                {
                    await Task.Delay(1000);
                    opponentName = networkPeer.getMove();
                }

                Switcher.Switch(new OpponentNamePage(opponentName));
                await Task.Delay(3000);

                int networkingBoardNum = 0;

                int myRandomBoardNum = rnd.Next(1, 8);

                networkPeer.sendMove(myRandomBoardNum.ToString());
                string move = networkPeer.getMove();
                while (move == null)
                {
                    if (networkPeer.listener.connection.Status == Lidgren.Network.NetConnectionStatus.Connected)
                    {
                        await Task.Delay(1000);
                        move = networkPeer.getMove();
                    }
                    else
                    {
                        connectionLost = true;
                        break;
                    }
                }
                if (!connectionLost)
                {
                    int opponentRandomBoardNum = Convert.ToInt32(move);

                    networkingBoardNum = (myRandomBoardNum + opponentRandomBoardNum) / 2;
                    while (myRandomBoardNum == opponentRandomBoardNum)
                    {
                        myRandomBoardNum = rnd.Next(1, 8);
                        networkPeer.sendMove(myRandomBoardNum.ToString());
                        move = networkPeer.getMove();
                        while (move == null)
                        {
                            if (networkPeer.listener.connection.Status == Lidgren.Network.NetConnectionStatus.Connected)
                            {
                                await Task.Delay(1000);
                                move = networkPeer.getMove();
                            }
                            else
                            {
                                connectionLost = true;
                                break;
                            }
                        }
                        opponentRandomBoardNum = Convert.ToInt32(move);
                    }
                    if (!connectionLost)
                    {
                        bool meFirst;
                        if (myRandomBoardNum > opponentRandomBoardNum)
                            meFirst = true;
                        else
                            meFirst = false;

                        Switcher.Switch(new LANGamePage(networkPeer, networkingBoardNum, meFirst, playerName, opponentName));
                    }
                    else
                    {
                        Switcher.Switch(new ConnectionLostPage());
                    }
                }
                else
                {
                    Switcher.Switch(new ConnectionLostPage());
                }
            }
        }
예제 #10
0
 private async void NextButtonClick(object sender, RoutedEventArgs e)
 {
     soundEffectPlayer.ButtonSound();
     string playerName = (string) LANPlayerNameTextBox.Text;
     if (playerName == "")
         playerName = "Anonymous";
     LidgrenKulamiPeer.KulamiPeer networkPeer = new LidgrenKulamiPeer.KulamiPeer(3070);
     networkPeer.Start();
     Switcher.Switch(new WaitingForConnectionPage(networkPeer));
     await StartNetworkGame(playerName, networkPeer);
 }
예제 #11
0
        private async Task StartNetworkGame(string playerName, LidgrenKulamiPeer.KulamiPeer networkPeer)
        {
            shouldBreakOut = false;
            bool     shouldContinue = true;
            bool     terminate      = false;
            Random   rnd            = new Random();
            DateTime start          = DateTime.Now;
            DateTime end;
            bool     keepWaiting;

            if (networkPeer.listener.connection == null)
            {
                keepWaiting = true;
            }
            else if (networkPeer.listener.connection.Status == Lidgren.Network.NetConnectionStatus.None)
            {
                keepWaiting = true;
            }
            else
            {
                keepWaiting = (networkPeer.listener.connection.Status != Lidgren.Network.NetConnectionStatus.Connected);
            }

            while (keepWaiting)
            {
                if (shouldBreakOut)
                {
                    terminate = true;
                    break;
                }
                await Task.Delay(1000);

                Console.WriteLine("Waiting for connection");
                if (networkPeer.listener.connection == null)
                {
                    keepWaiting = true;
                }
                else if (networkPeer.listener.connection.Status == Lidgren.Network.NetConnectionStatus.None)
                {
                    keepWaiting = true;
                }
                else if (networkPeer.listener.connection.Status == Lidgren.Network.NetConnectionStatus.Disconnected)
                {
                    keepWaiting = true;
                    networkPeer.killPeer();
                    networkPeer = null;
                    Console.WriteLine("reconnecting...");
                    networkPeer = new LidgrenKulamiPeer.KulamiPeer(3070);
                    networkPeer.Start();
                }
                else
                {
                    keepWaiting = (networkPeer.listener.connection.Status != Lidgren.Network.NetConnectionStatus.Connected);
                }

                end = DateTime.Now;
                if ((end - start).TotalSeconds > 20)
                {
                    shouldContinue = false;
                    networkPeer.killPeer();
                    networkPeer = null;
                    break;
                }
            }
            if (terminate)
            {
                Console.WriteLine("No Longer Looking For Connections. Exiting to Main Menu");
            }
            else if (!shouldContinue)
            {
                Switcher.Switch(new NoConnectionsFoundPage());
            }
            else
            {
                bool connectionLost = false;
                networkPeer.sendMove(playerName);
                string opponentName = networkPeer.getMove();
                while (opponentName == null)
                {
                    await Task.Delay(1000);

                    opponentName = networkPeer.getMove();
                }

                Switcher.Switch(new OpponentNamePage(opponentName));
                await Task.Delay(3000);

                int networkingBoardNum = 0;

                int myRandomBoardNum = rnd.Next(1, 8);

                networkPeer.sendMove(myRandomBoardNum.ToString());
                string move = networkPeer.getMove();
                while (move == null)
                {
                    if (networkPeer.listener.connection.Status == Lidgren.Network.NetConnectionStatus.Connected)
                    {
                        await Task.Delay(1000);

                        move = networkPeer.getMove();
                    }
                    else
                    {
                        connectionLost = true;
                        break;
                    }
                }
                if (!connectionLost)
                {
                    int opponentRandomBoardNum = Convert.ToInt32(move);

                    networkingBoardNum = (myRandomBoardNum + opponentRandomBoardNum) / 2;
                    while (myRandomBoardNum == opponentRandomBoardNum)
                    {
                        myRandomBoardNum = rnd.Next(1, 8);
                        networkPeer.sendMove(myRandomBoardNum.ToString());
                        move = networkPeer.getMove();
                        while (move == null)
                        {
                            if (networkPeer.listener.connection.Status == Lidgren.Network.NetConnectionStatus.Connected)
                            {
                                await Task.Delay(1000);

                                move = networkPeer.getMove();
                            }
                            else
                            {
                                connectionLost = true;
                                break;
                            }
                        }
                        opponentRandomBoardNum = Convert.ToInt32(move);
                    }
                    if (!connectionLost)
                    {
                        bool meFirst;
                        if (myRandomBoardNum > opponentRandomBoardNum)
                        {
                            meFirst = true;
                        }
                        else
                        {
                            meFirst = false;
                        }

                        Switcher.Switch(new LANGamePage(networkPeer, networkingBoardNum, meFirst, playerName, opponentName));
                    }
                    else
                    {
                        Switcher.Switch(new ConnectionLostPage());
                    }
                }
                else
                {
                    Switcher.Switch(new ConnectionLostPage());
                }
            }
        }
예제 #12
0
 private void Disconnect()
 {
     if (networkPeer != null)
     {
         networkPeer.killPeer();
         networkPeer = null;
     }
     connected = false;
     Switcher.Switch(new ConnectionLostPage());
 }
예제 #13
0
        private async void planetBtn_Click(object sender, RoutedEventArgs e)
        {
            if (!engine.CurrentGame.IsGameOver() && connected)
            {
                Button btn = sender as Button;
                string btnName = btn.Name.ToString();
                int    row, col;
                row = Convert.ToInt32(btnName.Substring(6, 1));
                col = Convert.ToInt32(btnName.Substring(7, 1));
                Console.WriteLine(row + " " + col);

                if (engine.CurrentGame.IsValidMove(row, col))
                {
                    if (player1turn)
                    {
                        MakeHumanMove(btn, row, col, myColor);
                        if (IsConnected())
                        {
                            networkPeer.sendMove("R" + row.ToString() + col.ToString());
                        }
                        else
                        {
                            Disconnect();
                        }
                        PlayerTurnLabel.Visibility   = Visibility.Hidden;
                        OpponentTurnLabel.Visibility = Visibility.Visible;
                        if (!engine.CurrentGame.IsGameOver() && connected)
                        {
                            if (!IsConnected())
                            {
                                Disconnect();
                            }
                            else
                            {
                                try
                                {
                                    await MakeOpponentMove();
                                }
                                catch
                                {
                                }
                            }
                        }
                    }

                    if (engine.CurrentGame.IsGameOver())
                    {
                        DisableAllMovesOnBoard();
                        await Task.Delay(100);

                        CaptureGameBoard();
                        soundTrackMediaPlayer.Close();
                        gameOverStoryboard.Begin(GameBackground);

                        if (engine.CurrentGame.GameType != GameType.LocalMultiplayer)
                        {
                            if (engine.CurrentGame.GameStats.RedPoints > engine.CurrentGame.GameStats.BluePoints)
                            {
                                if (myColor == "Red")
                                {
                                    WinnerLabel.Foreground = (SolidColorBrush)(new BrushConverter().ConvertFrom("#FFE85252"));
                                    WinnerLabel.Content    = "You Win!";
                                    soundEffectPlayer.WinSound();
                                }
                                else
                                {
                                    WinnerLabel.Content = "You Lose!";
                                    soundEffectPlayer.LostSound();
                                }
                            }
                            else if (engine.CurrentGame.GameStats.RedPoints < engine.CurrentGame.GameStats.BluePoints)
                            {
                                if (myColor == "Blue")
                                {
                                    WinnerLabel.Content = "You Win!";
                                    soundEffectPlayer.WinSound();
                                }
                                else
                                {
                                    WinnerLabel.Foreground = (SolidColorBrush)(new BrushConverter().ConvertFrom("#FFE85252"));
                                    WinnerLabel.Content    = "You Lose!";
                                    soundEffectPlayer.LostSound();
                                }
                            }
                            else
                            {
                                WinnerLabel.Content = "It's a tie!";
                            }
                        }
                        checkConnect.Stop();
                        await Task.Delay(4000);

                        gameOverStoryboard.Begin(GameBackground);
                        soundEffectPlayer.Stop();
                        soundEffectPlayer.Close();
                        soundTrackMediaPlayer.Stop();
                        soundTrackMediaPlayer.Close();
                        networkPeer.killPeer();
                        networkPeer = null;
                        if (myColor == "Blue")
                        {
                            Switcher.Switch(new Scores(engine.CurrentGame.GameStats, myName, opponentsName));
                        }
                        else
                        {
                            Switcher.Switch(new Scores(engine.CurrentGame.GameStats, opponentsName, myName));
                        }
                    }
                }
            }
        }
예제 #14
0
 private void yesButton_Click(object sender, RoutedEventArgs e)
 {
     checkConnect.Stop();
     networkPeer.killPeer();
     networkPeer = null;
     soundEffectPlayer.Stop();
     soundEffectPlayer.Close();
     soundTrackMediaPlayer.Stop();
     soundTrackMediaPlayer.Close();
     Switcher.Switch(new MainPage());
 }
예제 #15
0
        public LANGamePage(LidgrenKulamiPeer.KulamiPeer nPeer, int boardNum, bool meFirst, string mName, string oName)
        {
            InitializeComponent();

            networkPeer = nPeer;
            myName = mName;
            opponentsName = oName;

            if (meFirst)
            {
                PlayerTurnLabel.Visibility = System.Windows.Visibility.Visible;
                PlayerTurnLabel.Foreground = (SolidColorBrush)(new BrushConverter().ConvertFrom("#FFE85252"));
                fuelIndicator1.Visibility = Visibility.Visible;
                OpponentTurnLabel.Visibility = System.Windows.Visibility.Hidden;
                player1turn = true;
                myColor = "Red";
                opponentsColor = "Blue";
            }
            else
            {
                PlayerTurnLabel.Visibility = System.Windows.Visibility.Hidden;
                fuelIndicator2.Visibility = System.Windows.Visibility.Visible;
                OpponentTurnLabel.Visibility = System.Windows.Visibility.Visible;
                OpponentTurnLabel.Foreground = (SolidColorBrush)(new BrushConverter().ConvertFrom("#FFE85252"));
                player1turn = false;
                myColor = "Blue";
                opponentsColor = "Red";
            }

            string songPath = startupPath + "/sound/music/Soundtrack.mp3";
            soundTrackMediaPlayer.Open(new Uri(songPath));
            soundTrackMediaPlayer.MediaEnded += new EventHandler(Song_Ended);
            if (!SoundSetting.MusicOn)
                soundTrackMediaPlayer.IsMuted = true;
            soundTrackMediaPlayer.Play();

            buttonNames = new Dictionary<string, Button>();
            allButtons = GameBoard.Children.OfType<Button>();
            foreach (Button b in allButtons)
            {
                buttonNames.Add(b.Name.ToString(), b);
            }

            engine = new KulamiEngine();
            engine.StartGame(GameType.LANMultiplayer, boardNum);
            soundEffectPlayer.PlayStartGameSound();

            InitializeImages(boardNum);
            if (!meFirst)
            {
                if (!IsConnected())
                {
                    Disconnect();
                }
                else
                {
                    try
                    {
                        MakeOpponentMove();
                    }
                    catch
                    {

                    }
                }
            }
            checkConnect.Elapsed += new ElapsedEventHandler(IfConnecting);
            checkConnect.AutoReset = true;
            checkConnect.Enabled = true;
        }
예제 #16
0
        private async void planetBtn_Click(object sender, RoutedEventArgs e)
        {
            if (!engine.CurrentGame.IsGameOver() && connected)
            {
                Button btn = sender as Button;
                string btnName = btn.Name.ToString();
                int row, col;
                row = Convert.ToInt32(btnName.Substring(6, 1));
                col = Convert.ToInt32(btnName.Substring(7, 1));
                Console.WriteLine(row + " " + col);

                if (engine.CurrentGame.IsValidMove(row, col))
                {
                    if (player1turn)
                    {
                        MakeHumanMove(btn, row, col, myColor);
                        if (IsConnected())
                            networkPeer.sendMove("R" + row.ToString() + col.ToString());
                        else
                            Disconnect();
                        PlayerTurnLabel.Visibility = Visibility.Hidden;
                        OpponentTurnLabel.Visibility = Visibility.Visible;
                        if (!engine.CurrentGame.IsGameOver() && connected)
                        {
                            if (!IsConnected())
                            {
                                Disconnect();
                            }
                            else
                            {
                                try
                                {
                                    await MakeOpponentMove();
                                }
                                catch
                                {

                                }
                            }
                        }
                    }

                    if (engine.CurrentGame.IsGameOver())
                    {
                        DisableAllMovesOnBoard();
                        await Task.Delay(100);
                        CaptureGameBoard();
                        soundTrackMediaPlayer.Close();
                        gameOverStoryboard.Begin(GameBackground);

                        if (engine.CurrentGame.GameType != GameType.LocalMultiplayer)
                        {
                            if (engine.CurrentGame.GameStats.RedPoints > engine.CurrentGame.GameStats.BluePoints)
                            {
                                if (myColor == "Red")
                                {
                                    WinnerLabel.Foreground = (SolidColorBrush)(new BrushConverter().ConvertFrom("#FFE85252"));
                                    WinnerLabel.Content = "You Win!";
                                    soundEffectPlayer.WinSound();
                                }
                                else
                                {
                                    WinnerLabel.Content = "You Lose!";
                                    soundEffectPlayer.LostSound();
                                }
                            }
                            else if (engine.CurrentGame.GameStats.RedPoints < engine.CurrentGame.GameStats.BluePoints)
                            {
                                if (myColor == "Blue")
                                {
                                    WinnerLabel.Content = "You Win!";
                                    soundEffectPlayer.WinSound();
                                }
                                else
                                {
                                    WinnerLabel.Foreground = (SolidColorBrush)(new BrushConverter().ConvertFrom("#FFE85252"));
                                    WinnerLabel.Content = "You Lose!";
                                    soundEffectPlayer.LostSound();
                                }
                            }
                            else
                            {
                                WinnerLabel.Content = "It's a tie!";
                            }
                        }
                        checkConnect.Stop();
                        await Task.Delay(4000);
                        gameOverStoryboard.Begin(GameBackground);
                        soundEffectPlayer.Stop();
                        soundEffectPlayer.Close();
                        soundTrackMediaPlayer.Stop();
                        soundTrackMediaPlayer.Close();
                        networkPeer.killPeer();
                        networkPeer = null;
                        if(myColor == "Blue")
                            Switcher.Switch(new Scores(engine.CurrentGame.GameStats, myName, opponentsName));
                        else
                            Switcher.Switch(new Scores(engine.CurrentGame.GameStats, opponentsName, myName));

                    }
                }
            }
        }
예제 #17
0
        public LANGamePage(LidgrenKulamiPeer.KulamiPeer nPeer, int boardNum, bool meFirst, string mName, string oName)
        {
            InitializeComponent();

            networkPeer   = nPeer;
            myName        = mName;
            opponentsName = oName;

            if (meFirst)
            {
                PlayerTurnLabel.Visibility   = System.Windows.Visibility.Visible;
                PlayerTurnLabel.Foreground   = (SolidColorBrush)(new BrushConverter().ConvertFrom("#FFE85252"));
                fuelIndicator1.Visibility    = Visibility.Visible;
                OpponentTurnLabel.Visibility = System.Windows.Visibility.Hidden;
                player1turn    = true;
                myColor        = "Red";
                opponentsColor = "Blue";
            }
            else
            {
                PlayerTurnLabel.Visibility   = System.Windows.Visibility.Hidden;
                fuelIndicator2.Visibility    = System.Windows.Visibility.Visible;
                OpponentTurnLabel.Visibility = System.Windows.Visibility.Visible;
                OpponentTurnLabel.Foreground = (SolidColorBrush)(new BrushConverter().ConvertFrom("#FFE85252"));
                player1turn    = false;
                myColor        = "Blue";
                opponentsColor = "Red";
            }

            string songPath = startupPath + "/sound/music/Soundtrack.mp3";

            soundTrackMediaPlayer.Open(new Uri(songPath));
            soundTrackMediaPlayer.MediaEnded += new EventHandler(Song_Ended);
            if (!SoundSetting.MusicOn)
            {
                soundTrackMediaPlayer.IsMuted = true;
            }
            soundTrackMediaPlayer.Play();

            buttonNames = new Dictionary <string, Button>();
            allButtons  = GameBoard.Children.OfType <Button>();
            foreach (Button b in allButtons)
            {
                buttonNames.Add(b.Name.ToString(), b);
            }

            engine = new KulamiEngine();
            engine.StartGame(GameType.LANMultiplayer, boardNum);
            soundEffectPlayer.PlayStartGameSound();

            InitializeImages(boardNum);
            if (!meFirst)
            {
                if (!IsConnected())
                {
                    Disconnect();
                }
                else
                {
                    try
                    {
                        MakeOpponentMove();
                    }
                    catch
                    {
                    }
                }
            }
            checkConnect.Elapsed  += new ElapsedEventHandler(IfConnecting);
            checkConnect.AutoReset = true;
            checkConnect.Enabled   = true;
        }
예제 #18
0
        public GamePage(bool easyLevel, GameType gType)
        {
            InitializeComponent();

            string songPath = startupPath + "/sound/music/Soundtrack.mp3";

            soundTrackMediaPlayer.Open(new Uri(songPath));
            soundTrackMediaPlayer.MediaEnded += new EventHandler(Song_Ended);
            soundTrackMediaPlayer.Play();

            if (gType == GameType.LANMultiplayer)
            {
                networkPeer = new LidgrenKulamiPeer.KulamiPeer(3070);
                //wait until connection is established
            }

            buttonNames = new Dictionary <string, Button>();
            allButtons  = GameBackground.Children.OfType <Button>();
            foreach (Button b in allButtons)
            {
                buttonNames.Add(b.Name.ToString(), b);
            }

            int networkingBoardNum = 0;

            if (gType == GameType.LANMultiplayer)
            {
                Random rnd = new Random();
                int    myRandomBoardNum = rnd.Next(1, 8);

                networkPeer.sendMove(myRandomBoardNum.ToString());
                int opponentRandomBoardNum = Convert.ToInt32(networkPeer.getMove());

                networkingBoardNum = (myRandomBoardNum + opponentRandomBoardNum) / 2;
                while (myRandomBoardNum == opponentRandomBoardNum)
                {
                    myRandomBoardNum = rnd.Next(1, 8);
                    networkPeer.sendMove(myRandomBoardNum.ToString());
                    opponentRandomBoardNum = Convert.ToInt32(networkPeer.getMove());
                }
                if (myRandomBoardNum > opponentRandomBoardNum)
                {
                    player1turn = true;
                }
                else
                {
                    player1turn = false;
                }
            }

            engine = new KulamiEngine();
            if (gType == GameType.LANMultiplayer)
            {
                engine.StartGame(gType, networkingBoardNum);
            }
            else
            {
                engine.StartGame(gType);
            }

            easyLevelAIOn = easyLevel;

            if (engine.CurrentGame.GameType != GameType.LANMultiplayer)
            {
                Random rndMoveFirst = new Random();
                int    playFirst    = rndMoveFirst.Next(0, 2);

                if (playFirst == 1)
                {
                    player1turn = true;
                }
                else
                {
                    player1turn = false;
                }
            }

            if (engine.CurrentGame.GameType == GameType.LocalComputer)
            {
                if (easyLevelAIOn)
                {
                    easyAI = new EasyAI(engine.CurrentGame);
                }
                else
                {
                    hardAI = new HardAI(engine.CurrentGame);
                }
            }

            ImageBrush ib = new ImageBrush();

            ib.ImageSource             = new BitmapImage(new Uri(startupPath + "/images/GameBoard" + engine.GameBoardNumber + ".png", UriKind.Absolute));
            BoardBackground.Background = ib;

            ImageBrush gb = new ImageBrush();

            gb.ImageSource = new BitmapImage(new Uri(startupPath + "/images/GameBackground.jpg", UriKind.Absolute));
            backgroundButton.Background = gb;

            ImageBrush sb = new ImageBrush();

            sb.ImageSource             = new BitmapImage(new Uri(startupPath + "/images/soundOnButton.png", UriKind.Absolute));
            toggleSound_Btn.Background = sb;

            ImageBrush rb = new ImageBrush();

            rb.ImageSource             = new BitmapImage(new Uri(startupPath + "/images/radarOnButton.png", UriKind.Absolute));
            toggleRadar_Btn.Background = rb;

            ImageBrush mb = new ImageBrush();

            mb.ImageSource            = new BitmapImage(new Uri(startupPath + "/images/musicOnButton.png", UriKind.Absolute));
            toggleMusicBtn.Background = mb;

            ImageBrush ButtonImage = new ImageBrush();

            ButtonImage.ImageSource = new BitmapImage(new Uri(startupPath + "/images/GenericPlan.png", UriKind.Absolute));
            ApplyBackgroundButtons(ButtonImage);

            ImageBrush RedConquer = new ImageBrush();

            RedConquer.ImageSource      = new BitmapImage(new Uri(startupPath + "/images/PlanConquerRed.png", UriKind.Absolute));
            planetConquerOne.Background = RedConquer;

            ImageBrush BlueConquer = new ImageBrush();

            BlueConquer.ImageSource     = new BitmapImage(new Uri(startupPath + "/images/PlanConquerBlue.png", UriKind.Absolute));
            planetConquerTwo.Background = BlueConquer;

            DoubleAnimation fadeInAnimation = new DoubleAnimation();

            fadeInAnimation.From     = 0.0;
            fadeInAnimation.To       = 1.0;
            fadeInAnimation.Duration = new Duration(TimeSpan.FromSeconds(2));

            DoubleAnimation fadeOutAnimation = new DoubleAnimation();

            fadeOutAnimation.From     = 1.0;
            fadeOutAnimation.To       = 0.1;
            fadeOutAnimation.Duration = new Duration(TimeSpan.FromSeconds(2));

            DoubleAnimation planetConquerOneAnimation = new DoubleAnimation();

            planetConquerOneAnimation.From        = 0.0;
            planetConquerOneAnimation.To          = 1.0;
            planetConquerOneAnimation.Duration    = new Duration(TimeSpan.FromSeconds(0.3));
            planetConquerOneAnimation.AutoReverse = true;

            DoubleAnimation planetConquerTwoAnimation = new DoubleAnimation();

            planetConquerTwoAnimation.From        = 0.0;
            planetConquerTwoAnimation.To          = 1.0;
            planetConquerTwoAnimation.Duration    = new Duration(TimeSpan.FromSeconds(0.3));
            planetConquerTwoAnimation.AutoReverse = true;

            gameOverStoryboard     = new Storyboard();
            HumanConquerStoryboard = new Storyboard();
            AIConquerStoryboard    = new Storyboard();

            gameOverStoryboard.Children.Add(fadeInAnimation);
            gameOverStoryboard.Children.Add(fadeOutAnimation);
            HumanConquerStoryboard.Children.Add(planetConquerOneAnimation);
            AIConquerStoryboard.Children.Add(planetConquerTwoAnimation);

            Storyboard.SetTargetName(fadeInAnimation, WinnerLabel.Name);
            Storyboard.SetTargetProperty(fadeInAnimation, new PropertyPath(Rectangle.OpacityProperty));
            Storyboard.SetTargetName(fadeOutAnimation, GameBackground.Name);
            Storyboard.SetTargetProperty(fadeOutAnimation, new PropertyPath(Rectangle.OpacityProperty));

            Storyboard.SetTargetName(planetConquerOneAnimation, planetConquerOne.Name);
            Storyboard.SetTargetProperty(planetConquerOneAnimation, new PropertyPath(Rectangle.OpacityProperty));

            Storyboard.SetTargetName(planetConquerTwoAnimation, planetConquerTwo.Name);
            Storyboard.SetTargetProperty(planetConquerTwoAnimation, new PropertyPath(Rectangle.OpacityProperty));

            soundEffectPlayer.PlayStartGameSound();

            if (!player1turn && engine.CurrentGame.GameType == GameType.LocalComputer)
            {
                PlayerTurnLabel.Visibility   = Visibility.Hidden;
                ComputerTurnLabel.Visibility = Visibility.Visible;
                MakeAIMove();
            }
            else if (engine.CurrentGame.GameType == GameType.LocalMultiplayer)
            {
                PlayerTurnLabel.Visibility   = Visibility.Hidden;
                ComputerTurnLabel.Visibility = Visibility.Hidden;

                if (player1turn)
                {
                    PlayerOneTurnLabel.Visibility = Visibility.Visible;
                }
                else
                {
                    PlayerTwoTurnLabel.Visibility = Visibility.Visible;
                }
            }
        }