最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用python和pygame制作擋板彈球游戲

 更新時間:2019年12月03日 13:06:23   作者:Tony5t4rk  
這篇文章主要介紹了使用python和pygame制作擋板彈球游戲,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下

python是個很有趣的語言,可以在cmd命令窗口運行,還有很多的功能強大的模塊。

學了一天pygame,用python和pygame寫一個簡單的擋板彈球游戲。

2018年6月21日 00:15:21

GitHub:

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對象
  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)
  # 游戲結(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方法顯示時間字體
    RunTimeSurface = RunTimeFont.render(RunTimeStr, True, (255, 52, 179))
    # 顯示時間
    Screen.blit(RunTimeSurface, (0, 0))
    # 距上次調(diào)用clock對象時間
    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
    # 定位擋板移動后坐標
    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對象
  GameResultBackground = pygame.image.load('GameResultBackground.png').convert()
  # 游戲結(jié)果引導
  ResultHint = pygame.image.load('ResultFont.png').convert_alpha()
  # 游戲結(jié)果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()
  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é)果引導
    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)

運行結(jié)果:

總結(jié)

以上所述是小編給大家介紹的用python和pygame制作擋板彈球游戲,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關文章

  • 詳解python解壓壓縮包的五種方法

    詳解python解壓壓縮包的五種方法

    這里討論下使用Python解壓五種壓縮文件,.gz .tar .tgz .zip .rar的相關知識,文中給大家介紹了python實現(xiàn)rar文件解壓的方法,感興趣的朋友跟隨小編一起看看吧
    2019-07-07
  • python 中的list和array的不同之處及轉(zhuǎn)換問題

    python 中的list和array的不同之處及轉(zhuǎn)換問題

    python中的list是python的內(nèi)置數(shù)據(jù)類型,list中的數(shù)據(jù)類不必相同的,而array的中的類型必須全部相同。這篇文章給大家介紹了python 中的list和array的不同之處及轉(zhuǎn)換問題,需要的朋友參考下吧
    2018-03-03
  • TensorFlow實現(xiàn)簡單的CNN的方法

    TensorFlow實現(xiàn)簡單的CNN的方法

    這篇文章主要介紹了TensorFlow實現(xiàn)簡單的CNN的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • python實現(xiàn)銀行實戰(zhàn)系統(tǒng)

    python實現(xiàn)銀行實戰(zhàn)系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)銀行實戰(zhàn)系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Python構(gòu)建一個文檔掃描器的實現(xiàn)

    Python構(gòu)建一個文檔掃描器的實現(xiàn)

    本文主要介紹了Python構(gòu)建一個文檔掃描器的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • mac使用python識別圖形驗證碼功能

    mac使用python識別圖形驗證碼功能

    這篇文章主要介紹了mac使用python識別圖形驗證碼功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • OpenCV基礎操作指南之圖片的讀取與寫出

    OpenCV基礎操作指南之圖片的讀取與寫出

    圖像處理依賴于得到一幅圖像(例如,一張照片和一個視頻幀)并通過應用信號處理技術的“播放”(playing)來得到預期的結(jié)果,這篇文章主要給大家介紹了關于OpenCV基礎操作指南之圖片讀取與寫出的相關資料,需要的朋友可以參考下
    2022-01-01
  • python PIL/cv2/base64相互轉(zhuǎn)換實例

    python PIL/cv2/base64相互轉(zhuǎn)換實例

    今天小編就為大家分享一篇python PIL/cv2/base64相互轉(zhuǎn)換實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python調(diào)用C++程序的方法詳解

    Python調(diào)用C++程序的方法詳解

    這篇文章主要介紹了Python調(diào)用C++程序的方法,文中通過示例代碼介紹的詳細,相信對大家具有一定的參考借鑒價值,需要的朋友們下面來一起看看吧。
    2017-01-01
  • Python中使用Beautiful Soup庫的超詳細教程

    Python中使用Beautiful Soup庫的超詳細教程

    這篇文章主要介紹了Python中使用Beautiful Soup庫的超詳細教程,示例代碼基于Python2.x版本,極力推薦!需要的朋友可以參考下
    2015-04-04

最新評論

潞西市| 宣化县| 惠东县| 保康县| 额济纳旗| 贵港市| 新乐市| 河东区| 同江市| 景谷| 神池县| 菏泽市| 称多县| 望谟县| 吴堡县| 勃利县| 梅河口市| 互助| 衢州市| 洛隆县| 安图县| 体育| 武山县| 宁夏| 辉县市| 崇礼县| 佛坪县| 班戈县| 六枝特区| 建阳市| 宣城市| 玛曲县| 宿松县| 普定县| 漯河市| 波密县| 安仁县| 晋城| 德令哈市| 达拉特旗| 望江县|