python

超轻量级php框架startmvc

使用python和pygame制作挡板弹球游戏

更新时间:2020-08-11 19:54:01 作者:startmvc
python是个很有趣的语言,可以在cmd命令窗口运行,还有很多的功能强大的模块。学了一天pyg

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()
# 创建窗口
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))
 # 距上次调用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)

运行结果:

总结

以上所述是小编给大家介绍的用python和pygame制作挡板弹球游戏,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持! 如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

python pygame弹球游戏 python pygame python 弹球游戏