# -*- 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弹球游戏移动球拍_python pygame实现挡板弹球游戏的代码相关推荐

  1. python中的pygame弹球游戏代码_python pygame实现挡板弹球游戏

    学了一天pygame,用python和pygame写一个简单的挡板弹球游戏 GitHub: # -*- coding:utf-8 -*- from sys import exit import pyg ...

  2. python编写一个弹球游戏_python pygame实现挡板弹球游戏

    学了一天pygame,用python和pygame写一个简单的挡板弹球游戏 GitHub: # -*- coding:utf-8 -*- from sys import exit import pyg ...

  3. python中的pygame弹球游戏代码_使用python和pygame制作挡板弹球游戏

    python是个很有趣的语言,可以在cmd命令窗口运行,还有很多的功能强大的模块. 学了一天pygame,用python和pygame写一个简单的挡板弹球游戏. 2018年6月21日 00:15:21 ...

  4. python贪吃蛇设计目标_基于 pygame 设计贪吃蛇游戏

    基于 pygame 设计贪吃蛇游戏 贪吃蛇游戏通过玩家控制蛇移动,不断吃到食物增长,直到碰到蛇身或边界游戏结束.其运行效果如下所示: 游戏开始时,先导入可能需要用到的包. import time im ...

  5. python如何使板子移动_python实现移动木板小游戏

    本文实例为大家分享了python实现移动木板小游戏的具体代码,供大家参考,具体内容如下 一.游戏简介 本游戏是通过python编写的小游戏,给初学者熟悉python编程语言抛砖引玉,希望有所帮助. 成 ...

  6. python弹球游戏移动球拍_python编写弹球游戏的实现代码

    弹球游戏: from tkinter import * import time import random tk=Tk() #创建一个界面 tk.title("弹球游戏") can ...

  7. python飞机大战功能模块图_python pygame实现飞机大战游戏

    1.引言 1.1 项目背景 python是一种跨平台的计算机程序设计语言.是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.最初被设计用于编写自动化脚本(Shell),随着版本的不断更新 ...

  8. python游戏背景音乐循环_Python:pygame游戏编程之旅六(游戏中的声音处理)

    一款人性化的游戏中缺少不了声音,比如角色挂时惨叫一声,或PK时武器交锋的声音,还有就是英雄出场时的背景音乐,无不涉及到声音,本节我们就来看一下pygame中如何控制声音,下面是一个例子,但博客上传不了 ...

  9. python游戏贪吃蛇_Python写的贪吃蛇游戏例子_python

    这篇文章主要介绍了Python写的贪吃蛇游戏例子,练手作品,又好玩又可以学到东西,需要的朋友可以参考下 第一次用Python写这种比较实用且好玩的东西,权当练手吧 游戏说明: * P键控制" ...

  10. python写的飞船游戏卡顿,Python3+Pygame实现的射击游戏,很流畅,有音效

    之前看到过很多人写的飞机大战,当然了之前我也写过多个版本,总体来说功能是实现了,但总感觉不够"炫" 今天浏览Python资料的时候,意外发现了这个很好的"射击" ...

最新文章

  1. python nltk book_NLTK学习笔记(一):语言处理和Python
  2. 《互联网运营智慧》之自序(新)
  3. 在linux安装mysql重启提示You must SET PASSWORD before executing this statement的解决方法
  4. Eclipse设置背景色、字体大小
  5. 在Windows操作系统下,由操作系统分配的内存就叫做堆
  6. 教你从头写游戏服务器框架
  7. 样条 开源_成年人在开源社区中是什么样的?
  8. 语义分割之原图与mask的可视化
  9. 在线图片压缩png 和 gif,docsmall.com
  10. VBA新手教程:抽卡模拟实战(3)
  11. 软件测试整改报告,软件测试工作效率低的改进措施
  12. eclipse画UML图
  13. js继承的几种实现方式
  14. matlab数据类型single vs double
  15. 用matlab开环增益,自控原理实验仿真部份
  16. WTS_ERAL_年假生成规则
  17. pca人脸特征降维的过程理解及matlab编程实现
  18. 牛客练习赛63 B 牛牛的鱼缸
  19. 图像处理(一):傅里叶变换简单讲解
  20. Paper reading (六十五):Kernel-penalized regression for analysis of microbiome data

热门文章

  1. SparkStreaming自定义Receiver
  2. 【转】Java的package和import机制
  3. 第一章 Shell基础知识
  4. 常用SQL语句(1)
  5. JS动态呈现还可以输入字数
  6. cobbler装系统
  7. 深入理解JavaScript内部原理(6): 闭包
  8. XP访问windows 2003终端服务显示到期的解决
  9. JDBC操作数据库的问题总结
  10. gluoncv 目标检测,训练自己的数据集