怎么在pygame中使用python制作一个挡板弹球游戏
怎么在pygame中使用python制作一个挡板弹球游戏?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
EasyBaffleBallGame
#-*-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制作一个挡板弹球游戏问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注恰卡编程网行业资讯频道了解更多相关知识。
推荐阅读
-
Python中怎么动态声明变量赋值
这篇文章将为大家详细讲解有关Python中怎么动态声明变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中变量的存储原理是什么
-
Python中怎么引用传递变量赋值
这篇文章将为大家详细讲解有关Python中怎么引用传递变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中怎么获取程序执行文件路径
python中怎么获取程序执行文件路径,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的...
-
Python中如何获取文件系统的使用率
Python中如何获取文件系统的使用率,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴...
-
Python中怎么获取文件的创建和修改时间
这篇文章将为大家详细讲解有关Python中怎么获取文件的创建和修改时间,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读...
-
python中怎么获取依赖包
今天就跟大家聊聊有关python中怎么获取依赖包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据...
-
python怎么实现批量文件加密功能
-
python中怎么实现threading线程同步
小编给大家分享一下python中怎么实现threading线程同步,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!...
-
python下thread模块创建线程的方法
本篇内容介绍了“python下thread模块创建线程的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来...