游戏界面截图:
按键控制:
空格: 暂停/开始
W: 上
S: 下
游戏玩法说明:
开始游戏之后,按键盘W/S按键控制球拍上下移动,接住球即可继续游戏,没接住的话游戏结束。结束后按空格可以重新开始游戏
使用的文件:
图片和音乐也可以没有,可跳过, 但是游戏运行后没音效和图片。下载音频和图片压缩包,解压放到代码相同目录下,百度网盘 :https://pan.baidu.com/s/12QXF2530ymr_sdXAa-e43g 提取码: q6cw
介绍完毕,下面开始撸代码。代码注释比较详细,可以直接复制运行,也可以仔细阅读学习。
Sprite为我们提供了一个装载游戏对象的类,比如这里面的球拍和球,而Group则是Sprite的组合,可以轻松的对Group里面的各个sprite进行碰撞检测、删除、绘制。
依赖库:Pygame
安装pygame模块 : pip install pygame
兵乓球:ball.py
import pygame
class ball(pygame.sprite.Sprite):
"""
乒乓球类,存放相关参数
"""
width = -1 # 宽度
speedx = -1 # 每秒横轴移动的像素点
speedy = -1 # 每秒纵轴移动的像素点
def __init__(self, color, size, screensize, speed, img=False):
pygame.sprite.Sprite.__init__(self)
if img: # 有图用图,忽略大小size设置,大小由图片大小确定
try:
self.image = pygame.image.load(img)
self.width = self.image.get_size()[0] # 大小修正
except Exception as e: # 图片文件发生错误用方块替代
print("温馨提示: ", e, ", 请正确配置图片文件")
self.image = pygame.Surface((size, size))
self.width = size
self.image.fill(color)
else: # 没图用方块替代
self.image = pygame.Surface((size, size))
self.width = size
self.image.fill(color)
self.rect = self.image.get_rect() # 位置数据
(self.WIDTH, self.HEIGHT) = screensize
(self.speedx, self.speedy) = speed
def reset(self, speed):
self.rect.x = 490 # 球数据
self.rect.y = 80
(self.speedx, self.speedy) = speed
def update(self):
# 上下边界
if (((self.rect.y + self.width) > self.HEIGHT) or self.rect.y < 0):
self.speedy = -self.speedy
elif (self.rect.x + self.width) > self.WIDTH: # 右边界处理
self.speedx = -self.speedx
self.rect.x = self.rect.x + self.speedx
self.rect.y = self.rect.y + self.speedy
乒乓球拍:racket.py
import pygame
class racket(pygame.sprite.Sprite):
"""
球拍类,存放相关参数
"""
rkth = 100