Mam problem z kółko i krzyżyk w c#

0

jak jest kolej X to się restartują zmienne pole 1 ,2 ,3, 4, 5, 6,7, 8, 9 kod na dole


namespace tic_tac_toe
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Witaj w Tic Tac Toe")
            string poel1 = "1,";
            string poel2 = "2,";
            string poel3 = "3";
            string poel4 = "4,";
            string poel5 = "5,";
            string poel6 = "6";
            string poel7 = "7,";
            string poel8 = "8,";
            string poel9 = "9";

            Console.WriteLine(poel1 + poel2 + poel3);
            Console.WriteLine(poel4 + poel5 + poel6);
            Console.WriteLine(poel7 + poel8 + poel9);

            ruchO(poel1, poel2, poel3, poel4, poel5, poel6, poel7, poel8, poel9);
            ruchX(poel1, poel2, poel3, poel4, poel5, poel6, poel7, poel8, poel9);
        }
        static void ruchO(string pole1, string pole2, string pole3, string pole4, string pole5, string pole6, string pole7, string pole8, string pole9)
        {
            Console.WriteLine("Ruch ma O");
            var wybor = Console.ReadLine();
            if (wybor.ToString() == 1.ToString())
            {
                pole1 = "O,";
            }
            if (wybor.ToString() == 2.ToString())
            {
                pole2 = "O,";
            }
            if (wybor.ToString() == 3.ToString())
            {
                pole3 = "O";
            }
            if (wybor.ToString() == 4.ToString())
            {
                pole4 = "O,";
            }
            if (wybor.ToString() == 5.ToString())
            {
                pole5 = "O,";
            }
            if (wybor.ToString() == 6.ToString())
            {
                pole6 = "O";
            }
            if (wybor.ToString() == 7.ToString())
            {
                pole7 = "O,";
            }
            if (wybor.ToString() == 8.ToString())
            {
                pole8 = "O,";
            }
            if (wybor.ToString() == 9.ToString())
            {
                pole9 = "O";
            }

            Console.WriteLine(pole1 + pole2 + pole3);
            Console.WriteLine(pole4 + pole5 + pole6);
            Console.WriteLine(pole7 + pole8 + pole9);
        }
        static void ruchX(string pole1, string pole2, string pole3, string pole4, string pole5, string pole6, string pole7, string pole8, string pole9)
        {
            Console.WriteLine("Ruch ma X");
            var wybor = Console.ReadLine();

            if (wybor.ToString() == 1.ToString())
            {
                pole1 = "X,";
            }
            if (wybor.ToString() == 2.ToString())
            {
                pole2 = "X,";
            }
            if (wybor.ToString() == 3.ToString())
            {
                pole3 = "X";
            }
            if (wybor.ToString() == 4.ToString())
            {
                pole4 = "X,";
            }
            if (wybor.ToString() == 5.ToString())
            {
                pole5 = "X,";
            }
            if (wybor.ToString() == 6.ToString())
            {
                pole6 = "X";
            }
            if (wybor.ToString() == 7.ToString())
            {
                pole7 = "X,";
            }
            if (wybor.ToString() == 8.ToString())
            {
                pole8 = "X,";
            }
            if (wybor.ToString() == 9.ToString())
            {
                pole9 = "X";
            }
            Console.WriteLine(pole1 + pole2 + pole3);
            Console.WriteLine(pole4 + pole5 + pole6);
            Console.WriteLine(pole7 + pole8 + pole9);
        }

    }
}```
0

Bosch, jakie to brzydkie.
Użyj jakiś tablic, pętli, a nie kopiuj po 9 razy tego samego.
A na te liczby, niektóre z przecinkiem, to mi się flaki wywracają.
Skąd wziąłeś aż tak fatalne wzory pisania?

Póki co, to anty przykład uczenia się, czyli zmniejszasz swoje walory , a nie zwiększasz.

Mam od lat swoją własną zasadę:* kod, który jest brzydki, jest prawie na pewno błędny*

Zaorać, splunąć trzy razy wstecz, na popiołach zrobić na nowo

1

poel.

Abstrahując już od sensowności tych ifów: wybor.ToString() == 1.ToString(), to serio nie prościej napisać "1" zamiast 1.ToString()?
No i wybor jest już stringiem, po co na nim ToString() wołać?

2

Nie ma sensu naprawiać tego. Zgadzam się z @AnyKtokolwiek. Zaorać. Wróć do tego jak opanujesz tablice, pętle i instrukcję switch.

PS.
A wiesz, że wystarczy dodać parametr przyjmujący wpisywany znak i można z dwóch funkcji ruch zrobić jedną?

1

Nudzi mi sią ostatnio. Nieco wg oryginalnego schematu, żeby było łatwiej zrozumieć.


void Main()
{
	Console.WriteLine("Witaj w Tic Tac Toe");

	string[] fields = new String[] {"1", "2", "3", "4", "5", "6", "7", "8", "9"};
	
	
	PrintFields(fields);
	
	ruchO(fields);
	ruchX(fields);
}


static void ruchO(string[] fields)
{
	Console.WriteLine("Ruch ma O");
	var wybor = Console.ReadLine();
	int i = -1;
	if (int.TryParse(wybor, out i))
	{
			fields[i-1] = "o";
	}

	PrintFields(fields);
}
static void ruchX(string[] fields)
{
	Console.WriteLine("Ruch ma X");
	var wybor = Console.ReadLine();
	int i = -1;
	if (int.TryParse(wybor, out i))
	{
		fields[i-1] = "x";
	}
	PrintFields(fields);
}

static void PrintFields(string[] fields)
{
	Console.WriteLine($"{fields[0]}{fields[1]}{fields[2]}");
	Console.WriteLine($"{fields[3]}{fields[4]}{fields[5]}");
	Console.WriteLine($"{fields[6]}{fields[7]}{fields[8]}");
}
0

Więc ktokolwiek tu zaglądający, który się uczy niech zobaczy jak korzysta się poprawnie dobrodziejstwa funkcji w programowaniu. Wystarczy jedna funkcja (metoda) ruch. Resztę pozostawiam bez zmian.

void Main()
{
    Console.WriteLine("Witaj w Tic Tac Toe");

    string[] fields = new String[] {"1", "2", "3", "4", "5", "6", "7", "8", "9"};

    PrintFields(fields);

    ruch("O", fields);
    ruch("X", fields);
}

static void ruch(string symbol, string[] fields)
{
    Console.WriteLine($"Ruch ma {symbol}");
    var wybor = Console.ReadLine();
    int i = -1;
    if (int.TryParse(wybor, out i))
    {
            fields[i-1] = symbol.ToLower();
    }

    PrintFields(fields);
}

static void PrintFields(string[] fields)
{
    Console.WriteLine($"{fields[0]}{fields[1]}{fields[2]}");
    Console.WriteLine($"{fields[3]}{fields[4]}{fields[5]}");
    Console.WriteLine($"{fields[6]}{fields[7]}{fields[8]}");
}

(Po prostu musiałem, bo bym się udusił)

1

Ja nie wiem, po co to cudo w ogóle ciągnąć. Nie dość, że można wykonać dwa ruchy, to jeszcze oba na tym samym polu. Nie wiem co to jest, ale na pewno nie kółko i krzyżyk.

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