Skill Factory
Lista post > Impariamo a programmare in Python, giocando al "Solitario del Ferroviere" - Lezione 1
Impariamo a programmare in Python, giocando al "Solitario del Ferroviere" - Lezione 1
Gino Visciano |
Skill Factory - 18/12/2019 20:28:16 | in Tutorials
Regole del gioco
Il Solitario del Ferroviere è un passatempo che si può giocare con le carte napoletane, le regole del gioco sono le seguenti:
1) Mischiare le carte e metterle al centro;
2) Pensare ad una carta del mazzo;
3) Alzare una carta dal mazzo;
4) Se la carta alzata è uguale a quella pensata, mettere la carta a sinistra, altrimenti metterla a destra;
5) Continuare a giocare mentre ci sono carte nel mazzo centrale;
6) Quando le carte del mazzo centrale finiscono, mentre ci sono carte a destra (carte non indovinate), mischiare le carte, metterle al centro e ricominciare a giocare.
Per semplificare la realizzazione del gioco con Python, utilizzeremo solo 10 carte napoletane , come mostra l'immagine seguente:
Il Diagramma di Flusso segunte descrive l'Algoritmo per giocare al Solitario del Ferroviere:
La pseudo-codifica seguente descrive meglio le strutture logiche dell'Algoritmo per giocare al Solitario del Ferroviere, soprattutto perché permette di riconoscere i cicli che spesso nei Diagrammi di Flusso vengono confusi con le selezioni.
#Algoritmo in pseudo-codifica, per giocare al solitario del ferroviere
Inizio
Inizio Mentre
Mischia le carte e mettile al centro
Inizio Mentre
Pensa ad una carta
Alza una carta
Se carta pensata==carta alzata allora
Metti la carta a sinistra
Altrimenti
Metti la carta a destra
Fine Se
Mentre carte al centro !=0
Mentre carte a destra !=0
Fine
In questa prima lezione implementeremo la funzione Python che permette di scegliere la carta pensata, come mostra l'immagine seguente:
Cosa serve per iniziare
Per iniziare dovete installare Python (almeno la versione 3.8), per scrivere il codice, vi suggerisco di usare come ide (integrated development environment ) Visual Studio Code.
Usando la guida seguente potete installare sia Python che Visual Studio Code: guida_installazione.
Inoltre dovete installare le seguenti librerie Python:
- pygame
- pillow
- time
con i comandi seguenti:
pip install pygame
pip install Pillow
pip install time
Se il comando pip non è installato, procedete nel modo seguente:
1) Scaricate il file get-pip.py;
2) Eseguite il comando: python get-pip.py.
Cosa dovete sapere
a=10 # Variabile intera
b=2.5 # Variabile Decimale
nome='Mario' # Variabile Stringa
flag=True # Variabile Booleana
Le liste sono insiemi dinamici di valori, per dichiarare una lista si usa la sintassi seguente:
valori=[10,20,30] # Lista di valori di tipo intero
nominativi=['Mario','Clara','Paolo','Roberta'] # Lista di valori di tipo Stringa
elenco=[] # Lista di valori vuota non ancora tipizzata
Per aggiungere un elemento ad una lista si usa il metodo append, come mostra l'esempio seguente:
elencoValori=[] # Lista di valori vuota non ancora tipizzata
# Aggiungo tre valori alla lista
elencoValori.append(10)
elencoValori.append(20)
elencoValori.append(30)
# Ciclo usato per visualizzare il contenuto della lista, i assume ad ogni ripetizione i valori seguenti: 0,1 e 2
for i in range(0,3):
print(elencoValori[i])
L'esempio seguente, si differenzia da quello precedente, perchè per visualizzare il contenuto della lista usa un foreach.
Questa struttura di programmazione permette di leggere il contenuto di una lista senza usare l'indice dell'elemento da visualizzare, perché automaticamente ad ogni iterazione (loop) legge il valore seguente e lo assegna alla variabile del ciclo.
elencoValori=[] # Lista di valori vuota non ancora tipizzata
# Aggiungo tre valori alla lista
elencoValori.append(10)
elencoValori.append(20)
elencoValori.append(30)
# Ciclo foreach, ad ogni ripetizione ad a viene assegnato un valore della lista elencoValori
for a in elencoValori:
print(a)
Analisi del codice Python
import pygame # Importo la libreria pygame per gestire i suoni
import tkinter as tk # Importo la libreria tkinter con alias (abbreviazione) tk, per gestire il pannello su cui giocare
from PIL import Image, ImageTk # Importo da PIL le librerie per gestire le immagini
from tkinter import messagebox # Importo da tkinter la libreria per gestire una finestra modale per gestire la fine del programma (game over)
import time #Importo la libreria time per gestire il tempo attraverso l'orologio di sistema
indice_carta_pensata=0
flag=True
def carica_immagini_carte():
immagini_carte=[]
immagini_carte.append(ImageTk.PhotoImage(Image.open('Carte_Napoletane_retro.png')))
immagini_carte.append(ImageTk.PhotoImage(Image.open('1coppe.png')))
immagini_carte.append(ImageTk.PhotoImage(Image.open('2coppe.png')))
immagini_carte.append(ImageTk.PhotoImage(Image.open('3coppe.png')))
immagini_carte.append(ImageTk.PhotoImage(Image.open('4coppe.png')))
immagini_carte.append(ImageTk.PhotoImage(Image.open('5coppe.png')))
immagini_carte.append(ImageTk.PhotoImage(Image.open('6coppe.png')))
immagini_carte.append(ImageTk.PhotoImage(Image.open('7coppe.png')))
immagini_carte.append(ImageTk.PhotoImage(Image.open('8coppe.png')))
immagini_carte.append(ImageTk.PhotoImage(Image.open('9coppe.png')))
immagini_carte.append(ImageTk.PhotoImage(Image.open('10coppe.png')))
return immagini_carte
# Questa funzione incrementa la variabile indice_carta_pensata, per cambiare la carta visualizzata, viene eseguite ogni volta che si esegue un click sul pulsante cambia
def cambia():
# indica che la variabile indice_carta_pensata è una variabile globale, creata all'esterno della funzione
global indice_carta_pensata
# Imposta l'immagine della carta corrente
label_carta_pensata.config(image=immagini_carte[indice_carta_pensata])
# Visualizza la carta corrente alla posizione indicata
label_carta_pensata.place(x=5,y=40)
if indice_carta_pensata<10:
indice_carta_pensata=indice_carta_pensata+1
else:
indice_carta_pensata=1
# Emette un suono ed imposta una pausa 0.1 secondi
pygame.mixer_music.load("TickSound.mp3")
pygame.mixer_music.play()
time.sleep(0.1)
# Questa funzione inizializza il pannello di gioco
def start():
global indice_carta_pensata
# Visualizza il pulsante cambia, che ad ogni click esegue la funzione cambia()
pulsante_cambia.place(x=60,y=370)
label_titolo_carta_pensata.place(x=25,y=5)
label_carta_pensata.place(x=5,y=40)
# Inizializza la gestione dei suoni
pygame.init()
indice_carta_pensata=2
# Crea il pannello di gioco
root = tk.Tk()
root.wm_title('Solitario del ferroviere') # Imposta il titolo del pannello di gioco
root.geometry("215x450") # Imposta le dimensioni del pannello di gioco
root.resizable(False, False) # Disabilità il ridimensionamento del pannello di gioco
# Preparazione pulsanti ed etichette, l'attributo commad permette di indicare la funzione eseguita quando si clicca sul pulsante
pulsante_cambia=tk.Button(root,text="CAMBIA", width=10, height=2, bd = 3,command=cambia, bg="green",font=("Helvetica", 12))
label_titolo_carta_pensata=tk.Label(root, text="CARTA PENSATA",font=("Helvetica", 14))
# Prepara il vettore con i riferimenti alle immagini delle carte
immagini_carte=carica_immagini_carte()
# Carica nell'etichetta la prima carta del mazzo
label_carta_pensata=tk.Label(root, image=immagini_carte[1])
# Inizializza l'applicazione e visualizza l'etichetta ed il bottone cambia
start()
root.mainloop() # Rende il pannello di gioco interattivo
Nella prossima lezione implementeremo la funzione per girare le carte del mazzo centrale.
Arrivederci ...
Per scaricare le risorse di questa lezione clicca sul link seguente: risorse_lezione_01
Resto a casa a fare formazione ...
Anche durante il lockdown non ci siamo mai fermati, erogando oltre 3000 ore di formazione e laboratorio in Smart-Learning/Working. Grazie al nostro impegno, durante il periodo di emergenza COVID, 50 giovani programmatori hanno iniziato un tirocinio formativo presso un nostro Job partner IT, con l'opportunità di essere assunti a settembre 2020.
Tutto quello che ti serve per diventare programmatore te lo insegniamo noi!
Vuoi partecipare ad una "Skill Factory"? Invia il tuo CV a recruiting@skillfactory.it, ti contatteremo per verificare se hai i prerequisiti richiesti.
Non cerchiamo talenti o esperti d'Informatica, ma giovani seri e volenterosi, predisposti a risolvere problemi logici.
Sei un programmatore esperto?
Pensi che la tua esperienza possa essere utile agli utenti della nostra community?
Cosa aspetti, conttattaci! Puoi diventare un nostro "Competence partner" e dare valore alla tua esperienza ...
mail: sid@skillfactory.it
Per far parte della nostra community registrati su www.skillbook.it.
T U T O R I A L S S U G G E R I T I
- TypeScript
- Impariamo Python giocando al "Solitario del ferroviere"
- Impariamo a programmare con JavaScript
- Laboratori di Logica di programmazione in C
- Introduzione alla Logica degli oggetti
- Ricominciamo ... dal Linguaggio SQL
- APP Mania
- Come sviluppare un Sito con Wordpress
- Excel delle meraviglie
EDUCATIONAL GAMING BOOK (EGB) "H2O"
Nell'era dello SMART LEARNING e di PYTHON i libri non si scrivono, ma si sviluppano, in questo modo chi studia, può sperimentare ed apprendere contemporaneamente; un libro con queste caratteristiche lo possiamo definire un Educational Gaming Book (EGB).
"H2O" è un EGB che descrive tutte le caratteristiche dell'acqua, la sostanza formata da molecole di H2O, che attraverso il suo ciclo di vita garantisce la sopravvivenza di tutti gli esseri viventi del Pianeta.
L'obiettivo dell'EGB è quello di far conoscere ai giovani le proprietà dell'acqua, sotto molti aspetti uniche, per sensibilizzarli a salvaguardare un bene comune e raro, indispensabile per la vita.
Per il DOWNLOAD di "H2O" clicca qui.