2024-02-26 15:08:34 +11:00

118 lines
3.2 KiB
Python

#!/usr/bin/python3
import time
import sys
import os
class Game:
def __init__(self):
self.player = 1
self.board = [[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]]
self.labels = [1, 2, 3, 4, 5, 6, 7]
def draw_board(self):
for x in self.board:
for y in range(len(x)):
print(x[y], end=" ")
print("")
def draw_labels(self):
for x in self.labels:
print(x, end=" ")
print("")
def turn(self, slot):
landed_piece = False
if slot > 6:
raise Exception("You fucked up")
if self.board[0][slot] != 0:
# The space is filled and no longer valid
return
for x in range(len(self.board)):
if self.board[x][slot] != 0:
self.board[x-1][slot] = self.player
landed_piece = True
break
if landed_piece is False:
self.board[len(self.board) - 1][slot] = self.player
self.player = 2 if self.player == 1 else 1
def is_board_won(self):
def _verticle_win(board):
for x in range(7):
instances = [0,0]
for y in range(6):
if board[y][x] == 1:
instances[0] += 1
elif board[y][x] == 2:
instances[1] += 1
if instances[0] == 4:
return 1
elif instances[1] == 4:
return 2
return 0
def _horizontal_win(board):
for x in range(6):
for y in range(7):
f = board[x][y]
if board[x][y] != 0:
try:
if board[x][y + 1] == board[x][y] and board[x][y + 2] == board[x][y] and board[x][y + 3] == board[x][y]:
return board[x][y]
except IndexError:
# We hit the bounds of the board so we don't care
pass
return 0
def _diagonal_win(board):
return 0
hor = _horizontal_win(self.board)
ver = _verticle_win(self.board)
diag = _diagonal_win(self.board)
if hor != 0:
return hor
if ver != 0:
return ver
if diag != 0:
return diag
return 0
if __name__ == '__main__':
playing = True
game = Game()
while playing is True:
os.system('clear')
win = game.is_board_won()
if win != 0:
print(f"Player {win} has won")
game.draw_board()
sys.exit()
print(f"It is player {game.player}'s turn")
game.draw_board()
print('-------------')
game.draw_labels()
in_data = input("(q/quit) Where do you want to put your piece? ")
if in_data == 'q' or in_data == "quit":
playing = False
break
try:
in_data = int(in_data) - 1
game.turn(in_data)
except Exception as e:
print(f"Got an error: {e}")