Introduction: Breakout RaspberryPi
This instructable is video game of breakout on RaspberryPi.
It is easy to make this video game.
Let's make and fun!!
Step 1: Materials
1. RaspberryPi (I used RasberryPi rev2)
※include keyboard,mause,monitor,SDcard
2. Tact switch × 4
3. Electrical resistor × 4
4. Some jumper wires
5. Breadboard
Step 2: Making Controllor
Firstly,you will make a controllor of this video game.
There are 4 buttons to operate video game in this controllor.
Please prepare breadboard,tactswiches,electrical resistores, and some jumperwires.
This is a circuit diagram.
Step 3: Programing
Next is programing of breakout.
1. Start up RaspberryPi and IDLE(python 2.7)
2. Copy and paste this code.
<p>import RPi.GPIO as GPIO<br>import pygame
from pygame.locals import*
from sys import exit
import time</p><p>class blockC(object):</p><p> def __init__(self,name,image,pos):</p><p> self.name = name
self.alive = True
self.image =image
self.speed = 0.
self.location = pos</p><p> def render(self,surface):</p><p> if 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
radius=6
display = (radius*2,radius*2)
color=(0,0,0)
pos = (radius,radius)</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
height=6
length=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
height=20
length=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.IN)
GPIO.setup(23, GPIO.IN)
GPIO.setup(24, GPIO.IN)
GPIO.setup(25, GPIO.IN)</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>board = pygame.image.load(board_image_filename).convert()
circle= pygame.image.load(circle_image_filename).convert_alpha()
block= pygame.image.load(block_image_filename).convert_alpha()
end = font.render("GAME OVER",True,(0,0,255))
complete = font.render("Complete!!",True,(255,100,0))
start = font.render("Push the start button",True,(255,100,20))
point = font2.render("SCORE",True,(255,255,255))
again1 = font2.render("Push the restart button",True,(60,210,16))
again2 = font2.render("if you would like to play again.",True,(60,210,16))</p><p>clock = pygame.time.Clock()</p><p>#roop1
while 1:
#board_init
board_pos = 320.</p><p> #block_init
blocks = {}
block_pos_y = 30.
i = 1
for num2 in range(1,6):
block_pos_x = 45
for num in range(1,12):
blocks[i] = blockC(i,block,(block_pos_x,block_pos_y))
i += 1
block_pos_x += 50
block_pos_y += 30
alive_blocks = len(blocks)</p><p> #start_init
S = 1
score = 0</p><p> #cicle_init
circle_pos_x,circle_pos_y = 0.,0.
speed_x,speed_y = 0.,0.</p><p> #roop2
while alive_blocks >= 1:
for event in pygame.event.get():
if event.type == QUIT:
exit()</p><p> #board
if GPIO.input(22):
board_pos += 10.
elif GPIO.input(23):
board_pos -= 10.
if 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
if 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.
if circle_pos_y > 480 - circle.get_height():
break
elif circle_pos_y < 0:
speed_y = -speed_y
circle_pos_y = 0.</p><p> #start
if S:
circle_pos_x,circle_pos_y = (board_pos+(board.get_width()/2)-5),430.
speed_x,speed_y = 0.,0.
if GPIO.input(24):
S=0
speed_x,speed_y = 1.,-170.
else:
#refrect_circle_board
if 440<=(circle_pos_y+circle.get_height())<=446:
if (board_pos-circle.get_width()/2) <= circle_pos_x < (board_pos+16) or (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) or (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 and delete
offset = 3
for k in range(1,56):
if blocks[k].alive:
x,y = blocks[k].location
if (x-offset) < (circle_pos_x+circle.get_width()) < (x+offset) and (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))
if S:
window.blit(start,(40,200))
for k in range(1,56):
blocks[k].render(window)
pygame.display.update()</p><p> #result
while not GPIO.input(25):
if alive_blocks >= 1:
window.blit(end,(150,200))
else:
window.blit(complete,(180,200))
window.blit(again1,(50,300))
window.blit(again2,(200,350))
pygame.display.update()</p>Step 4: Run and Fun!!
Please run that code.
How to play this video game:
Pin 22: Right button
Pin 23:Left button
Pin 24:Start button
Pin 25:Restart button
This is my website: lumenbolk.com
That's all. Thank you.

