UWP problem przy pisaniu TicTacToe zliczanie zwycięztw

0

Witam,
mam problem przy pisaniu kodu dla TicTacToe, konkretnie nie mam pojęcia jak mogę dołączyć do gry zliczanie zwycięstw dla kółka i dla krzyżyka. Dodam że jest to zwykły single player. Przy wpf jest to dość proste tutaj jednak nie mam pomysłu. Proszę o jakieś wskazówki.

0

Niezbyt rozumiem w czym masz konkretnie problem. Jak byś to zrobił w WPF, a nie możesz zrobić w UWP?

0

Przy WPF to Form_Load wystarczy obsłużyć, ale tutaj w UWP?

0

Pokaż kod w WPF w jaki sposób byś to obsłużył to Ci doradzimy.

0

Ok, coś się udało ale nie do końca. Spróbowałem sił w UWP ale mam problem w tym miejscu:

if (turn_count == 9)
{
draws_score_box.Text = (++draws).ToString();
if (Msgbox.Show("Remis"))
{
resetButtonsAndTurns();
}
else
canceled_new_game = true;
}

wyświetla błąd Error CS0029 Cannot implicitly convert type 'void' to 'bool'

Wcześniej aby wyświetlić Msgbox zrobiłem metode async
public static class Msgbox
{
static public async void Show(string mytext)
{
var dialog = new MessageDialog(mytext);
await dialog.ShowAsync();
}
}

0
  1. W IF-ie wywołujesz metodę która nic nie zwraca, więc jak IF ma sprawdzić jej wynik działania?
  2. Wyświetlasz jakiś MessageBox użytkownikowi ale ten box nie ma żadnego przycisku? Wyświetl jakiś MessageBox z np.: "reset game" i "continue" i zbierz od użytkownika odpowiedź i ją zwróć....
0

Poniżej jest cały kod sprawdzający wygranąi założenie było takie że ma też wyświetlaćw txtblock'ach zwycięztwa x i zwycięztwa y. Teraz problem cały czas tkwi w błędzie wyświetla błąd Error CS0029 Cannot implicitly convert type 'void' to 'bool' . Ciągle ten sam.
Moglibyście pomóc i powiedzieć jak to poprawić?
Co do Msgboxa wiem że nie ma tam żadnych przycisków, póki co są na polu gry.

  private void checkForWinner()
        {
            //HORIZONTAL
            bool winner = false;
            if ((A1.Content == A2.Content) && (A2.Content == A3.Content) && (!A1.IsEnabled))
                winner = true;

            else if ((B1.Content == B2.Content) && (B2.Content == B3.Content) && (!B1.IsEnabled))
                winner = true;

            else if ((C1.Content == C2.Content) && (C2.Content == C3.Content) && (!C1.IsEnabled))
                winner = true;

            //VERTICAL
            else if ((A1.Content == B1.Content) && (B1.Content == C1.Content) && (!A1.IsEnabled))
                winner = true;

            else if ((A2.Content == B2.Content) && (B2.Content == C2.Content) && (!A2.IsEnabled))
                winner = true;

            else if ((A3.Content == B3.Content) && (B3.Content == C3.Content) && (!A3.IsEnabled))
                winner = true;


            //PRZEKĄTNA
            else if ((A1.Content == B2.Content) && (B2.Content == C3.Content) && (!A1.IsEnabled))
                winner = true;

            else if ((A3.Content == B2.Content) && (B2.Content == C1.Content) && (!C1.IsEnabled))
                winner = true;



            if (winner)
            {
                disableButtons();

                if (turn)
                {
                    O_score_box.Text = (++O_score).ToString();
                    if (Msgbox.Show("gracz O Wygrał"))
                    {
                        resetButtonsAndTurns();
                    }
                    //{
                    //    Winner = "Gracz O";
                    //    O_score_box.Text = (++O_score).ToString();
                    //    resetButtonsAndTurns();
                    //}
                    else
                        canceled_new_game = true;
                }
                else
                {
                    X_score_box.Text = (++X_score).ToString();
                    if (Msgbox.Show("gracz X Wygrał"))
                    {
                        resetButtonsAndTurns();
                    }
                    else
                        canceled_new_game = true;
                }

            }
  else
            {
                if (turn_count == 9)
                {
                    draws_score_box.Text = (++draws).ToString();
                    if (Msgbox.show("Remis"))
                    {
                        resetButtonsAndTurns();
                    }

                    else
                        canceled_new_game = true;
                }

            }

        }


0

Twoja funkkcja Msgbox.Show() jest typu void, więc nie możesz na niej zrobić porównanie ifem.

Możesz zrobić tak:

public static class Msgbox
{
    static public async Task<bool> Show(string mytext)
    {
        var dialog = new MessageDialog(mytext);
        await dialog.ShowAsync();
        
        return true;
    }
}

Teraz ona zwróci true dopiero, kiedy ShowAsync() się zakończy (nie wiem czy nie kończy się przypadkiem wtedy, kiedy człowiek zamknie okienko).

0

Super! dzięki za odpowiedź. Teraz tylko jest problem w tym momencie: konkretnie nie można konwertować Task<bool> na bool? da radę to jakoś poprawić?

        if (winner)
        {
            disableButtons();

            if (turn)
            {
                O_score_box.Text = (++O_score).ToString();
                if (Msgbox.Show("gracz O Wygrał"))
                {
                    resetButtonsAndTurns();
               }
                else
                    canceled_new_game = true;
            }
0

a może sobie poczytaj trochę więcej co?

var result = await Show("And");
0

Tak, jasne, jestem na samym początku drogi z programowaniem, co dzień mam większą wiedzę. Dzięki ogromne za pomoc!.

0

Jeszcze jedno pytanie. Dlaczego po jednej turze gdy nacisnę na jedno z pól (Button) wyskakuje Msgbox("Gracz X Wygrał"), choć powinien resetować bo jest metoda resetButtonsAndTurns() która wygląda tak:

  private void resetButtonsAndTurns()
        {
            turn = true;       
            turn_count = 0;
            canceled_new_game = false;

            foreach (Button c in buttonArray)
            {
                try
                {
                    Button b = c;
                    b.IsEnabled = true;
                    b.Content = " " ;
                }
                catch { }
            }
        }

1 użytkowników online, w tym zalogowanych: 0, gości: 1