Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- namespace TicTacTow
- {
- class TicTacToe
- {
- List<string> CurrentBoardLayout = new List<string> { "1", "2", "3", "4", "5", "6", "7", "8", "9"};
- bool HasGameFinished = false;
- public void Play()
- {
- UpdateBoard();
- while (!HasGameFinished)
- {
- Console.WriteLine("\nPlayer1:");
- int player1Pos = RequestInput();
- CurrentBoardLayout[player1Pos - 1] = "X";
- UpdateBoard();
- if (CheckWinner())
- {
- break;
- }
- Console.WriteLine("\nPlayer2:");
- int player2Pos = RequestInput();
- CurrentBoardLayout[player2Pos - 1] = "O";
- UpdateBoard();
- CheckWinner();
- }
- }
- void UpdateBoard()
- {
- Console.Clear();
- Console.WriteLine("Player1: X Player2: O");
- Console.WriteLine($"\n[{CurrentBoardLayout[0]}]\t[{CurrentBoardLayout[1]}]\t[{CurrentBoardLayout[2]}]");
- Console.WriteLine($"\n[{CurrentBoardLayout[3]}]\t[{CurrentBoardLayout[4]}]\t[{CurrentBoardLayout[5]}]");
- Console.WriteLine($"\n[{CurrentBoardLayout[6]}]\t[{CurrentBoardLayout[7]}]\t[{CurrentBoardLayout[8]}]");
- }
- int RequestInput()
- {
- Console.WriteLine("\nWhere do you want to go? (Use numbers 1 - 9)");
- int number = 0;
- bool isInputStringValid = false;
- while (!isInputStringValid)
- {
- string inputString = Console.ReadLine();
- if (Int32.TryParse(inputString, out number))
- {
- if (number >= 1 && number <= 9)
- {
- if (CurrentBoardLayout[number - 1] != "X" && CurrentBoardLayout[number - 1] != "O")
- {
- isInputStringValid = true;
- }
- else
- {
- Console.WriteLine($"That tile is already marked with {CurrentBoardLayout[number]}");
- }
- }
- else
- {
- Console.WriteLine("Number wasn't a valid number. The number must be between 1 and 9");
- }
- }
- else
- {
- Console.WriteLine("Value inputted wasn't a number. Please enter a number between 1 and 9");
- }
- }
- return number;
- }
- bool CheckWinner()
- {
- bool isThereAWinner = false;
- string winningPlayer = "";
- // Check horiozontal wins
- if (CurrentBoardLayout[0] == CurrentBoardLayout[1] && CurrentBoardLayout[1] == CurrentBoardLayout[2])
- {
- isThereAWinner = true;
- winningPlayer = CurrentBoardLayout[0];
- }
- if (CurrentBoardLayout[3] == CurrentBoardLayout[4] && CurrentBoardLayout[4] == CurrentBoardLayout[5])
- {
- isThereAWinner = true;
- winningPlayer = CurrentBoardLayout[3];
- }
- if (CurrentBoardLayout[6] == CurrentBoardLayout[7] && CurrentBoardLayout[7] == CurrentBoardLayout[8])
- {
- isThereAWinner = true;
- winningPlayer = CurrentBoardLayout[6];
- }
- // Check vertical wins
- if (CurrentBoardLayout[0] == CurrentBoardLayout[3] && CurrentBoardLayout[3] == CurrentBoardLayout[6])
- {
- isThereAWinner = true;
- winningPlayer = CurrentBoardLayout[0];
- }
- if (CurrentBoardLayout[1] == CurrentBoardLayout[4] && CurrentBoardLayout[4] == CurrentBoardLayout[7])
- {
- isThereAWinner = true;
- winningPlayer = CurrentBoardLayout[1];
- }
- if (CurrentBoardLayout[2] == CurrentBoardLayout[5] && CurrentBoardLayout[5] == CurrentBoardLayout[8])
- {
- isThereAWinner = true;
- winningPlayer = CurrentBoardLayout[2];
- }
- // Check diagonal wins
- if (CurrentBoardLayout[0] == CurrentBoardLayout[4] && CurrentBoardLayout[4] == CurrentBoardLayout[8])
- {
- isThereAWinner = true;
- winningPlayer = CurrentBoardLayout[0];
- }
- if (CurrentBoardLayout[2] == CurrentBoardLayout[4] && CurrentBoardLayout[4] == CurrentBoardLayout[6])
- {
- isThereAWinner = true;
- winningPlayer = CurrentBoardLayout[2];
- }
- // Check if game is a draw
- bool isThereEmptyTiles = false;
- foreach (string position in CurrentBoardLayout)
- {
- if (position != "X" && position != "O")
- {
- isThereEmptyTiles = true;
- }
- }
- if (!isThereEmptyTiles && !isThereAWinner)
- {
- isThereAWinner = true;
- winningPlayer = "both";
- }
- if (isThereAWinner)
- {
- HasGameFinished = true;
- if (winningPlayer == "both")
- {
- Console.WriteLine("Game is a draw");
- }
- else
- {
- Console.WriteLine($"Winner is: {(winningPlayer == "X" ? "Player1" : "Player2")}");
- }
- }
- return isThereAWinner;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement