2020年04月27日
pygame スプライトグループによる表現
Pythonでゲーム作りますが何か? - 人工知能に関する断創録を参考に
pygameによる描画に改良を加えました。
pygameによる描画に改良を加えました。
#!usr/bin/env python3
#coding:utf-8
import pygame
from pygame.locals import*
import sys
SCR_RECT=Rect(0,0,480,640)
class BarSprite(pygame.sprite.Sprite):
def __init__(self,filename,x,y,vx,vy):
pygame.sprite.Sprite.__init__(self,self.containers)
self.image=pygame.image.load(filename).convert_alpha()
width=self.image.get_width()
height=self.image.get_height()
self.rect=Rect(x,y,width,height)
self.vx=vx
self.vy=vy
def update(self):
pressed_keys=pygame.key.get_pressed()
if pressed_keys[pygame.K_RIGHT]:
self.rect.move_ip(self.vx,0)
if pressed_keys[pygame.K_LEFT]:
self.rect.move_ip(-self.vx,0)
if pressed_keys[pygame.K_UP]:
self.rect.move_ip(0,-self.vy)
if pressed_keys[pygame.K_DOWN]:
self.rect.move_ip(0,self.vy)
self.rect.clamp_ip(SCR_RECT)
class BallSprite(pygame.sprite.Sprite):
def __init__(self,filename,x,y,vx,vy,bar,score_board):
pygame.sprite.Sprite.__init__(self,self.containers)
self.image=pygame.image.load(filename).convert_alpha()
width=self.image.get_width()
height=self.image.get_height()
self.rect=Rect(x,y,width,height)
self.vy=vy
self.vx=vx
self.bar=bar
self.score_board=score_board
self.hit=1
def update(self):
self.rect.move_ip(self.vx,self.vy)
if self.rect.left<0 or self.rect.right>SCR_RECT.width:
self.vx=-self.vx
if self.rect.top<SCR_RECT.top:
self.vy=-self.vy
if self.rect.colliderect(self.bar.rect)>0:
self.vy=-self.vy
self.score_board.add_score(self.hit*10)
if self.rect.bottom>SCR_RECT.bottom:
self.kill()
class ScoreBoard():
def __init__(self):
self.sysfont=pygame.font.SysFont(None,int(SCR_RECT.width/6))
self.score=0
def draw(self,screen):
score_img=self.sysfont.render(str(self.score), True, (255,255,0))
x = SCR_RECT.left
y = SCR_RECT.top
screen.blit(score_img,(x,y))
def add_score(self,x):
self.score = self.score+x
def main():
pygame.init()
screen=pygame.display.set_mode(SCR_RECT.size)
pygame.display.set_caption(u"トレーニング")
balls=pygame.sprite.Group()
group=pygame.sprite.RenderUpdates()
BarSprite.containers=group
BallSprite.containers=group,balls
score_board=ScoreBoard()
bar=BarSprite("bar.png",240,600,10,10)
ball1=BallSprite("ball.png",89,100,9,9,bar,score_board)
ball2=BallSprite("ball.png",340,100,-5,5,bar,score_board)
ball3=BallSprite("ball.png",90,150,-7,6,bar,score_board)
ball4=BallSprite("ball.png",0,100,-5,5,bar,score_board)
clock=pygame.time.Clock()
while True:
clock.tick(60)
screen.fill((0,180,0))
pygame.draw.line(screen,(255,255,255),(0,320),(480,320))
group.update()
group.draw(screen)
score_board.draw(screen)
pygame.display.update()
if len(balls.sprites())==0:
main()
for event in pygame.event.get():
if event.type==QUIT:sys.exit()
if __name__=="__main__":
main()
【このカテゴリーの最新記事】