新聞中心
這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
怎么在python中使用pygame實(shí)現(xiàn)擋板彈球游戲-創(chuàng)新互聯(lián)
這篇文章將為大家詳細(xì)講解有關(guān)怎么在python中使用pygame實(shí)現(xiàn)擋板彈球游戲,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

EasyBaffleBallGame
# -*- coding:utf-8 -*-
from sys import exit
import pygame
from pygame.locals import *
pygame.init()
# 創(chuàng)建窗口
ScreenWidth = 500
ScreenHright = 720
ScreenSize = (ScreenWidth, ScreenHright)
Screen = pygame.display.set_mode(ScreenSize, 0, 32)
pygame.display.set_caption("Ly's Easy Ball Game")
# 背景音樂
pygame.mixer.music.load('Sugar.mp3')
pygame.mixer.music.play(-1, 0.0)
# 碰撞音效
CollisionMusic = pygame.mixer.Sound('collision.wav')
# 重新開始按鈕音效
ButtonMusic = pygame.mixer.Sound('button.wav')
# 游戲結(jié)束音效
GameOverMusic = pygame.mixer.Sound('over.wav')
def GameStart():
# 游戲背景Surface對(duì)象
Background = pygame.image.load('GameBackground.jpg').convert()
# 擋板Surface對(duì)象
Baffle = pygame.image.load('Baffle.png').convert_alpha()
# 球Surface對(duì)象
Ball = pygame.image.load('Ball.png').convert_alpha()
# 擋板位置信息
BaffleX = 140
BaffleY = 600
BaffleSpeed = 1000
BaffleXSpeed = BaffleSpeed
BaffleYSpeed = BaffleSpeed
BaffleMove = {K_LEFT: 0, K_RIGHT: 0, K_UP: 0, K_DOWN: 0}
# 球位置信息
BallX = 235
BallY = 0
BallSpeed = 1000.
BallXSpeed = BallSpeed
BallYSpeed = BallSpeed
# 幀率控制Clock對(duì)象
FPSClock = pygame.time.Clock()
# 時(shí)間顯示Clock對(duì)象
ProgramRunClock = pygame.time.get_ticks()
# 時(shí)間顯示Font對(duì)象
RunTimeFont = pygame.font.Font('Jura-DemiBold.ttf', 24)
# 游戲結(jié)果
GameResult = ''
while True:
# 接收信息處理
for event in pygame.event.get():
if event.type == QUIT:
exit()
if event.type == KEYDOWN:
if event.key in BaffleMove:
BaffleMove[event.key] = 1
elif event.type == KEYUP:
if event.key in BaffleMove:
BaffleMove[event.key] = 0
# 繪制背景
Screen.blit(Background, (0, 0))
RunTimeStr = str((pygame.time.get_ticks() - ProgramRunClock) / 1000.0)
# print(RunTimeStr)
# 使用render方法顯示時(shí)間字體
RunTimeSurface = RunTimeFont.render(RunTimeStr, True, (255, 52, 179))
# 顯示時(shí)間
Screen.blit(RunTimeSurface, (0, 0))
# 距上次調(diào)用clock對(duì)象時(shí)間
SecondTimePassed = FPSClock.tick(60) / 1000.0
# 繪制球
Screen.blit(Ball, (BallX, BallY))
BallX += BallXSpeed * SecondTimePassed
BallY += BallYSpeed * SecondTimePassed
# 判斷球邊界條件
if BallX > 500 - Ball.get_width():
BallXSpeed = -BallXSpeed
BallX = 500 - Ball.get_width()
elif BallX < 0:
BallXSpeed = -BallXSpeed
BallX = 0
if BallY > 720 - Ball.get_width():
BallYSpeed = -BallYSpeed
BallY = 720 - Ball.get_width()
elif BallY < 0:
BallYSpeed = -BallYSpeed
BallY = 0
# 定位擋板移動(dòng)后坐標(biāo)
BaffleX -= BaffleMove[K_LEFT] * BaffleXSpeed * SecondTimePassed
BaffleX += BaffleMove[K_RIGHT] * BaffleXSpeed * SecondTimePassed
BaffleY -= BaffleMove[K_UP] * BaffleYSpeed * SecondTimePassed
BaffleY += BaffleMove[K_DOWN] * BaffleYSpeed * SecondTimePassed
# 判斷擋板邊界條件
if BaffleX > 500 - Baffle.get_width():
BaffleX = 500 - Baffle.get_width()
elif BaffleX < 0:
BaffleX = 0
if BaffleY > 720 - 45 - Baffle.get_height():
BaffleY = 720 - 45 - Baffle.get_height()
elif BaffleY < 720 - Baffle.get_height() * 3:
BaffleY = 720 - Baffle.get_height() * 3
# 繪制擋板
Screen.blit(Baffle, (BaffleX, BaffleY))
# 判斷球碰撞擋板條件
# 擋板左上角
if BallX == BaffleX - Ball.get_width() and BallY == BaffleY - Ball.get_height():
BallXSpeed = -BallXSpeed
BallYSpeed = -BallYSpeed
CollisionMusic.play()
# 擋板左下角
elif BallX == BaffleX - Ball.get_width() and BallY == BaffleY + Baffle.get_height():
BallXSpeed = -BallXSpeed
BallYSpeed = -BallYSpeed
CollisionMusic.play()
# 擋板右上角
elif BallX == BaffleX + Baffle.get_width() and BallY == BaffleY - Ball.get_height():
BallXSpeed = -BallXSpeed
BallYSpeed = -BallYSpeed
CollisionMusic.play()
# 擋板右下角
elif BallX == BaffleX + Baffle.get_width() and BallY == BaffleY + Baffle.get_height():
BallXSpeed = -BallXSpeed
BallYSpeed = -BallYSpeed
CollisionMusic.play()
# 擋板上表面
elif BallX > BaffleX and BallX < BaffleX + Baffle.get_width() and BallY > BaffleY - Ball.get_height() and BallY < BaffleY:
BallYSpeed = -BallYSpeed
BallY = BaffleY - Ball.get_height()
CollisionMusic.play()
# 擋板下表面
elif BallX > BaffleX and BallX < BaffleX + Baffle.get_width() and BallY < BaffleY + Baffle.get_height() and BallY > BaffleY:
BallYSpeed = -BallYSpeed
BallY = BaffleY + Baffle.get_height()
CollisionMusic.play()
# 擋板左側(cè)面
elif BallY > BaffleY and BallY < BaffleY + Baffle.get_height() and BallX > BaffleX - Ball.get_width() and BallX < BaffleX:
BallXSpeed = -BallXSpeed
BallX = BaffleX
CollisionMusic.play()
# 擋板右側(cè)面
elif BallY > BaffleY and BallY < BaffleY + Baffle.get_height() and BallX > BaffleX + Baffle.get_width() - Ball.get_width() and BallX < BaffleX + Baffle.get_width():
BallXSpeed = -BallXSpeed
BallX = BaffleX + Baffle.get_width()
CollisionMusic.play()
if BallY > 720 - 45:
GameResult = RunTimeStr
GameOverMusic.play()
return GameResult
# 刷新顯示
pygame.display.update()
def GameResult(GameResult):
# 游戲結(jié)果背景Surface對(duì)象
GameResultBackground = pygame.image.load('GameResultBackground.png').convert()
# 游戲結(jié)果引導(dǎo)
ResultHint = pygame.image.load('ResultFont.png').convert_alpha()
# 游戲結(jié)果Font對(duì)象
GameResultFont = pygame.font.Font('EuroBold.ttf', 100)
# 重新開始按鈕
ReStartButton = pygame.image.load('ReStartButton.png').convert_alpha()
# 重新開始Hover按鈕
ReStartButtonHover = pygame.image.load('ReStartButtonHover.png').convert_alpha()
while True:
for event in pygame.event.get():
if event.type == QUIT:
exit()
if event.type == pygame.MOUSEBUTTONDOWN and 150 <= event.pos[
0] <= 150 + ReStartButton.get_width() and 450 <= event.pos[1] <= 450 + ReStartButton.get_height():
ButtonMusic.play()
return True
# 游戲結(jié)果背景
Screen.blit(GameResultBackground, (0, 0))
# 游戲結(jié)果引導(dǎo)
Screen.blit(ResultHint, (45, 200))
RunTimeSurface = GameResultFont.render(GameResult, True, (255, 69, 0))
Screen.blit(RunTimeSurface, (90, 270))
# 重新開始游戲按鈕
MouseX, MouseY = pygame.mouse.get_pos()
if 150 <= MouseX <= 150 + ReStartButton.get_width() and 450 <= MouseY <= 450 + ReStartButton.get_height():
Screen.blit(ReStartButtonHover, (150, 450))
else:
Screen.blit(ReStartButton, (150, 450))
# 游戲結(jié)果
pygame.display.update()
if __name__ == '__main__':
flag = True
while flag:
GameResultStr = GameStart()
if GameResultStr != '':
flag = GameResult(GameResultStr)關(guān)于怎么在python中使用pygame實(shí)現(xiàn)擋板彈球游戲就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
網(wǎng)站標(biāo)題:怎么在python中使用pygame實(shí)現(xiàn)擋板彈球游戲-創(chuàng)新互聯(lián)
當(dāng)前URL:http://www.dlmjj.cn/article/doppdj.html


咨詢
建站咨詢
