欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

學了一天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')
# 游戲結束音效
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)

  # 游戲結果
  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()
    # 擋板左側面
    elif BallY > BaffleY and BallY < BaffleY + Baffle.get_height() and BallX > BaffleX - Ball.get_width() and BallX < BaffleX:
      BallXSpeed = -BallXSpeed
      BallX = BaffleX
      CollisionMusic.play()
    # 擋板右側面
    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):
  # 游戲結果背景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()

  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
    # 游戲結果背景
    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()
    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))
    # 游戲結果
    pygame.display.update()

if __name__ == '__main__':
  flag = True
  while flag:
    GameResultStr = GameStart()
    if GameResultStr != '':
      flag = GameResult(GameResultStr)

運行結果:

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

相關文章

  • Python Pytorch深度學習之自動微分

    Python Pytorch深度學習之自動微分

    今天小編就為大家分享一篇關于Pytorch自動微分的文章,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-10-10
  • pandas中的.assign()方法的用法示例小結

    pandas中的.assign()方法的用法示例小結

    pandas中的.assign()方法用于創(chuàng)建一個新的DataFrame,其中包含現(xiàn)有DataFrame的副本,并附加了指定的新列或更新了現(xiàn)有列,.assign()方法還可以鏈式使用,以添加多個新列或更新現(xiàn)有列,對pandas中的.assign()方法感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • Django如何開發(fā)簡單的查詢接口詳解

    Django如何開發(fā)簡單的查詢接口詳解

    這篇文章主要給大家介紹了使用Django如何開發(fā)簡單的查詢接口的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Django具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05
  • Python開發(fā)中爬蟲使用代理proxy抓取網(wǎng)頁的方法示例

    Python開發(fā)中爬蟲使用代理proxy抓取網(wǎng)頁的方法示例

    這篇文章主要介紹了Python開發(fā)中爬蟲使用代理proxy抓取網(wǎng)頁的方法,結合具體實例形式分析了urllib模塊代理與requests模塊代理兩種實現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • Python正則獲取、過濾或者替換HTML標簽的方法

    Python正則獲取、過濾或者替換HTML標簽的方法

    這篇文章主要介紹了Python通過正則表達式獲取、過濾或者替換HTML標簽的方法,感興趣的小伙伴們可以參考一下
    2016-01-01
  • python中的隨機數(shù)?Random介紹

    python中的隨機數(shù)?Random介紹

    這篇文章主要介紹了python中的隨機數(shù)?Random,Python標準庫中的random函數(shù),可以生成隨機浮點數(shù)、整數(shù)、字符串,甚至幫助你隨機選擇列表序列中的一個元素,打亂一組數(shù)據(jù)等,即用來生成隨機數(shù),下文更多相關資料需要的小伙伴可以參考一下
    2022-04-04
  • python實現(xiàn)月食效果實例代碼

    python實現(xiàn)月食效果實例代碼

    在本文里小編給大家整理了關于python實現(xiàn)月食效果的相關實例內(nèi)容以及對應代碼,有興趣的朋友們學習下。
    2019-06-06
  • 安裝pycurl報錯Could not run curl-config: 'curl-config'

    安裝pycurl報錯Could not run curl-config: &ap

    這篇文章主要為大家介紹了安裝pycurl報錯Could not run curl-config: 'curl-config'解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • python pandas dataframe 行列選擇,切片操作方法

    python pandas dataframe 行列選擇,切片操作方法

    下面小編就為大家分享一篇python pandas dataframe 行列選擇,切片操作方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python網(wǎng)絡編程之進程詳解

    python網(wǎng)絡編程之進程詳解

    這篇文章主要為大家介紹了python網(wǎng)絡編程之進程,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01

最新評論