PyConnect-4/main.py

97 lines
2.1 KiB
Python

import os
import sys
def clear():
if sys.platform.startswith('win'):
# For Windows
os.system('cls')
else:
# For Linux and macOS
os.system('clear')
def findLowest(board, column):
return board[column].index("O")
"""
This is how the board should output:
===============
|O|O|O|O|O|O|O|
|O|O|O|O|O|O|O|
|O|O|O|O|O|O|O|
|O|O|O|O|O|O|O|
|O|O|O|O|O|O|O|
|O|O|O|O|O|O|O|
===============
"""
def printBoard(board):
rows = []
for i in range(6):
row = ""
for column in board:
row += "| " + column[i] + " "
row += "|"
rows.append(row)
rows = rows[::-1]
toPrint = ""
for row in rows:
toPrint += (row + "\n")
print(f"=============================\n{toPrint[:-1]}\n=============================")
def getIntInput(prompt):
success = False
inp = ""
while not success:
inp = input(prompt)
try:
inp = int(inp)
break
except:
print("Only integers allowed")
return inp
# Board will be 7x6.
# O = open, R = red, Y = yellow
# because this is defined like this, you could technically save a game then load from where you left off
# This is defined as columns, not rows. So tile 0 on column 0 is the bottom left tile of the board
board = [
['O', 'O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O', 'O'],
]
playing = True
turn = 'R'
while playing:
clear()
printBoard(board)
tile = ""
while tile == "":
try:
chosenColumn = getIntInput(f"{turn} where do you want to drop your tile? 0-6.\n>>> ")
tile = findLowest(board, chosenColumn)
break
except ValueError:
print("You chose a column that is full. Try again")
clear()
printBoard(board)
tile = ""
board[chosenColumn][tile] = turn
turn = 'Y' if turn == 'R' else 'R'