Skip to content

Instantly share code, notes, and snippets.

@sertdfyguhi
Last active February 18, 2021 10:24
Show Gist options
  • Save sertdfyguhi/4135e1916a620365c9910694776ed7d8 to your computer and use it in GitHub Desktop.
Save sertdfyguhi/4135e1916a620365c9910694776ed7d8 to your computer and use it in GitHub Desktop.
connect4 in python (bad code)
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]]
turn = 1
temp = False
def ask():
global turn
if turn == 1:
line = int(input(f'\u001b[33mplayer {turn}\u001b[0m\nline: ')) - 1
else:
line = int(input(f'\u001b[31mplayer {turn}\u001b[0m\nline: ')) - 1
a = 5
if not board[0][line] == 0:
print(f'line {line + 1} is full')
visualize()
ask()
for _ in range(6):
if board[a][line] == 0:
board[a][line] = turn
break
else:
a -= 1
continue
a = find(line, a)
tie = checktie()
if tie:
print('\u001b[32mtie!\u001b[0m')
exit()
if not a:
visualize()
if turn == 1:
turn = 2
else:
turn = 1
ask()
def find(line, a):
h = findhorizontal(line, a)
if h[0] >= 4:
visualize(h[1])
win()
return True
v = findvertical(line, a)
if v[0] >= 4:
visualize(v[1])
win()
return True
s = findslash(line, a)
if s[0] >= 4:
visualize(s[1])
win()
return True
bs = findbackslash(line, a)
if bs[0] >= 4:
visualize(bs[1])
win()
return True
def findhorizontal(line, a):
n = 1
p = [[a, line]]
# west
for _ in range(1, 5):
t = line - _
if t < 0:
break
if board[a][t] == turn:
p.append([a, t])
n += 1
else:
break
# east
for _ in range(1, 5):
t = line + _
if t > 6:
break
if board[a][t] == turn:
p.append([a, t])
n += 1
else:
break
return n, p
def findvertical(line, a):
n = 1
p = [[a, line]]
# south
for _ in range(1, 5):
t = a + _
if t > 5:
break
if board[t][line] == turn:
p.append([t, line])
n += 1
else:
break
return n, p
def findslash(line, a):
n = 1
p = [[a, line]]
# southwest
for _ in range(1, 5):
t = a + _
t1 = line - _
if t > 5:
break
if t1 < 0:
break
if board[t][t1] == turn:
p.append([t, t1])
n += 1
else:
break
# northeast
for _ in range(1, 5):
t = a - _
t1 = line + _
if t < 0:
break
if t1 > 6:
break
if board[t][t1] == turn:
p.append([t, t1])
n += 1
else:
break
return n, p
def findbackslash(line, a):
n = 1
p = [[a, line]]
# northwest
for _ in range(1, 5):
t = a - _
t1 = line - _
if t < 0:
break
if t1 < 0:
break
if board[t][t1] == turn:
p.append([t, t1])
n += 1
else:
break
# southeast
for _ in range(1, 5):
t = a + _
t1 = line + _
if t > 5:
break
if t1 > 6:
break
if board[t][t1] == turn:
p.append([t, t1])
n += 1
else:
break
return n, p
def win():
# print(board)
if turn == 1:
print(f'\u001b[33mplayer {turn} wins!\u001b[0m\n')
else:
print(f'\u001b[31mplayer {turn} wins!\u001b[0m\n')
exit()
def visualize(p = None):
global board
a = ''
b = ''
c = ''
d = ''
e = ''
f = ''
if not p == None:
for _ in p:
board[_[0]][_[1]] = 3
for _ in board[0]:
a += str(_) + ' '
for _ in board[1]:
b += str(_) + ' '
for _ in board[2]:
c += str(_) + ' '
for _ in board[3]:
d += str(_) + ' '
for _ in board[4]:
e += str(_) + ' '
for _ in board[5]:
f += str(_) + ' '
a = a.replace('0', '⬤')
b = b.replace('0', '⬤')
c = c.replace('0', '⬤')
d = d.replace('0', '⬤')
e = e.replace('0', '⬤')
f = f.replace('0', '⬤')
if not p == None:
a = a.replace('3', '\u001b[35m⬤\u001b[0m')
b = b.replace('3', '\u001b[35m⬤\u001b[0m')
c = c.replace('3', '\u001b[35m⬤\u001b[0m')
d = d.replace('3', '\u001b[35m⬤\u001b[0m')
e = e.replace('3', '\u001b[35m⬤\u001b[0m')
f = f.replace('3', '\u001b[35m⬤\u001b[0m')
a = a.replace('1', '\u001b[33m⬤\u001b[0m')
b = b.replace('1', '\u001b[33m⬤\u001b[0m')
c = c.replace('1', '\u001b[33m⬤\u001b[0m')
d = d.replace('1', '\u001b[33m⬤\u001b[0m')
e = e.replace('1', '\u001b[33m⬤\u001b[0m')
f = f.replace('1', '\u001b[33m⬤\u001b[0m')
a = a.replace('2', '\u001b[31m⬤\u001b[0m')
b = b.replace('2', '\u001b[31m⬤\u001b[0m')
c = c.replace('2', '\u001b[31m⬤\u001b[0m')
d = d.replace('2', '\u001b[31m⬤\u001b[0m')
e = e.replace('2', '\u001b[31m⬤\u001b[0m')
f = f.replace('2', '\u001b[31m⬤\u001b[0m')
print(f'{a}\n{b}\n{c}\n{d}\n{e}\n{f}\n')
def checktie():
c = True
for a in board:
for _ in a:
if _ == 0:
c = False
break
return c
visualize()
ask()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment