#はじめに
今回は前回導入(?)したSpriteクラスを使ったアニメーション(画像が上下に動き続ける)に挑戦。
#進捗
###できること
・テキストを表示する
・残り時間をカウントし、表示する
・得点を計算し、表示する
・画像を表示する
・画像上をクリックしたときに「+1」を表示する
・画像上をクリックしたときに1点加える
NEW
・画像を上下に動かし続ける
###コード全文
import pygame
from pygame.locals import *
import sys
Scr_rect = Rect(0, 0, 500, 500)
class MySprite(pygame.sprite.Sprite):
move_height = 100
def __init__(self, filename, x, y, vx, vy):
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
self.up = self.move_height
self.down = self.up + self.move_height
def update(self):
self.rect.move_ip(0, self.vy)
if self.rect.top < self.up or self.rect.top > self.down:
self.vy = -self.vy
def draw(self, screen):
screen.blit(self.image, self.rect)
def main():
pygame.init()
cl = pygame.time.Clock()
screen = pygame.display.set_mode(Scr_rect.size)
pygame.display.set_caption("Game")
font = pygame.font.SysFont(None, 78)
font2 = pygame.font.SysFont(None, 45)
font3 = pygame.font.SysFont(None, 30)
text1 = font.render("Click!", True, (204, 102, 112))
text2 = font2.render("+1", True, (0, 0, 0))
click = 0
score = 0
n_frames = 0
TIME_END = 15
#Spriteを作成
ob1 = MySprite("Game\dg.jpg", 50, 200, 0, -2)
while (1):
screen.fill((102, 204, 194))
screen.blit(text1, [170, 30])
rest = TIME_END - (n_frames / 30)
text4 = font3.render('time: {}'.format(round(rest,1)), True, (0, 0, 0))
screen.blit(text4,[350,60])
#Spriteを更新
ob1.update()
#Spriteを描画
ob1.draw(screen)
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if n_frames < 30 * TIME_END and event.type == MOUSEBUTTONDOWN and event.button == 1:
if ob1.rect.collidepoint(event.pos):
click = 9
score += 1
text3 = font3.render('score : {}'.format(score), True, (0, 0, 0))
screen.blit(text3, [350, 40] )
if click > 0:
pos = pygame.mouse.get_pos()
screen.blit(text2, pos)
click -= 1
pygame.display.update()
if n_frames < 30 * TIME_END:
n_frames += 1
cl.tick(30)
if __name__ == "__main__":
main()
#おわりに
無事、画像を動かすことができてほっとした。寝れないかと思った。
あれ、でもコード書き終わってからも調べたり、これ書いたりしてたら、いつの間にかこんな時間...
次回は、
・アニメーションを残り時間が0になったら終わらせる
・得点システムの改善
をしようかな...?