Breakout RaspberryPi (3 / 4 steg)
Steg 3: programmering
Nästa är programmering av utbrytning.
1. starta upp RaspberryPi och IDLE(python 2.7)
2. Kopiera och klistra in denna kod.
< p > Importera RPi.GPIO som GPIO < br > Importera pygame
från pygame.locals import *
från sys importera exit
Importera tid < /p >< p > klass blockC(object): < /p >< p > def __init__(self,name,image,pos): < /p >< p > self.name = namn
Self.Alive = sant
Self.image = bild
Self.Speed = 0.
Self.location = pos < /p >< p > def render(self,surface): < /p >< p > om self.alive:
x, y = self.location
w, h = self.image.get_size()
Surface.blit(Self.image,(x,y)) < /p >< p > def hit(self):
Self.Alive = False < /p >< p > pygame.init() < /p >< p > #Circle_picture
radie = 6
Visa = (radie * 2, radie * 2)
Color=(0,0,0)
POS = (radie, radie) < /p >< p > screen=pygame.display.set_mode(display,0,32)
screen.Fill((255,255,255)) < /p >< p > pygame.draw.circle(screen,color,pos,radius) < /p >< p > pygame.image.save(screen,"circle.bmp") < /p >< p > #board_picture
höjd = 6
längd = 80
Color=(0,0,0) < /p >< p > screen=pygame.display.set_mode((length,height),0,32)
screen.Fill((Color)) < /p >< p > pygame.image.save(screen,"board.bmp") < /p >< p > #block_picture
höjd = 20
längd = 40
Color=(0,0,0) < /p >< p > screen=pygame.display.set_mode((length,height),0,32)
screen.Fill((Color)) < /p >< p > pygame.image.save(screen,"block.bmp") < /p >< p > #picture
board_image_filename = "board.bmp"
circle_image_filename = "circle.bmp"
block_image_filename = 'block.bmp' < /p >< p > #GPIOsetup
GPIO.setmode (GPIO. BCM)
GPIO.setup (22, GPIO. I)
GPIO.setup (23, GPIO. I)
GPIO.setup (24, GPIO. I)
GPIO.setup (25, GPIO. I) < /p >< p > #pygame,window,font,clock.etc
Window=pygame.display.set_mode((840,480))
pygame.display.set_caption("block_game")
Font = pygame.font.SysFont(None,80)
font2 = pygame.font.SysFont(None,40) < /p >< p > styrelsen = pygame.image.load(board_image_filename).convert()
cirkel = pygame.image.load(circle_image_filename).convert_alpha()
block = pygame.image.load(block_image_filename).convert_alpha()
slut = font.render ("spelet OVER",True,(0,0,255))
komplett = font.render("Complete!!",True,(255,100,0))
Start = font.render ("Push start button",True,(255,100,20))
Peka = font2.render("SCORE",True,(255,255,255))
again1 = font2.render ("Push omstart button",True,(60,210,16))
again2 = font2.render ("om du vill spela again.",True,(60,210,16)) < /p >< p > klocka = pygame.time.Clock() < /p >< p > #roop1
medan 1:
#board_init
board_pos = 320. < /p >< p > #block_init
block = {}
block_pos_y = 30.
Jag = 1
för num2 i range(1,6):
block_pos_x = 45
för num i range(1,12):
block [i] = blockC(i,block,(block_pos_x,block_pos_y))
Jag + = 1
block_pos_x += 50
block_pos_y += 30
alive_blocks = len(blocks) < /p >< p > #start_init
S = 1
poäng = 0 < /p >< p > #cicle_init
circle_pos_x, circle_pos_y = 0., 0.
speed_x, speed_y = 0., 0. < /p >< p > #roop2
medan alive_blocks > = 1:
för händelse i pygame.event.get():
om event.type == avsluta:
Exit() < /p >< p > #board
om GPIO.input(22):
board_pos += 10.
Elif GPIO.input(23):
board_pos-= 10.
om board_pos > 560:
board_pos = 560.
Elif board_pos < 0:
board_pos = 0. < /p >< p > #circle
time_passed = clock.tick(40)
time_passed_seconds = time_passed / 1000.0
circle_pos_x += speed_x * time_passed_seconds
circle_pos_y += speed_y * time_passed_seconds
om circle_pos_x > 640 - circle.get_width():
speed_x = - speed_x
circle_pos_x = 640 - circle.get_width()
Elif circle_pos_x < 0:
speed_x = - speed_x
circle_pos_x = 0.
om circle_pos_y > 480 - circle.get_height():
Break
Elif circle_pos_y < 0:
speed_y = - speed_y
circle_pos_y = 0. < /p >< p > #start
om S:
circle_pos_x, circle_pos_y = (board_pos + (board.get_width () / 2) -5), 430.
speed_x, speed_y = 0., 0.
om GPIO.input(24):
S = 0
speed_x, speed_y = 1.,-170.
annat:
#refrect_circle_board
om 440 < =(circle_pos_y+circle.get_height()) < = 446:
om (board_pos-circle.get_width()/2) < = circle_pos_x < (board_pos + 16) eller (board_pos + 64) < circle_pos_x < = (board_pos+board.get_width()-circle.get_width()/2):
speed_x = (speed_x/abs(speed_x)) * 193
speed_y = -200
Elif (board_pos + 16) < = circle_pos_x < (board_pos + 32) eller (board_pos + 48) < circle_pos_x < = (board_pos + 64):
speed_x = (speed_x/abs(speed_x)) * 173
speed_y =-170
Elif (board_pos + 32) < = circle_pos_x < = (board_pos + 48):
speed_x = (speed_x/abs(speed_x)) * 133
speed_y =-170 < /p >< p > #reflect_circle_block och ta bort
offset = 3
för k i range(1,56):
om block [k] .alive:
x, y = block [k] .location
om (x-förskjutning) < (circle_pos_x+circle.get_width()) < (x + offset) och (circle_pos_y-block.get_height()-offset) < /p >< p > #display
window.Fill (pygame. Color(255,255,255))
pygame.Draw.rect(Window,(0,0,0),(640,0,200,480))
window.blit(Point,(690,200))
score2 = font2.render ("%i"%(score),True,(255,255,255))
window.blit(score2,(690,250))
window.blit(Circle,(circle_pos_x,circle_pos_y))
window.blit(Board,(board_pos,440))
om S:
window.blit(start,(40,200))
för k i range(1,56):
Blocks[k].Render(window)
pygame.display.Update() < /p >< p > #result
samtidigt inte GPIO.input(25):
om alive_blocks > = 1:
window.blit(End,(150,200))
annat:
window.blit(Complete,(180,200))
window.blit(again1,(50,300))
window.blit(again2,(200,350))
pygame.display.Update() < /p >