前回では基本的なピンボール関数を実装しましたので、前回のコードを要約してみましょう。
import pygame
pygame.init()
width=800
height=600
screen=pygame.display.set_mode([width,height])
pygame.display.set_caption("python弹球游戏")
keepGoing=True
pic=pygame.image.load("ball.png")
colorkey=pic.get_at((0,0))
pic.set_colorkey(colorkey)
picx = 0
picy = 0
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
timer = pygame.time.Clock()
speedx = 5
speedy = 5
paddlew = 200
paddleh = 25
paddlex = 300
paddley = 550
picw = 100
pich = 40
xend=width-50
yend=height-50#这两行的减50为判定提供时间
ticks=60#帧率
font=pygame.font.SysFont("None",24)
while keepGoing:
for event in pygame.event.get():
if event.type==pygame.QUIT:
keepGoing=False
picx+=speedx
picy+=speedy
if picx<=0 or picx+pic.get_width()>=xend:
speedx= -speedx
if picy<=0:
speedy= -speedy
if picy>=yend:
speedy= -speedy
if picy + pich >= paddley and picy + pich <= paddley + paddleh and speedy > 0:
if picx + picw / 2 >= paddlex and picx + picw / 2 <= paddlex + paddlew:
speedy = -speedy
screen.fill(BLACK)
screen.blit(pic, (picx, picy))
paddlex = pygame.mouse.get_pos()[0]
paddlex -= paddlew / 2
pygame.draw.rect(screen, WHITE, (paddlex, paddley, paddlew, paddleh))
pygame.display.update()
timer.tick(ticks)
pygame.quit()
機能については...詳しく説明する必要はありませんね。
えー、本題に戻りましょう。今日のタスクをリストアップしましょう。
1. 座標、スコア、ゲーム結果などの字幕を追加します
2. 全体的なアルゴリズムを最適化する
3. 開始インターフェイスとオプションを追加します。
まず最初の項目である字幕を作成しましょう
字幕の追加
字幕と言えば、pygameではすでに標準となっています。pygameの字幕はシンプルな演出、多彩なフォント、多彩な色という特徴があるからです。そのテンプレートは次のように非常にシンプルです。
まずはフォントの設定についてです。
font=pygame.font.SysFont("字体",大小)
次にフォントの表示です。
draw_string="要显示的内容"
text=font.render(draw_string,True,颜色)
text_rect=text.get_rect()
text_rect.centerx=screen.get_rect().centerx
text_rect.y= y坐标
screen.blit(text,text_rect)
上記のコードは関数内でのみ表示できます
したがって、ピンボールとラケットの座標を出力できます。コードは次のようになります。
import pygame
pygame.init()
width=800
height=600
screen=pygame.display.set_mode([width,height])
pygame.display.set_caption("python弹球游戏")
keepGoing=True
pic=pygame.image.load("ball.png")
colorkey=pic.get_at((0,0))
pic.set_colorkey(colorkey)
picx = 0
picy = 0
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
timer = pygame.time.Clock()
speedx = 5
speedy = 5
paddlew = 200
paddleh = 25
paddlex = 300
paddley = 550
picw = 100
pich = 40
xend=width-50
yend=height-50#这两行的减50为判定提供时间
ticks=60#帧率
font=pygame.font.SysFont("None",24)
while keepGoing:
for event in pygame.event.get():
if event.type==pygame.QUIT:
keepGoing=False
picx+=speedx
picy+=speedy
if picx<=0 or picx+pic.get_width()>=xend:
speedx= -speedx
if picy<=0:
speedy= -speedy
if picy>=yend:
speedy= -speedy
screen.fill(BLACK)
screen.blit(pic, (picx, picy))
paddlex = pygame.mouse.get_pos()[0]
paddlex -= paddlew / 2
pygame.draw.rect(screen, WHITE, (paddlex, paddley, paddlew, paddleh))
if picy + pich >= paddley and picy + pich <= paddley + paddleh and speedy > 0:
if picx + picw / 2 >= paddlex and picx + picw / 2 <= paddlex + paddlew:
speedy = -speedy
draw_string = "X Speed:" + str(speedx) + ' ' + "Y Speed:" + str(speedy)
text = font.render(draw_string, True, WHITE)
text_rect = text.get_rect()
text_rect.centerx = screen.get_rect().centerx
text_rect.y = 30
screen.blit(text, text_rect)
pygame.display.update()
timer.tick(ticks)
pygame.quit()
最初、作者がビートを描画するためのプログラムを誤って削除してしまい、その結果、ビートがまったく表示されなくなりました。
スコアを表示
上記のコードを理解していれば、分数は非常に単純です。コードは以下のように表示されます:
import pygame
pygame.init()
width=800
height=600
screen=pygame.display.set_mode([width,height])
pygame.display.set_caption("python弹球游戏")
keepGoing=True
pic=pygame.image.load("ball.png")
colorkey=pic.get_at((0,0))
pic.set_colorkey(colorkey)
picx = 0
picy = 0
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
timer = pygame.time.Clock()
speedx = 5
speedy = 5
paddlew = 200
paddleh = 25
paddlex = 300
paddley = 550
picw = 100
pich = 40
xend=width-50