# puissance4.py

Created by schraf

Created on March 28, 2021

1.48 KB

Explications en vidéo

`BTS = [42,43,44,36,37,38,30]` correspond aux codes des touches de 1 à 7 sur la machine.

```from kandinsky import *
from ion import *
from time import sleep

BL,RO,GR,NR,WH = (0,0,255), (255,0,0), (200,)*3, (0,)*3, (250,)*3
BTS = [42,43,44,36,37,38,30]
plateau = [[0] * 7 for i in range(6)]

def grille():
for i in range(8):
fill_rect(55 + 30 * i, 25, 1, 180, GR)
if i < 7:
fill_rect(55, 25 + 30 * i, 210, 1, GR)
draw_string(str(i+1), 65 + 30 * i, 5, NR)

def touche():
while True:
for i in BTS:
if keydown(i):
sleep(.5)
return BTS.index(i)

def jouer(c, j):
for l in range(6):
if plateau[l][c] == 0:
plateau[l][c] = j
draw_string("XO"[j-1], 66 + 30 * c, 182 - 30 * l, [BL,RO][j-1])
return [c,l]
return False

def gagne(p):
if not(p): return False
[c,l] = p
val = plateau[l][c]
for [u,v] in [[1,0],[0,1],[1,1],[-1,1]]:
total = 1
for d in [1,-1]:
x, y = c + d * u, l + d * v
while (0 <= x < 7) and (0 <= y < 6):
if plateau[y][x] == val:
total += 1
x += d * u
y += d * v
else: break
if total > 3: return True
return False

def aff(j):
t = "JOUEUR "+ "XO"[j-1] + " GAGNE" if j else " PARTIE NULLE "
t = 5*"=" + t + 5*"="
draw_string(t, 40, 5, WH, [GR,BL,RO][j])

def go():
grille()
coups, joueur = 0, 1
while True:
c = touche()
pos = jouer(c, joueur)
if gagne(pos):
aff(joueur)
return
if pos:
joueur = 3 - joueur
coups += 1
if coups == 42:
aff(0)
return

go()```