HOME/Articles/

Tris

Article Outline

Example Python program Tris.py

Modules

  • import tkinter
  • import pygame
  • from pandas import *
  • from tkinter import *
  • from tkinter import messagebox

Methods

  • def ControllaVittoria():

Code

Python tkinter example

import tkinter

import pygame
from pandas import *
from tkinter import *
from tkinter import messagebox

def ControllaVittoria():
       # Vedo se ha vinto in verticale
    if posizione_delle_x[0][0] == posizione_delle_x[1][0] == posizione_delle_x[2][0]:
        root = tkinter.Tk()
        root.withdraw()
        messagebox.showinfo('Vittoria', 'Il giocatore %s ha vinto premi spazio per resettare' % giocatore)
    elif posizione_delle_x[0][1] == posizione_delle_x[1][1] == posizione_delle_x[2][1]:
        root = tkinter.Tk()
        root.withdraw()
        messagebox.showinfo('Vittoria', 'Il giocatore %s ha vinto premi spazio per resettare' % giocatore)
    elif posizione_delle_x[0][2] == posizione_delle_x[1][2] == posizione_delle_x[2][2]:
        root = tkinter.Tk()
        root.withdraw()
        messagebox.showinfo('Vittoria', 'Il giocatore %s ha vinto premi spazio per resettare' % giocatore)

        # Vedo se ha vinto nella linea orizzontale
    if posizione_delle_x[0][0] == posizione_delle_x[0][1] == posizione_delle_x[0][2]:
        root = tkinter.Tk()
        root.withdraw()
        messagebox.showinfo('Vittoria', 'Il giocatore %s ha vinto premi spazio per resettare' % giocatore)
    elif posizione_delle_x[1][0] == posizione_delle_x[1][1] == posizione_delle_x[1][2]:
        root = tkinter.Tk()
        root.withdraw()
        messagebox.showinfo('Vittoria', 'Il giocatore %s ha vinto premi spazio per resettare' % giocatore)
    elif posizione_delle_x[2][0] == posizione_delle_x[2][1] == posizione_delle_x[2][2]:
        root = tkinter.Tk()
        root.withdraw()
        messagebox.showinfo('Vittoria', 'Il giocatore %s ha vinto premi spazio per resettare' % giocatore)

        # Vedo se ha vinto in 1 diagonale
    if posizione_delle_x[0][0] == posizione_delle_x[1][1] == posizione_delle_x[2][2]:
        root = tkinter.Tk()
        root.withdraw()
        messagebox.showinfo('Vittoria', 'Il giocatore %s ha vinto premi spazio per resettare' % giocatore)

        # Vedo se ha vinto nell'altra diagonale
    if posizione_delle_x[0][2] == posizione_delle_x[1][1] == posizione_delle_x[2][0]:
        root = tkinter.Tk()
        root.withdraw()
        messagebox.showinfo('Vittoria', 'Il giocatore %s ha vinto premi spazio per resettare' % giocatore)

pygame.init()

win = pygame.display.set_mode((550,550))

pygame.display.set_caption("Tris")

#Stampo i rettangoli e li aggiungo alle liste
x = 25
y = 25

#Ho inizializzato alla matrice valori sopra il 3 cosi non interferiscono con il punteggio della partita
posizione_delle_x = [[0 for x in range(3)] for y in range(3)]
a = 5
for l in range(3):
    for p in range(3):
        posizione_delle_x[l][p] = a
        a += 5


lista = []
lista2 = []
for i in range(1,10):
    rett = pygame.draw.rect(win, (255, 255, 255), (x, y, 150, 150))
    lista.append(((255, 255, 255), [x, y, 150, 150]))
    lista2.append(rett)
    x+=175
    if i % 3 == 0:
        y += 175
        x = 25
funzione = True
cont = 0
cont_board = 0
while funzione:

    for evento in pygame.event.get():
        if evento.type == pygame.QUIT:
            funzione = False
        #Se spazio è premuto allora cancello tutto
        if evento.type == pygame.KEYDOWN:
            if evento.key == pygame.K_SPACE:
                a = 5
                l = 0
                p = 0
                for l in range(3):
                    for p in range(3):
                        posizione_delle_x[l][p] = a
                        a += 5
                lista = []
                lista2 = []
                x = 25
                y = 25
                cont = 0
                # Riscrivo tutto perchè è stato premuto spazio
                for i in range(1, 10):
                    rett = pygame.draw.rect(win, (255, 255, 255), (x, y, 150, 150))
                    lista.append(((255, 255, 255), [x, y, 150, 150]))
                    lista2.append(rett)
                    x += 175
                    if i % 3 == 0:
                        y += 175
                        x = 25

        #Vedo la posizone del click del mouse
        if evento.type == pygame.MOUSEBUTTONUP:
            posizione = pygame.mouse.get_pos()
            for i in range(0,9):
                #Se il click è dentro un quadrato allora lo coloro
                 if lista2[i].collidepoint(posizione):
                    #Se le volte premute dal player è pari e su quella casella non c'è goà un colore allora mette il colore rosso
                    if cont % 2 == 0 and lista[i] != True:
                        giocatore = "Rosso"
                        color, (x, y, w, h) = lista[i]
                        color=(255,0,0)
                        lista[i] = True
                        cont_board = i
                        #visto che la matrice è composta da 3x3 ovviamente non si può superare il valore 2
                        #quindi sottraggo -6 o -3 cosi da avere posizione 0,1 o 2
                        if i >= 6:
                            cont_board = cont_board - 6
                        elif i >= 3:
                            cont_board = cont_board - 3
                        # in base a i che indica la posizone dei quadrati per esempio i = 0
                        # è il prima quadrato cioè quello in alto a sinistra i = 1 è quello affianco ecc
                        if i < 3:
                            posizione_delle_x[0][cont_board] = 1
                        elif i < 6:
                            posizione_delle_x[1][cont_board] = 1
                        else:
                            posizione_delle_x[2][cont_board] = 1
                        ControllaVittoria()
                        cont += 1
                        cont_board += 1
                    #Se le volte premute dal player è pari e su quella casella non c'è goà un colore allora mette il colore blu
                    elif cont % 2 != 0 and lista[i] != True:
                        giocatore = "Blu"
                        color, (x, y, w, h) = lista[i]
                        color=(0,0,255)
                        lista[i] = True
                        cont_board = i
                        if i >= 6:
                            cont_board = cont_board - 6
                        elif i >= 3:
                            cont_board = cont_board - 3
                        #in base a i che indica la posizone dei quadrati per esempio i = 0
                        #è il prima quadrato cioè quello in alto a sinistra i = 1 è quello affianco ecc
                        if i < 3:
                            posizione_delle_x[0][cont_board] = 2
                        elif i < 6:
                            posizione_delle_x[1][cont_board] = 2
                        else:
                            posizione_delle_x[2][cont_board] = 2
                        ControllaVittoria()

                        cont_board += 1
                        cont += 1
                    pygame.draw.rect(win, color, pygame.Rect(x, y, w, h))
                    #Se il contatore raggiunge 9 e nessuno dei 2 giocatori ha vinto allora è un pareggio
                    if cont == 9:
                        root = tkinter.Tk()
                        root.withdraw()
                        messagebox.showinfo('Pareggio', 'Nessuno dei 2 giocatori ha vinto')
    pygame.display.update()
pygame.quit()