我制作了TicTacToe,并且制作了一个名为“ GameLoop”的类,因为我希望自己的主要代码“清晰”。
我尝试将方法设置为静态,因此我只能在类中使用它,尝试添加Thread但不做任何更改。
#region variables
static char[] arr = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
//by default I am providing 0-9 where no use of zero
static int player = 1; //By default player 1 is set
static int choice; //This holds the choice at which position user want to mark
// The flag veriable checks who has won if it's value is 1 then some one has won the match if -1 then Match has Draw if 0 then match is still running
static int flag = 0;
#endregion
#region Methods
// Board method which creats board
public static void Board()
{
Console.WriteLine(" | | ");
Console.WriteLine(" {0} | {1} | {2}", arr[1], arr[2], arr[3]);
Console.WriteLine("_____|_____|_____ ");
Console.WriteLine(" | | ");
Console.WriteLine(" {0} | {1} | {2}", arr[4], arr[5], arr[6]);
Console.WriteLine("_____|_____|_____ ");
Console.WriteLine(" | | ");
Console.WriteLine(" {0} | {1} | {2}", arr[7], arr[8], arr[9]);
Console.WriteLine(" | | ");
}
//Checking that any player has won or not
private static int CheckWin()
{
#region Horzontal Winning Condtion
//Winning Condition For First Row
if (arr[1] == arr[2] && arr[2] == arr[3])
{
return 1;
}
//Winning Condition For Second Row
else if (arr[4] == arr[5] && arr[5] == arr[6])
{
return 1;
}
//Winning Condition For Third Row
else if (arr[6] == arr[7] && arr[7] == arr[8])
{
return 1;
}
#endregion
#region vertical Winning Condtion
//Winning Condition For First Column
else if (arr[1] == arr[4] && arr[4] == arr[7])
{
return 1;
}
//Winning Condition For Second Column
else if (arr[2] == arr[5] && arr[5] == arr[8])
{
return 1;
}
//Winning Condition For Third Column
else if (arr[3] == arr[6] && arr[6] == arr[9])
{
return 1;
}
#endregion
#region Diagonal Winning Condition
else if (arr[1] == arr[5] && arr[5] == arr[9])
{
return 1;
}
else if (arr[3] == arr[5] && arr[5] == arr[7])
{
return 1;
}
#endregion
#region Checking For Draw
// If all the cells or values filled with X or O then any player has won the match
else if (arr[1] != '1' && arr[2] != '2' && arr[3] != '3' && arr[4] != '4' && arr[5] != '5' && arr[6] != '6' && arr[7] != '7' && arr[8] != '8' && arr[9] != '9')
{
return -1;
}
else
{
return 0;
}
#endregion
}
#endregion
public static void Loop()
{
do
{
Console.Clear();// whenever loop will be again start then screen will be clear
Console.WriteLine("Player 1 => X & Player 2 => O");
Console.WriteLine("\n");
if (player % 2 == 0)//checking which turn is it.
{
Console.WriteLine("Player 2 Turn: ");
}
else
{
Console.WriteLine("Player 1 Turn: ");
}
Console.WriteLine("\n");
// calling the board Function
if (player == 1)
{
Console.Write("Player 1 choose your position: ");
choice = int.Parse(Console.ReadLine());//Taking users choice
}
else
{
Console.Write("Player 2 choose your position: ");
choice = int.Parse(Console.ReadLine());//Taking users choice
}
// checking that position where user want to run is marked (with X or O) or not
if (arr[choice] != 'X' && arr[choice] != 'O')
{
if (player % 2 == 0) //if chance is of player 2 then mark O else mark X
{
arr[choice] = 'O';
player++;
}
else
{
arr[choice] = 'X';
player++;
}
}
else //If there is any possition where user want to run and that is already marked then show message and load board again
{
Console.WriteLine("Sorry the row {0} is already marked with {1}", choice, arr[choice]);
Console.WriteLine("\n");
Thread.Sleep(2000);
}
flag = CheckWin();// calling of check win
} while (flag != 1 && flag != -1);// This loof will be run until all cell of the grid is not marked with X and O or some player is not win
Console.Clear();// clearing the console
GameLoop.Board();// getting filled board again
if (flag == 1)// if flag value is 1 then some one has win or means who played marked last time which has win
{
Console.WriteLine("Player {0} has won", (player % 2) + 1);
}
else// if flag value is -1 the match will be draw and no one is winner
{
Console.WriteLine("Draw");
}
Console.ReadLine();
}
方法“ Board”应该输出该板,现在我根本看不到该板,当我在main中调用它时,也只有它可以工作!