summaryrefslogtreecommitdiff
path: root/projects_blog/presentation_code/tictactoe.md
diff options
context:
space:
mode:
Diffstat (limited to 'projects_blog/presentation_code/tictactoe.md')
-rw-r--r--projects_blog/presentation_code/tictactoe.md175
1 files changed, 0 insertions, 175 deletions
diff --git a/projects_blog/presentation_code/tictactoe.md b/projects_blog/presentation_code/tictactoe.md
deleted file mode 100644
index dab8c4f..0000000
--- a/projects_blog/presentation_code/tictactoe.md
+++ /dev/null
@@ -1,175 +0,0 @@
-```python
-#Next Steps:
-# Build & export move log for games
-# Build a board timeline variable/class - Export this?
-# Build an analysys board class for bots to use thinking through the next commands.
-# Look into usin scikit-learn to create a decistion tree model, then have a bot level that loads and uses the model. - See if you could have it programmed itself playing against the other bot levels. Probably need an X model & O model.
-# Probably need to translate some of the variables as classes -- THIS WILL BE GOOD FOR EDUCATION -- I NEED TO PRACTICE OBJECT-ORIENTED PROGRAMMING AT LEAST ONCE YOU'D THINK.
-# Probably should export the bot functionality to a separate module
-
-
-import random
-
-def prt_brd(brd):
- print(f"""
-3 {brd[0][2]}|{brd[1][2]}|{brd[2][2]}
-2 {brd[0][1]}|{brd[1][1]}|{brd[2][1]}
-1 {brd[0][0]}|{brd[1][0]}|{brd[2][0]}
- a b c
-""")
-
-def rnd(i = 1): return random.randint(0,i)
-
-def bot_cmd(lvl, trn, brd):
- if lvl >= 1:
- #check for potential victory
- #check files and ranks
- for r in range(0,3):
- if brd[r].count(trn) == 2 and brd[r].count(' ') == 1: return file_name[r]+rank_name[brd[r].index(' ')]
- if (brd[0][r]+brd[1][r]+brd[2][r]).count(trn) == 2 and (brd[0][r]+brd[1][r]+brd[2][r]).count(' ') == 1: return file_name[(brd[0][r]+brd[1][r]+brd[2][r]).index(' ')]+rank_name[r]
-
- #check diagonals
- if (brd[0][0]+brd[1][1]+brd[2][2]).count(trn) == 2 and (brd[0][0]+brd[1][1]+brd[2][2]).count(' ') == 1: return file_name[(brd[0][0]+brd[1][1]+brd[2][2]).index(' ')]+rank_name[(brd[0][0]+brd[1][1]+brd[2][2]).index(' ')]
- if (brd[0][2]+brd[1][1]+brd[2][0]).count(trn) == 2 and (brd[0][2]+brd[1][1]+brd[2][0]).count(' ') == 1: return file_name[(brd[0][2]+brd[1][1]+brd[2][0]).index(' ')]+rank_name[(brd[2][0]+brd[1][1]+brd[0][2]).index(' ')]
-
- if lvl >= 2:
- alt_trn = plr_trn[trn == 'X']
- #check for potential next-turn loss
- #check files and ranks
- for r in range(0,3):
- if brd[r].count(alt_trn) == 2 and brd[r].count(' ') == 1: return file_name[r]+rank_name[brd[r].index(' ')]
- if (brd[0][r]+brd[1][r]+brd[2][r]).count(alt_trn) == 2 and (brd[0][r]+brd[1][r]+brd[2][r]).count(' ') == 1: return file_name[(brd[0][r]+brd[1][r]+brd[2][r]).index(' ')]+rank_name[r]
-
- #check diagonals
- if (brd[0][0]+brd[1][1]+brd[2][2]).count(alt_trn) == 2 and (brd[0][0]+brd[1][1]+brd[2][2]).count(' ') == 1: return file_name[(brd[0][0]+brd[1][1]+brd[2][2]).index(' ')]+rank_name[(brd[0][0]+brd[1][1]+brd[2][2]).index(' ')]
- if (brd[0][2]+brd[1][1]+brd[2][0]).count(alt_trn) == 2 and (brd[0][2]+brd[1][1]+brd[2][0]).count(' ') == 1: return file_name[(brd[0][2]+brd[1][1]+brd[2][0]).index(' ')]+rank_name[(brd[2][0]+brd[1][1]+brd[0][2]).index(' ')]
-
- if lvl >= 3:
- random.shuffle(vic_rng)
- rng_ind = [0, 1, 2]
- #build on existing rows
- for rng in vic_rng:
- for d in range(0,3):
- if rng == file_name[d] and brd[d].count(trn) == 1 and brd[d].count(' ') == 2:
- rng_ind.remove(brd[d].index(trn))
- return file_name[d]+rank_name[rng_ind[rnd()]]
- elif rng == rank_name[d] and (brd[0][d]+brd[1][d]+brd[2][d]).count(trn) == 1 and (brd[0][d]+brd[1][d]+brd[2][d]).count(' ') == 2:
- rng_ind.remove((brd[0][d]+brd[1][d]+brd[2][d]).index(trn))
- return file_name[rng_ind[rnd()]]+rank_name[d]
- if rng == 'd1' and (brd[0][0]+brd[1][1]+brd[2][2]).count(trn) == 1 and (brd[0][0]+brd[1][1]+brd[2][2]).count(' ') == 2:
- rng_ind.remove((brd[0][0]+brd[1][1]+brd[2][2]).index(trn))
- f = rng_ind[rnd()]
- return file_name[f]+rank_name[f]
- elif rng == 'd2' and (brd[0][2]+brd[1][1]+brd[2][0]).count(trn) == 1 and (brd[0][2]+brd[1][1]+brd[2][0]).count(' ') == 2:
- rng_ind.remove((brd[0][2]+brd[1][1]+brd[2][0]).index(trn))
- f = rng_ind[rnd()]
- return file_name[f]+rank_name[2 - f]
-
- while True:
- f = rnd(2)
- r = rnd(2)
- if board[f][r] == ' ': return file_name[f]+rank_name[r]
-
-rank = [' ', ' ', ' ']
-file = [' ', ' ', ' ']
-file_name = ['a', 'b', 'c']
-rank_name = ['1', '2', '3']
-f = 0
-r = 0
-d = 0
-turn = 'X'
-vic_chk = False
-valid_move = False
-board = [file[:], file[:], file[:]]
-plrs = -1
-plrs_str = '0'
-plr = [False, False]
-plr_trn = ('X', 'O')
-one_plr = 'X'
-bot_lvl = [-1, -1]
-lvl_str = ''
-bot_lvl_name = ['Random', 'Easy', 'Medium', 'Medium_2']
-vic_rng = file_name + rank_name + ['d1', 'd2']
-rng = ''
-rng_ind = [0, 1, 2]
-
-input("""----- TIC TAC TOE -----
-Press Enter to play!
-""")
-
-while plrs > 2 or plrs < 0:
- plrs_str = input("Enter the number of players: ")
- if len(plrs_str) > 0:
- if plrs_str[0].isnumeric(): plrs = int(plrs_str[0])
-print()
-
-for r in range(0, plrs):
- plr[r] = True
-
-if plrs == 1:
- while True:
- one_plr = input("Do you want play as the X's or as the O's? ").upper()
- if len(one_plr) > 0:
- if one_plr[0] == 'X' or one_plr[0] == 'O':
- plr = [one_plr[0] == 'X', one_plr[0] == 'O']
- print()
- break
-
-if False in plr:
- for r in range(0, len(bot_lvl_name)):
- print(f"Level {r} - {bot_lvl_name[r]}")
- print()
-
-for r in range(0,2):
- while not plr[r] and bot_lvl[r] == -1:
- lvl_str = input(f"Please select {plr_trn[r]} bot level number: ")
- if len(lvl_str) > 0:
- if lvl_str[0].isnumeric(): bot_lvl[r] = int(lvl_str[0])
-
-prt_brd(board)
-
-while True:
-
- valid_move = False
- while not valid_move:
- #player uses input()
- #computer uses bot_cmd()
- if plr[turn == 'O']: cmd = input(f"{turn} to Move: ")
- else:
- cmd = bot_cmd(bot_lvl[turn == 'O'], turn, board)
- print(f"{turn} to Move: {cmd}")
- if len(cmd) == 2:
- if file_name.count(cmd[0]) == 1 and rank_name.count(cmd[1]) == 1:
- f = file_name.index(cmd[0])
- r = rank_name.index(cmd[1])
- if board[f][r] == ' ':
- board[f][r] = turn
- valid_move = True
- else: print("Illegal move")
- else: print("Invalid move")
- else: print("Invalid move")
-
- prt_brd(board)
-
- #check for victory
- #check files and ranks
- for r in range(0,3):
- if board[r].count(turn) == 3: vic_chk = True
- if (board[0][r]+board[1][r]+board[2][r]).count(turn) == 3: vic_chk = True
-
- #check diagonals
- if (board[0][0]+board[1][1]+board[2][2]).count(turn) == 3: vic_chk = True
- if (board[0][2]+board[1][1]+board[2][0]).count(turn) == 3: vic_chk = True
-
- if vic_chk: break
- if board[0].count(' ') + board[1].count(' ') + board[2].count(' ') == 0: break
-
- turn = plr_trn[turn == 'X']
-
-if vic_chk: print(f"{turn} Wins!")
-else: print("Draw")
-
-input()
-input("""----- Thank you for playing! -----
-Press Enter to exit.
-""") \ No newline at end of file