#!/usr/bin/env python #coding=utf-8 import pygame, signal, sys, time, os, RPi.GPIO as GPIO from pygame.locals import * #GPIO startPin = 32 errorPin = 31 enableErrorTimeAddingPin = 15 shutdownPin = 3 GPIO.setmode(GPIO.BOARD) GPIO.setup(startPin, GPIO.IN) GPIO.setup(errorPin, GPIO.IN) GPIO.setup(enableErrorTimeAddingPin, GPIO.IN) GPIO.setup(shutdownPin, GPIO.IN) #other constants timePerError = 5 screenSizeX = 900 screenSizeY = 900 pygame.init() #colors redColor = pygame.Color(255, 0, 0) blackColor = pygame.Color(0, 0, 0) whiteColor = pygame.Color(255, 255, 255) grayColor = pygame.Color(128, 128, 128) mainFontColor = redColor #fonts font = pygame.font.Font('freesansbold.ttf', 90) def signal_handler(sig, frame): print('Programm exiting') exit_application() def toggle_fullscreen(): screen = pygame.display.get_surface() tmp = screen.convert() caption = pygame.display.get_caption() cursor = pygame.mouse.get_cursor() # Duoas 16-04-2007 w,h = screen.get_width(),screen.get_height() flags = screen.get_flags() bits = screen.get_bitsize() pygame.display.quit() pygame.display.init() screen = pygame.display.set_mode((w,h),flags^FULLSCREEN,bits) screen.blit(tmp,(0,0)) pygame.display.set_caption(*caption) pygame.key.set_mods(0) #HACK: work-a-round for a SDL bug?? pygame.mouse.set_cursor( *cursor ) # Duoas 16-04-2007 return screen def clearScreen(): screen.fill(blackColor) return def handle_events(): print("Status der Pins:") print("Start Pin:", GPIO.input(startPin)) print("Error Pin:", GPIO.input(errorPin)) print("Stop Pin:", GPIO.input(shutdownPin)) #if GPIO.input(shutdownPin) == True: #shutdown_raspberry() for event in pygame.event.get(): if event.type == KEYDOWN and event.key == K_ESCAPE: shutdown_raspberry() else: if event.type == pygame.QUIT or event.type == KEYDOWN: exit_application() time.sleep(0.1) return def exit_application(): pygame.quit() GPIO.cleanup() sys.exit() return def shutdown_raspberry(): os.system("sudo shutdown -h now") return #signal handing for controlled exit via ctrl+c signal.signal(signal.SIGINT, signal_handler) pygame.mouse.set_visible(False) # hide mouse screen = pygame.display.set_mode((screenSizeX, screenSizeY), pygame.FULLSCREEN) #pygame.display.set_caption('Heisser Draht') # not required for fullscreen application #screen = toggle_fullscreen() while True: # main loop #global label storage time_surface = 0 errors_surface = 0 time_rectangle = 0 errors_rectangle = 0 header_surface = font.render('Dr' + u'ΓΌ' + 'cken Sie Start!', True, mainFontColor) header_rectangle = header_surface.get_rect() header_rectangle.topleft = (0, 100) screen.blit(header_surface, header_rectangle) pygame.display.flip() while GPIO.input(startPin) == False: #wait for the user to press start button handle_events() errors = 0 errorAdded = False #justStarted = True header_surface = font.render('Spiel startet', True, mainFontColor) time.sleep(5) start_time = int(time.time()) while True: # game running handle_events() if GPIO.input(errorPin) == True: if errorAdded == False: errors += 1 errorAdded = True else: errorAdded = False if GPIO.input(enableErrorTimeAddingPin) == True: int_time = int(time.time()) - start_time + errors * timePerError int_time = int(time.time()) - start_time time_surface = font.render('Zeit: ' + str(int_time) + 's', True, mainFontColor) time_rectangle = time_surface.get_rect() time_rectangle.topleft = (0, 300) errors_surface = font.render('Fehler: ' + str(errors), True, mainFontColor) errors_rectangle = errors_surface.get_rect() errors_rectangle.topleft = (0, 400) clearScreen() screen.blit(errors_surface, errors_rectangle) #errors screen.blit(time_surface, time_rectangle) #time screen.blit(header_surface, header_rectangle) #header pygame.display.flip() #if GPIO.input(startPin) == False: # justStarted = False #if GPIO.input(startPin) == True and justStarted == False: if GPIO.input(startPin) == True: #break continue #skip the rest clearScreen() header_surface = font.render('Game over!', True, mainFontColor) screen.blit(errors_surface, errors_rectangle) #errors screen.blit(time_surface, time_rectangle) #time screen.blit(header_surface, header_rectangle) #header pygame.display.flip() #while GPIO.input(startPin) == False: # handle_events() #while GPIO.input(startPin) == True: # handle_events() #while GPIO.input(startPin) == False: # handle_events() clearScreen() time.sleep(10) break