Breakout RaspberryPi

This instructable is video game of breakout on RaspberryPi.

It is easy to make this video game.

Let's make and fun!!

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

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.

Microcontroller Contest

Participated in the
Microcontroller Contest

Be the First to Share

    Recommendations

    • Made with Math Contest

      Made with Math Contest
    • Multi-Discipline Contest

      Multi-Discipline Contest
    • Robotics Contest

      Robotics Contest

    Discussions