pygameでブロック崩し

前回の記事で、Arduinoを経由したセンサーデータの取得方法を紹介しましたが、そのデータを使って何かしたいと考えて、ゲームの入力インターフェイスとして使えるのではないかと思い、とりあえずゲームを作ってみました。

 

作ったゲームはブロック崩しで、pygameというpython用のライブラリを使いました。

 

以下、ソースコード

import pygame

from pygame.locals import *

import sys

 

width=640

height=480

SCREEN_SIZE=(width,height)

 

class ball:

def __init__(self,x,y,vx,vy,r):

self.x=x

self.y=y

self.vx=vx

self.vy=vy

self.r=r

 

def update(self):

self.x+=self.vx

self.y+=self.vy

 

if self.x-self.r<0 or self.x+self.r>width:

self.vx*=-1

if self.y-self.r<0 or self.y+self.r>height:

self.vy*=-1

 

def draw(self,screen):

pygame.draw.circle(screen,(255,0,0),(self.x,self.y),self.r)

 

class brick:

def __init__(self,x,y,w,h):

self.x=x

self.y=y

self.w=w

self.h=h

self.flag=True

 

def update(self,bx,by,r):

if self.flag:

if self.x<=bx+r and self.x+self.w>=bx-r:

if self.y<=by+r and self.y+self.h>=by-r:

self.flag=False

ball_.vy*=-1

 

def draw(self,screen):

if self.flag:

pygame.draw.rect(screen,(255,255,255),Rect(self.x,self.y,self.w,self.h))

 

class bar:

def __init__(self,x,y,w,h):

self.x=x

self.y=y

self.w=w

self.h=h

 

def move(self,dx):

self.x+=dx

 

def update(self,bx,by,r):

if self.x<=bx+r and self.x+self.w>=bx-r:

if self.y<=by+r and self.y+self.h>=by-r:

ball_.vy*=-1

 

def draw(self,screen):

pygame.draw.rect(screen,(0,0,255),Rect(self.x,self.y,self.w,self.h))

 

ball_=ball(320,240,3,3,7)

 

def main():

pygame.init()

 

screen=pygame.display.set_mode(SCREEN_SIZE)

 

pygame.display.set_caption("Breakout")

 

clock=pygame.time.Clock()

 

bar_=bar( (width-100)/2,height-50,100,10)

 

bricks=[]

for i in range(5):

for j in range(10):

bricks.append(brick(10*(j+1)+53*j,20*(i+1)+10*i,53,10))

 

while True:

clock.tick(60)

 

pressed_keys=pygame.key.get_pressed()

 

if pressed_keys[K_LEFT]:

bar_.move(-5)

if pressed_keys[K_RIGHT]:

bar_.move(5)

 

ball_.update()

 

bar_.update(ball_.x,ball_.y,ball_.r)

 

for i in range(50):

bricks[i].update(ball_.x,ball_.y,ball_.r)

 

screen.fill( (0,0,0) )

 

ball_.draw(screen)

 

bar_.draw(screen)

 

for i in range(len(bricks)):

bricks[i].draw(screen)

 

pygame.display.update()

 

for event in pygame.event.get():

if event.type==QUIT:

sys.exit()

if event.type==KEYDOWN:

if event.key==K_ESCAPE:

sys.exit()

 

if __name__=="__main__":

main()

 

普段、pythonを使わないので、入門書を読みながら書きました。

 

ゲームーバーも、リトライ機能もなく、ゲームとはいえないようなものですが、とりあえず、ブロック崩しっぽくなっています。

上記コードの場合、バーの操作はキーボードですが、時間が出来た時にでも、何らかのセンサー値を使うように改良したいと思います。

 

breakout

広告を非表示にする