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);
            
        }
        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());
                }
            }
        }
Example #3
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;
        }