#はじめに
限界を感じた私はSpriteクラスに手を出すことにした...
#進捗
Spriteクラスを使った処理になった。
###できること
・テキストを表示する
・残り時間をカウントし、表示する
・得点を計算し、表示する
・画像を表示する
・画像上をクリックしたときに「+1」を表示する
・画像上をクリックしたときに1点加える
###できなくなったこと
・画像を一方向に動かす
###コード全文
import pygame
from pygame.locals import *
import sys
Scr_rect = Rect(0,0,500,500)
class MySprite(pygame.sprite.Sprite):
def __init__(self, filename, x, y, vx, vy):
pygame.sprite.Sprite.__init__(self)
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 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))
#Spriteを作成
ob1 = MySprite("Game\dg.jpg",50,100,0,0)
click = 0
score = 0
n_frames = 0
TIME_END = 15
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()
#おわりに
Spriteクラスを使って、できることを増やしていく。