Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Setting up constants
- Game = {
- State: {
- X: 1,
- O: 2,
- Blank: 0,
- },
- N: 3,
- MoveCount: 0,
- Won: 0
- }
- Game.Board = [[Game.Blank for i in [0..Game.N]] for j in [0..Game.N]]
- # Move has access to all of Moves variables
- Game.Move = with input(x, y, playerSign) do:
- board[x, y] as tile =
- tile == Game.Blank
- ? player_sign
- : tile
- ++ Game.MoveCount
- Game.Won = Game.HorizontalCheck (x, player_sign) || Game.VerticalCheck (y, player_sign) || Game.DiagonalsCheck (x, y)
- ? playerSign
- : Game.Blank
- Game.HorizontalCheck = (x, sign) => All @ Game.Board[x]^0 == sign
- Game.VerticalCheck = (x, sign) => All @ Game.Board^0[y] == sign
- #Change this to work for all board sizes
- Game.DiagonalCheck = with Game.Board as b (x, y) =>
- x == 1 XOR y == 1 ? False
- : b[0][0] == b[1][1] == b[2][2] || b[0][2] == b[1][1] == b[2][0]
- Game.ParseInputs = {
- raw => raw.split " ",
- string_indices ^> 0,
- => .toNumber (),
- }
- Game.rowToDisplay =
- state => case state of
- Game.State.X -> "X"
- Game.State.O -> "O"
- Game.State.Blank -> " "
- Game.Display = do:
- for row in Game.Board:
- print "--------"
- print join " | " row ~ Game.rowToDisplay
- Game.DisplayWinner = do:
- print "Player {} has won".format
- Game.Won == Game.State.X
- ? "X"
- : "O"
- #Running the Game
- Game.DisplayRules ()
- Game.CurrentPlayer = 1
- while Game.Won == 0 with Game, IO do:
- IO.CleanConsole ""
- Game.Display ()
- (x, y) = (raw_input "Your Turn") ~ Game.ParseInputs
- Game.Move x y Game.CurrentPlayer
- Game.CurrentPlayer as p = p == Game.State.X ? Game.State.O : Game.Satate.X
- Game.DisplayWinner ()
Add Comment
Please, Sign In to add comment