Voici mon script, qui fait simplement une liste des jeux, que l'on peut sélectionner:
(on peut faire + simple, c'est un premier jet, mon problème est juste l'affichage, donc à mon avis c'est Pygame qui ne s'initialise pas)
Code : Tout sélectionner
#!/usr/bin/python
import RPi.GPIO as gpio
import pygame
import time
import pygame.gfxdraw
import urllib2
import os
gpio.setmode(gpio.BCM)
# On defini les ports comme des entrees
gpio.setup(4, gpio.IN) # bouton bas
gpio.setup(6, gpio.IN) # bouton haut
gpio.setup(12, gpio.IN) # bouton B
gpio.setup(16, gpio.IN) # bouton shutdown
gpio.setup(17, gpio.IN) # bouton droite
gpio.setup(21, gpio.IN) # bouton A
gpio.setup(22, gpio.IN) # bouton gauche
pygame.init()
screen = pygame.display.set_mode((320, 240), pygame.FULLSCREEN) # on genere la fenetre en plein ecran
noir = (0, 0, 0)
screen.fill(noir) # couleur de fond: noir
rubrique = "accueil" # utiliser pour afficher plusieurs pages de liste de jeux
print("Ecran accueil")
noir = (0, 0, 0)
blanc = (255, 255, 255)
bleu = (0, 0, 255)
rouge = (255, 0, 0)
vert = (0, 255, 0)
jaune = (255, 255, 0)
violet = (255, 0, 255)
maron = (160, 82, 45)
orange = (255, 165, 0)
rose = (255, 192, 203)
gris = (125, 125, 125)
vertClair = (76, 255, 0)
vertFonce = (38, 127, 0)
screen.fill(noir) # couleur de fond: noir
font = pygame.font.Font(None, 24) # definit l ecriture
# Menu du haut
text = font.render("Liste des jeux - Page 1/1", 1, (255, 255, 255)) # en blanc
screen.blit(text, (65, 10)) # on le met sur la surface
# Les traits autour des menus haut
pygame.gfxdraw.line(screen, 35, 40, 285, 40, blanc) # horizontal haut
pygame.gfxdraw.line(screen, 35, 0, 35, 40, blanc) # verticaux haut tout a gauche
pygame.gfxdraw.line(screen, 285, 0, 285, 40, blanc) # verticaux haut tout a droite
# Titre
text = font.render("[D], [U], [X] ou [ESC]", 1, (255, 255, 255)) # en blanc
screen.blit(text, (165, 220)) # on le met sur la surface
# dessin croix
pygame.gfxdraw.line(screen, 30, 65, 40, 65, rouge)
pygame.gfxdraw.line(screen, 30, 65, 30, 80, rouge)
pygame.gfxdraw.line(screen, 40, 65, 40, 80, rouge)
pygame.gfxdraw.line(screen, 15, 80, 30, 80, rouge)
pygame.gfxdraw.line(screen, 40, 80, 55, 80, rouge)
pygame.gfxdraw.line(screen, 15, 90, 30, 90, rouge)
pygame.gfxdraw.line(screen, 40, 90, 55, 90, rouge)
pygame.gfxdraw.line(screen, 15, 80, 15, 90, rouge)
pygame.gfxdraw.line(screen, 55, 80, 55, 90, rouge)
pygame.gfxdraw.line(screen, 30, 90, 30, 105, rouge)
pygame.gfxdraw.line(screen, 40, 90, 40, 105, rouge)
pygame.gfxdraw.line(screen, 30, 105, 40, 105, rouge)
pygame.gfxdraw.line(screen, 35, 70, 70, 80, blanc) # traits blancs
pygame.gfxdraw.line(screen, 35, 100, 70, 90, blanc)
text = font.render("selection", 1, (255, 255, 255))
screen.blit(text, (75, 75)) # on le met sur la surface
# dessin des 3 boutons
pygame.gfxdraw.circle(screen, 170, 105, 5, rouge)
pygame.gfxdraw.circle(screen, 185, 85, 5, rouge)
pygame.gfxdraw.circle(screen, 200, 65, 5, rouge)
text = font.render("shutdown", 1, (255, 255, 255))
screen.blit(text, (185, 96)) # on le met sur la surface
text = font.render("info jeu", 1, (255, 255, 255))
screen.blit(text, (200, 76)) # on le met sur la surface
text = font.render("lancer jeu", 1, (255, 255, 255))
screen.blit(text, (215, 56)) # on le met sur la surface
# liste des jeux
# on liste tous les jeux /!\ le nom du jeu DOIT avoir 15 caracteres (utiliser des espaces apres le nom pour faire 15 caracteres)
# le nom du fichier python DOIT avoir 5 caracteres (jeu00.py)
# /!\ MAX 5 jeux (sinon creer une page 2..)
jeux = "<>Jeu numero 1 <>jeu01.py<>Jeu numero 2 <>jeu02.py<>Jeu numero 3 <>jeu03.py<>Jeu numero 4 <>jeu04.py<>Jeu numero 5 <>jeu05.py" # /!\ DE NE PAS METTRE <> A LA FIN!!
nom_jeu = {} # on creer un dictionnaire pour pouvoir utiliser la variable nom_jeu[i]
nom_py = {}
nb_caractere = 2
i = 1
while 1 == 1: # boucle executee jusqu au break quand on a recuperer tous les noms des jeux
#print("nom jeu " + str(i) + ":")
nom_jeu[i] = (jeux[nb_caractere:(nb_caractere + 15)]) # on prend du 3e caractere au 17
#print(nom_jeu[i])
nb_caractere = (nb_caractere +17)
#print("fichier.py " + str(i) + ":")
nom_py[i] = (jeux[nb_caractere:(nb_caractere + 8)])
#print(nom_py[i])
nb_caractere = (nb_caractere +6)
#print("")
jeux = (jeux[27:]) # on enleve le titre du jeu qui vient d etre mis en variable ainsi que son nom de fichier.py
nb_caractere = 2 # on remet le nb de caractere a 2
if jeux[(nb_caractere - 2):(nb_caractere)] != "<>": # si il n y a plu de jeu dans la variable $jeux -> break
break # on sort de la while..
i = (i + 1)
y_position = 118 # position Y de la ligne du jeu numero 1 (+25 a chaque ligne)
pygame.gfxdraw.box(screen,(5, y_position, 310, 20),vertFonce) # carre vert sur jeu selectionner
screen.blit(text, (500, 80)) # on le met sur la surface
text = font.render(nom_jeu[1], 1, (255, 255, 255)) # en blanc
screen.blit(text, (10, y_position)) # on le met sur la surface
y_position = y_position + 25 # on descend le curseur de 30 pour ecrire la ligne suivante
if i > 1:
text = font.render(nom_jeu[2], 1, (255, 255, 255)) # en blanc
screen.blit(text, (10, y_position)) # on le met sur la surface
y_position = y_position + 25 # on descend le curseur de 30 pour ecrire la ligne suivante
if i > 2:
text = font.render(nom_jeu[3], 1, (255, 255, 255)) # en blanc
screen.blit(text, (10, y_position)) # on le met sur la surface
y_position = y_position + 25 # on descend le curseur de 30 pour ecrire la ligne suivante
if i > 3:
text = font.render(nom_jeu[4], 1, (255, 255, 255)) # en blanc
screen.blit(text, (10, y_position)) # on le met sur la surface
y_position = y_position + 25 # on descend le curseur de 30 pour ecrire la ligne suivante
if i > 4:
text = font.render(nom_jeu[5], 1, (255, 255, 255)) # en blanc
screen.blit(text, (10, y_position)) # on le met sur la surface
y_position = y_position + 25 # on descend le curseur de 30 pour ecrire la ligne suivante
if i > 5:
text = font.render(nom_jeu[6], 1, (255, 255, 255)) # en blanc
screen.blit(text, (10, y_position)) # on le met sur la surface
y_position = y_position + 25 # on descend le curseur de 30 pour ecrire la ligne suivante
if i > 6:
text = font.render("Autres (bug)", 1, (255, 255, 255)) # en blanc
screen.blit(text, (10, y_position)) # on le met sur la surface
pygame.display.flip() # update de la fenetre
selection = 1
while 1 == 1: # boucle infinie (jusqu a touche retour -> return)
y_position = 118 # position Y de la ligne du jeu numero 1 (+25 a chaque ligne)
# puis quand on selectionne une ligne en vert, on remet les lignes d avant et apres en normal non-selectionner
if selection == 1:
pygame.gfxdraw.box(screen,(5, (y_position), 310, 20),vertFonce) # carre vert pour effacer ligne 1
text = font.render(str(nom_jeu[1]), 1, (255, 255, 255)) # ligne 1
screen.blit(text, (10, y_position)) # on le met sur la surface
pygame.gfxdraw.box(screen,(5, (y_position+25), 310, 20),noir) # carre noir pour effacer ligne 2
text = font.render(str(nom_jeu[2]), 1, (255, 255, 255)) # ligne 2
screen.blit(text, (10, (y_position + 25))) # on le met sur la surface
elif selection == 2:
y_position = (y_position + 25)
pygame.gfxdraw.box(screen,(5, (y_position), 310, 20),vertFonce) # carre vert pour effacer ligne 2
text = font.render(str(nom_jeu[2]), 1, (255, 255, 255)) # ligne 2
screen.blit(text, (10, y_position)) # on le met sur la surface
pygame.gfxdraw.box(screen,(5, (y_position-25), 310, 20),noir) # carre noir pour effacer ligne 1
text = font.render(str(nom_jeu[1]), 1, (255, 255, 255)) # ligne 1
screen.blit(text, (10, (y_position-25))) # on le met sur la surface
pygame.gfxdraw.box(screen,(5, (y_position+25), 310, 20),noir) # carre noir pour effacer ligne 3
text = font.render(str(nom_jeu[3]), 1, (255, 255, 255)) # ligne 3
screen.blit(text, (10, (y_position+25))) # on le met sur la surface
elif selection == 3:
y_position = (y_position + 50)
pygame.gfxdraw.box(screen,(5, (y_position), 310, 20),vertFonce) # carre vert pour effacer ligne 3
text = font.render(str(nom_jeu[3]), 1, (255, 255, 255)) # ligne 3
screen.blit(text, (10, y_position)) # on le met sur la surface
pygame.gfxdraw.box(screen,(5, (y_position-25), 310, 20),noir) # carre noir pour effacer ligne 2
text = font.render(str(nom_jeu[2]), 1, (255, 255, 255)) # ligne 2
screen.blit(text, (10, (y_position-25))) # on le met sur la surface
pygame.gfxdraw.box(screen,(5, (y_position+25), 310, 20),noir) # carre noir pour effacer ligne 4
text = font.render(str(nom_jeu[4]), 1, (255, 255, 255)) # ligne 4
screen.blit(text, (10, (y_position+25))) # on le met sur la surface
elif selection == 4:
y_position = (y_position + 75)
pygame.gfxdraw.box(screen,(5, (y_position), 310, 20),vertFonce) # carre vert pour effacer ligne 4
text = font.render(str(nom_jeu[4]), 1, (255, 255, 255)) # ligne 4
screen.blit(text, (10, y_position)) # on le met sur la surface
pygame.gfxdraw.box(screen,(5, (y_position-25), 310, 20),noir) # carre noir pour effacer ligne 3
text = font.render(str(nom_jeu[3]), 1, (255, 255, 255)) # ligne 3
screen.blit(text, (10, (y_position-25))) # on le met sur la surface
pygame.gfxdraw.box(screen,(5, (y_position+25), 310, 20),noir) # carre noir pour effacer ligne 5
text = font.render(str(nom_jeu[5]), 1, (255, 255, 255)) # ligne 5
screen.blit(text, (10, (y_position+25))) # on le met sur la surface
else:
y_position = (y_position + 100)
pygame.gfxdraw.box(screen,(5, (y_position), 310, 20),vertFonce) # carre vert pour effacer ligne 5
text = font.render(str(nom_jeu[5]), 1, (255, 255, 255)) # ligne 5
screen.blit(text, (10, y_position)) # on le met sur la surface
pygame.gfxdraw.box(screen,(5, (y_position-25), 310, 20),noir) # carre noir pour effacer ligne 4
text = font.render(str(nom_jeu[4]), 1, (255, 255, 255)) # ligne 4
screen.blit(text, (10, (y_position-25))) # on le met sur la surface
pygame.gfxdraw.box(screen,(5, (y_position+25), 310, 20),noir) # carre noir pour effacer ligne 6
pygame.display.flip() # update de la fenetre
# ci-dessous gestion des touches
# 4: bouton bas
# 6: bouton haut
# 12: bouton B
# 16: bouton shutdown
# 17: bouton droite
# 21: bouton A
# 22: bouton gauche
if(gpio.input(16) == False): # bouton shutdown
print("Bouton shutdown actif")
os.system('sudo shutdown -h now')
if(gpio.input(4) == False): # bouton bas
if selection < 5: # on fait descendre la selection
selection = (selection + 1) # si < 17
print("Selection: " + str(selection))
else:
selection = 5 # sinon on bloque sur la derniere ligne
print("Selection: " + str(selection))
if(gpio.input(6) == False): # bouton haut
if selection > 1: # on fait monter la selection (Up)
selection = (selection - 1) # si > 1
print("Selection: " + str(selection))
else:
selection = 1 # sinon on bloque sur la premiere ligne
print("Selection: " + str(selection))
if(gpio.input(12) == False): # bouton B qui lance le jeu
print("Lancer fichier: " + str(nom_py[selection]))
os.system("sudo ./" + str(nom_py[selection]))
# os.system("sudo ./jeu01")
time.sleep(0.2) # pour diminuer la charge CPU