Wankan

Highly Experimental TicTacToe

Aug 27th, 2020 (edited)
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #Setting up constants
  2. Game = {
  3.   State: {
  4.     X: 1,
  5.     O: 2,
  6.     Blank: 0,
  7.   },
  8.   N: 3,
  9.   MoveCount: 0,
  10.   Won: 0
  11. }
  12. Game.Board = [[Game.Blank for i in [0..Game.N]] for j in [0..Game.N]]
  13.  
  14. # Move has access to all of Moves variables
  15. Game.Move = with input(x, y, playerSign) do:
  16.   board[x, y] as tile =
  17.     tile == Game.Blank
  18.       ? player_sign
  19.       : tile
  20.   ++ Game.MoveCount
  21.  
  22.   Game.Won = Game.HorizontalCheck (x, player_sign) || Game.VerticalCheck (y, player_sign) || Game.DiagonalsCheck (x, y)
  23.       ? playerSign
  24.       : Game.Blank
  25.  
  26. Game.HorizontalCheck = (x, sign) => All @ Game.Board[x]^0 == sign
  27. Game.VerticalCheck = (x, sign) => All @ Game.Board^0[y] == sign
  28. #Change this to work for all board sizes
  29. Game.DiagonalCheck = with Game.Board as b (x, y) =>
  30.   x == 1 XOR y == 1 ? False
  31.   : b[0][0] == b[1][1] == b[2][2] || b[0][2] == b[1][1] == b[2][0]
  32.  
  33. Game.ParseInputs = {
  34.   raw => raw.split " ",
  35.   string_indices ^> 0,
  36.   => .toNumber (),
  37. }
  38.  
  39. Game.rowToDisplay =
  40.   state => case state of
  41.     Game.State.X -> "X"
  42.     Game.State.O -> "O"
  43.     Game.State.Blank -> " "
  44.  
  45. Game.Display = do:
  46.    for row in Game.Board:
  47.     print "--------"
  48.     print join " | " row ~ Game.rowToDisplay
  49.  
  50. Game.DisplayWinner = do:
  51.   print "Player {} has won".format
  52.     Game.Won == Game.State.X
  53.       ? "X"
  54.       : "O"
  55.  
  56.  
  57. #Running the Game
  58. Game.DisplayRules ()
  59. Game.CurrentPlayer = 1
  60. while Game.Won == 0 with Game, IO do:
  61.   IO.CleanConsole ""
  62.   Game.Display ()
  63.   (x, y) = (raw_input "Your Turn") ~ Game.ParseInputs
  64.   Game.Move x y Game.CurrentPlayer
  65.   Game.CurrentPlayer as p = p == Game.State.X ? Game.State.O : Game.Satate.X
  66.  
  67. Game.DisplayWinner ()
Add Comment
Please, Sign In to add comment