アフィリエイト広告を利用しています

広告

posted by fanblog

2020年04月27日

pygame スプライトグループによる表現

Pythonでゲーム作りますが何か? - 人工知能に関する断創録を参考に

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()

bar_A.png
ball.png
Screenshot from 2020-04-29 11-15-28.png
posted by もう一人の自分 at 21:14| pygame
検索

私が見た動画紹介コーナー

素敵です

プロフィール
もう一人の自分さんの画像
もう一人の自分
好きなことを仕事にしなかった
プロフィール
最新記事
カテゴリーアーカイブ
ファン
写真ギャラリー
×

この広告は30日以上新しい記事の更新がないブログに表示されております。