Depuis quelques temps je souhaite créer un programme en Python (PyScripter 3.2.0.1).
Ce programme est en fait une réalisation numérique d'un Puissance 4 (le jeu de société)
Or, après avoir créé il y a quelques temps un début de programme, permettant de jouer depuis la console Python avec des "X" et des "O" pour compléter un tableau.
Le jeu fonctionne donc, les conditions de victoire également, que ce soit en ligne, en colonne ou en diagonal.
Cependant, j'ai des "effets de bords", en gros des soucis, notamment lorsque la colonne est remplie, ou qu'elle n'existe pas, un message d'erreur fait s'arrêter le programme, et je n'arrive pas à faire simplement apparaître un message demandant de refaire une demande pour un même joueur ...
Seconde partie, j'ai fais un second codage, permettant (toujours sur Python), l'affichage d'une console TK sur laquelle s'affiche une sorte de grille de Puissance 4.
Le soucis majeur à présent, c'est que je souhaite faire fusionner les deux codages, et que l'on puisse jouer directement à partir de la console TK.
Qu'en dessous de chaque colonne s'affiche un bouton permettant de faire tomber un jeton d'une couleur différente (rouge et jaune) en utilisant le code premier des conditions de victoires et de jeu ...
Et étant donné que je n'ai pas pratiqué depuis pas mal de temps, je suis plutôt perdu et malgré différents ouvrages de lu je n'arrive pas à trouver un début de solution sur la méthode à suivre ...
Quelqu'un pourrait-il m'aider ?
Voici les différents codes, fonctionnels, que j'ai fais jusqu'à présent (1 sur le jeu fonctionnel depuis la console python, l'autre sur l'affichage d'une console TK d'une grille de puissance 4)
Programme jeu :
def affmat(A): # affichage d'une matrice ligne par ligne
for i in range(len(A)):
print (A[i])
def creatmat(): #creation de la matrice rectangle de 6X7 remplie avec '_'
A=[]
for i in range (6):
B=[]
for j in range (7):
B.append('_')
A.append(B)
return A
mat=creatmat()
VICTOIRE= False #variable changee en cas de victoire
tour=0 #nombres de tours (pair, joueur 1, X, rouge) (impair, joueur 2, O, jaune)
while VICTOIRE is False:
OK= False #variable pour la verification de la colonne
colonne=int(input("colonne?"))
i=5
j=colonne-1
while OK is False:
test= mat[i][j]
if test=='O' or test=='X':
i-=1
elif test == '_':
if tour%2==0:
mat[i][j]='X'
if tour%2==1:
mat[i][j]='O'
OK=True
affmat (mat)
print('')
tour+=1
#VERIFICATION DE VICTOIRE
if tour>6:
gagnevertic=False #VERTICALEMENT
n=0 #du haut vers le bas
while n<4 and i+n<6 and mat[i+n][j]==mat[i][j]:
n+=1
if n>=4:
gagnevertic=True
gagnehoriz=False #HORIZONTALEMENT
n=0 #vers la gauche
while n<4 and j-n>=0 and mat[i][j-n]==mat[i][j]:
n+=1
m=0 #vers la droite
while m<4 and j+m<7 and mat[i][j+m]==mat[i][j]:
m+=1
if n+m-1>=4:
gagnehoriz=True
gagnediago1=False #OBLIQUEMENT (SO->NE)
n=0 #vers le SO
while n<4 and i-n>=0 and j-n>=0 and mat[i-n][j-n]==mat[i][j]:
n+=1
m=0 #vers le NE
while m<4 and i+m<6 and j+m<7 and mat[i+m][j+m]==mat[i][j]:
m+=1
if n+m-1>=4:
gagnediago1=True
gagnediago2=False #OBLIQUEMENT (NO->SE)
n=0 #vers le NO
while n<4 and i+n<6 and j-n>=0 and mat[i+n][j-n]==mat[i][j]:
n+=1
m=0 #vers le SE
while m<4 and i-m>=0 and j+m<7 and mat[i-m][j+m]==mat[i][j]:
m+=1
if n+m-1>=4:
gagnediago2=True
if gagnevertic==True or gagnehoriz==True or gagnediago1==True or gagnediago2==True: #si l'un d'une condition est remplie le joueur gagne
VICTOIRE=True
print ("Partie finie, les", mat[i][j], " gagnent")