1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
| # -*- coding: utf-8 -*-
# Nom : Echiquier_03.py
# Role : Lecture et affichage d'un echiquier (64 cases)
# afin de visualiser la partie en direct sur un moniteur
# implante sur une RPi
#************************** bibliotheques ****************************
from ABE_helpers import ABEHelpers
from ABE_IoPi import IoPi
import time
import os
from classe import *
i2c_helper = ABEHelpers()
i2c_bus = i2c_helper.get_smbus()
from tkinter import*
import tkinter
#**************************** fonctions ******************************
def initPlateau(): # initialisation echiquier
global plateau
plateauAvant = [[1 for i in range (8)] for j in range(8)]
for i in range(2,6):
for j in range(8):
plateauAvant[i][j] = 0
def affichage(): # affichage console du plateau
global plateau_figure
for i in range(8):
for j in range(8):
print(plateau_figure[i][j], end = '\t')
print()
def lecturePlateau():
global plateauAvant
for i in range(4): # Pour chaque Bus des cartes IoPi Plus
dx = 0
for j in range(16): # Lecture des 16 cases de ce Bus
plateau[i+dx][j%8] = bus[i].read_pin(j+1)
if j>7 : #Separation des 16Pin du Bus en 2 lignes
dx = 1
def Actualisation():
if plateauApres != plateauAvant: # Si les deux plateaux sont differents
for a in range (8):
for b in range (8):
# On cherche où se situe la difference sur le plateau
if plateauApres[a][b] != plateauAvant[a][b]:
# On cherche ensuite la deuxième difference
# On cherche sur toute les lignes
for x in range (8):
# On cherche dans les colonnes avant b
for y in range (b):
if plateauApres[x][y] != plateauAvant[x][y]:
# Si on a trouvé la deuxieme difference alors on
# inverse les deux difference sur le plateau_figure
# La piece se retrouve à la place du zero et inversement
plateau_figure[x][y],plateau_figure[a][b]=plateau_figure[a][b],plateau_figure[x][y]
#Le plateau initial est actualisé
plateauAvant = plateauApres
else:
pass
# On cherche les colonnes apres b
for y in range (b+1,8):
if plateauApres[x][y] != plateauAvant[x][y]:
plateau_figure[x][y],plateau_figure[a][b]=plateau_figure[a][b],plateau_figure[x][y]
#Le plateau initial est actualisé
plateauAvant = plateauApres
else:
pass
# On cherche ensuite toutes les colonnes
for y in range (8):
# Mais seulement les lignes avant a
for x in range (a):
if plateauApres[x][y] != plateauAvant[x][y]:
plateau_figure[x][y],plateau_figure[a][b]=plateau_figure[a][b],plateau_figure[x][y]
#Le plateau initial est actualisé
plateauAvant = plateauApres
else:
pass
# On cherche ensuite toutes les lignes apres a
for x in range (a+1,8):
if plateauApres[x][y] != plateauAvant[x][y]:
plateau_figure[x][y],plateau_figure[a][b]=plateau_figure[a][b],plateau_figure[x][y]
#Le plateau initial est actualisé
plateauAvant = plateauApres
else:
pass
else:
pass
elif plateauApres == plateauAvant: # Si les deux plateaux sont les memes
time.sleep(1) # alors on attend 1s puis on recommence
#-------------------------------------declarations ----------------------------
i2c_helper = ABEHelpers()
i2c_bus = i2c_helper.get_smbus()
bus = [] # Liste contenant les differents Bus
#Carte Extension 1
bus.append(IoPi(i2c_bus, 0x27)) # attribution bus 1 et 2 : carte 1
bus.append(IoPi(i2c_bus, 0x26))
#Carte Extension 1
bus.append(IoPi(i2c_bus, 0x20)) # attribution bus 3 et 4 : carte 2
bus.append(IoPi(i2c_bus, 0x23))
for i in range(4):
bus[i].set_port_direction(0, 0xFF) # direction : 1 = sortie
bus[i].set_port_direction(1, 0xFF) # bus 16 bits = 2x8 bits
bus[i].set_port_pullups(0, 0xFF) # pull-up interne : 1
bus[i].set_port_pullups(1, 0xFF)
plateauApres=[[1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1]]
plateau_figure=[[tn1,cn1,fn1,roin,ren,fn2,cn2,tn2], # t=tour
[pn1,pn2,pn3,pn4,pn5,pn6,pn7,pn8], # c=cavalier
[ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ], # f=fou
[ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ], # roi
[ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ], # re=reine
[ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ], # p=pion
[pb1,pb2,pb3,pb4,pb5,pb6,pb7,pb8], # n=noir et b=blanc
[tb1,cb1,fb1,roib,reb,fb2,cb2,tb2]] # suivi du numéro
#******************************* Main ********************************
if __name__ == '__main__':
plateauAvant = [[]*8]
initPlateau()
while True:
lecturePlateau()
actualisation()
affichage() |
Partager