大旗谷资源网 Design By www.zqyou.com
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制作挡板弹球游戏,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
大旗谷资源网 Design By www.zqyou.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
大旗谷资源网 Design By www.zqyou.com
暂无使用python和pygame制作挡板弹球游戏的评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
2025年11月23日
2025年11月23日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]
