使用python和pygame制作擋板彈球游戲
python是個(gè)很有趣的語(yǔ)言,可以在cmd命令窗口運(yùn)行,還有很多的功能強(qiáng)大的模塊。
學(xué)了一天pygame,用python和pygame寫(xiě)一個(gè)簡(jiǎn)單的擋板彈球游戲。
2018年6月21日 00:15:21
GitHub:
# -*- 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") # 背景音樂(lè) pygame.mixer.music.load('Sugar.mp3') pygame.mixer.music.play(-1, 0.0) # 碰撞音效 CollisionMusic = pygame.mixer.Sound('collision.wav') # 重新開(kāi)始按鈕音效 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) # 重新開(kāi)始按鈕 ReStartButton = pygame.image.load('ReStartButton.png').convert_alpha() # 重新開(kāi)始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)) # 重新開(kāi)始游戲按鈕 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)
運(yùn)行結(jié)果:
總結(jié)
以上所述是小編給大家介紹的用python和pygame制作擋板彈球游戲,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
- python使用opencv進(jìn)行人臉識(shí)別
- python實(shí)現(xiàn)讀取并顯示圖片的兩種方法
- Python實(shí)現(xiàn)彈球小游戲的示例代碼
- 用python實(shí)現(xiàn)彈球小游戲
- 用Python寫(xiě)一個(gè)簡(jiǎn)易版彈球游戲
- python實(shí)現(xiàn)簡(jiǎn)單反彈球游戲
- python 實(shí)現(xiàn)彈球游戲的示例代碼
- Python實(shí)現(xiàn)彈球小游戲
- python pygame實(shí)現(xiàn)擋板彈球游戲
- python運(yùn)用pygame庫(kù)實(shí)現(xiàn)雙人彈球小游戲
- python3實(shí)現(xiàn)彈彈球小游戲
- Python基于Tkinter模塊實(shí)現(xiàn)的彈球小游戲
- python編寫(xiě)彈球游戲的實(shí)現(xiàn)代碼
- Python實(shí)現(xiàn)的彈球小游戲示例
- Python彈球小游戲的項(xiàng)目代碼
相關(guān)文章
python腳本生成caffe train_list.txt的方法
下面小編就為大家分享一篇python腳本生成caffe train_list.txt的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04在matplotlib中改變figure的布局和大小實(shí)例
這篇文章主要介紹了在matplotlib中改變figure的布局和大小實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04Python學(xué)習(xí)筆記之變量、自定義函數(shù)用法示例
這篇文章主要介紹了Python學(xué)習(xí)筆記之變量、自定義函數(shù)用法,結(jié)合實(shí)例形式分析了Python變量、自定義函數(shù)的概念、功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-05-05python?pandas創(chuàng)建多層索引MultiIndex的6種方式
這篇文章主要為大家介紹了python?pandas創(chuàng)建多層索引MultiIndex的6種方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Python面向?qū)ο笾?lèi)和對(duì)象實(shí)例詳解
這篇文章主要介紹了Python面向?qū)ο笾?lèi)和對(duì)象,結(jié)合實(shí)例形式詳細(xì)分析了Python面向?qū)ο笙嚓P(guān)的繼承、多態(tài)、類(lèi)及對(duì)象等概念、原理、操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-12-12利用Python校準(zhǔn)本地時(shí)間的方法教程
這篇文章主要給大家介紹了關(guān)于如何利用Python校準(zhǔn)本地時(shí)間的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10利用Python實(shí)現(xiàn)讀取Word表格計(jì)算匯總并寫(xiě)入Excel
這篇文章主要給大家介紹了關(guān)于如何利用Python實(shí)現(xiàn)讀取Word表格計(jì)算匯總并寫(xiě)入Excel的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01