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

python pygame實現(xiàn)擋板彈球游戲

 更新時間:2019年11月25日 16:10:04   作者:Tony5t4rk  
這篇文章主要為大家詳細介紹了python pygame實現(xiàn)擋板彈球游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

    # 定位擋板移動后坐標(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對象
  GameResultBackground = pygame.image.load('GameResultBackground.png').convert()
  # 游戲結(jié)果引導(dǎo)
  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é)果引導(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)

運行結(jié)果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python?遞歸式實現(xiàn)二叉樹前序,中序,后序遍歷

    Python?遞歸式實現(xiàn)二叉樹前序,中序,后序遍歷

    這篇文章主要介紹了Python?遞歸式實現(xiàn)二叉樹前序,中序,后序遍歷,更多相關(guān)資料,需要的小伙伴可以參考下面具體的文章內(nèi)容
    2022-03-03
  • Python基于隨機采樣一至性實現(xiàn)擬合橢圓(優(yōu)化版)

    Python基于隨機采樣一至性實現(xiàn)擬合橢圓(優(yōu)化版)

    這篇文章主要對上一版的Python基于隨機采樣一至性實現(xiàn)擬合橢圓的優(yōu)化,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的可以了解一下
    2022-11-11
  • django 使用 PIL 壓縮圖片的例子

    django 使用 PIL 壓縮圖片的例子

    今天小編就為大家分享一篇django 使用 PIL 壓縮圖片的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python如何遍歷numpy數(shù)組

    Python如何遍歷numpy數(shù)組

    這篇文章主要介紹了Python如何遍歷numpy數(shù)組問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python3.7下安裝pyqt5的方法步驟(圖文)

    Python3.7下安裝pyqt5的方法步驟(圖文)

    這篇文章主要介紹了Python3.7下安裝pyqt5的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 在Django中輸出matplotlib生成的圖片方法

    在Django中輸出matplotlib生成的圖片方法

    今天小編就為大家分享一篇在Django中輸出matplotlib生成的圖片方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python中的copy()函數(shù)詳解(list,array)

    Python中的copy()函數(shù)詳解(list,array)

    這篇文章主要介紹了Python中的copy()函數(shù)詳解(list,array),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 在Python中pandas.DataFrame重置索引名稱的實例

    在Python中pandas.DataFrame重置索引名稱的實例

    今天小編就為大家分享一篇在Python中pandas.DataFrame重置索引名稱的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • 最新評論

    手机| 寿光市| 大田县| 凤山县| 登封市| 寻乌县| 新河县| 瑞金市| 汤阴县| 兴海县| 夏津县| 郎溪县| 鸡东县| 靖江市| 岳西县| 莱西市| 板桥市| 义乌市| 浦东新区| 涿州市| 南丰县| 苍南县| 土默特右旗| 古交市| 辽源市| 临江市| 武胜县| 南陵县| 湄潭县| 土默特左旗| 安国市| 大冶市| 杂多县| 松江区| 深圳市| 桓仁| 星子县| 龙井市| 喀什市| 涞源县| 肇源县|