怎么在pygame中使用python制作一个挡板弹球游戏

怎么在pygame中使用python制作一个挡板弹球游戏?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

EasyBaffleBallGame

怎么在pygame中使用python制作一个挡板弹球游戏

#-*-coding:utf-8-*-
fromsysimportexit
importpygame
frompygame.localsimport*
pygame.init()
#创建窗口
ScreenWidth=500
ScreenHright=720
ScreenSize=(ScreenWidth,ScreenHright)
Screen=pygame.display.set_mode(ScreenSize,0,32)
pygame.display.set_caption("Ly'sEasyBallGame")
#背景音乐
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')
#游戏结束音效
GameOverMusic=pygame.mixer.Sound('over.wav')
defGameStart():
#游戏背景Surface对象
Background=pygame.image.load('GameBackground.jpg').convert()
#挡板Surface对象
Baffle=pygame.image.load('Baffle.png').convert_alpha()
#球Surface对象
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对象
FPSClock=pygame.time.Clock()
#时间显示Clock对象
ProgramRunClock=pygame.time.get_ticks()
#时间显示Font对象
RunTimeFont=pygame.font.Font('Jura-DemiBold.ttf',24)
#游戏结果
GameResult=''
whileTrue:
#接收信息处理
foreventinpygame.event.get():
ifevent.type==QUIT:
exit()
ifevent.type==KEYDOWN:
ifevent.keyinBaffleMove:
BaffleMove[event.key]=1
elifevent.type==KEYUP:
ifevent.keyinBaffleMove:
BaffleMove[event.key]=0
#绘制背景
Screen.blit(Background,(0,0))
RunTimeStr=str((pygame.time.get_ticks()-ProgramRunClock)/1000.0)
#print(RunTimeStr)
#使用render方法显示时间字体
RunTimeSurface=RunTimeFont.render(RunTimeStr,True,(255,52,179))
#显示时间
Screen.blit(RunTimeSurface,(0,0))
#距上次调用clock对象时间
SecondTimePassed=FPSClock.tick(60)/1000.0
#绘制球
Screen.blit(Ball,(BallX,BallY))
BallX+=BallXSpeed*SecondTimePassed
BallY+=BallYSpeed*SecondTimePassed
#判断球边界条件
ifBallX>500-Ball.get_width():
BallXSpeed=-BallXSpeed
BallX=500-Ball.get_width()
elifBallX<0:
BallXSpeed=-BallXSpeed
BallX=0
ifBallY>720-Ball.get_width():
BallYSpeed=-BallYSpeed
BallY=720-Ball.get_width()
elifBallY<0:
BallYSpeed=-BallYSpeed
BallY=0
#定位挡板移动后坐标
BaffleX-=BaffleMove[K_LEFT]*BaffleXSpeed*SecondTimePassed
BaffleX+=BaffleMove[K_RIGHT]*BaffleXSpeed*SecondTimePassed
BaffleY-=BaffleMove[K_UP]*BaffleYSpeed*SecondTimePassed
BaffleY+=BaffleMove[K_DOWN]*BaffleYSpeed*SecondTimePassed
#判断挡板边界条件
ifBaffleX>500-Baffle.get_width():
BaffleX=500-Baffle.get_width()
elifBaffleX<0:
BaffleX=0
ifBaffleY>720-45-Baffle.get_height():
BaffleY=720-45-Baffle.get_height()
elifBaffleY<720-Baffle.get_height()*3:
BaffleY=720-Baffle.get_height()*3
#绘制挡板
Screen.blit(Baffle,(BaffleX,BaffleY))
#判断球碰撞挡板条件
#挡板左上角
ifBallX==BaffleX-Ball.get_width()andBallY==BaffleY-Ball.get_height():
BallXSpeed=-BallXSpeed
BallYSpeed=-BallYSpeed
CollisionMusic.play()
#挡板左下角
elifBallX==BaffleX-Ball.get_width()andBallY==BaffleY+Baffle.get_height():
BallXSpeed=-BallXSpeed
BallYSpeed=-BallYSpeed
CollisionMusic.play()
#挡板右上角
elifBallX==BaffleX+Baffle.get_width()andBallY==BaffleY-Ball.get_height():
BallXSpeed=-BallXSpeed
BallYSpeed=-BallYSpeed
CollisionMusic.play()
#挡板右下角
elifBallX==BaffleX+Baffle.get_width()andBallY==BaffleY+Baffle.get_height():
BallXSpeed=-BallXSpeed
BallYSpeed=-BallYSpeed
CollisionMusic.play()
#挡板上表面
elifBallX>BaffleXandBallX<BaffleX+Baffle.get_width()andBallY>BaffleY-Ball.get_height()andBallY<BaffleY:
BallYSpeed=-BallYSpeed
BallY=BaffleY-Ball.get_height()
CollisionMusic.play()
#挡板下表面
elifBallX>BaffleXandBallX<BaffleX+Baffle.get_width()andBallY<BaffleY+Baffle.get_height()andBallY>BaffleY:
BallYSpeed=-BallYSpeed
BallY=BaffleY+Baffle.get_height()
CollisionMusic.play()
#挡板左侧面
elifBallY>BaffleYandBallY<BaffleY+Baffle.get_height()andBallX>BaffleX-Ball.get_width()andBallX<BaffleX:
BallXSpeed=-BallXSpeed
BallX=BaffleX
CollisionMusic.play()
#挡板右侧面
elifBallY>BaffleYandBallY<BaffleY+Baffle.get_height()andBallX>BaffleX+Baffle.get_width()-Ball.get_width()andBallX<BaffleX+Baffle.get_width():
BallXSpeed=-BallXSpeed
BallX=BaffleX+Baffle.get_width()
CollisionMusic.play()
ifBallY>720-45:
GameResult=RunTimeStr
GameOverMusic.play()
returnGameResult
#刷新显示
pygame.display.update()
defGameResult(GameResult):
#游戏结果背景Surface对象
GameResultBackground=pygame.image.load('GameResultBackground.png').convert()
#游戏结果引导
ResultHint=pygame.image.load('ResultFont.png').convert_alpha()
#游戏结果Font对象
GameResultFont=pygame.font.Font('EuroBold.ttf',100)
#重新开始按钮
ReStartButton=pygame.image.load('ReStartButton.png').convert_alpha()
#重新开始Hover按钮
ReStartButtonHover=pygame.image.load('ReStartButtonHover.png').convert_alpha()
whileTrue:
foreventinpygame.event.get():
ifevent.type==QUIT:
exit()
ifevent.type==pygame.MOUSEBUTTONDOWNand150<=event.pos[
0]<=150+ReStartButton.get_width()and450<=event.pos[1]<=450+ReStartButton.get_height():
ButtonMusic.play()
returnTrue
#游戏结果背景
Screen.blit(GameResultBackground,(0,0))
#游戏结果引导
Screen.blit(ResultHint,(45,200))
RunTimeSurface=GameResultFont.render(GameResult,True,(255,69,0))
Screen.blit(RunTimeSurface,(90,270))
#重新开始游戏按钮
MouseX,MouseY=pygame.mouse.get_pos()
if150<=MouseX<=150+ReStartButton.get_width()and450<=MouseY<=450+ReStartButton.get_height():
Screen.blit(ReStartButtonHover,(150,450))
else:
Screen.blit(ReStartButton,(150,450))
#游戏结果
pygame.display.update()
if__name__=='__main__':
flag=True
whileflag:
GameResultStr=GameStart()
ifGameResultStr!='':
flag=GameResult(GameResultStr)

关于怎么在pygame中使用python制作一个挡板弹球游戏问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注恰卡编程网行业资讯频道了解更多相关知识。

发布于 2021-03-24 01:21:35
收藏
分享
海报
0 条评论
159
上一篇:怎么在Asp.Net Core中使用swagger生成一个api文档 下一篇:怎么在Pyhton中利用set()集合实现成果查漏
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码