基于Python3-Pygame的乒乓球游戏

游戏界面截图:

在这里插入图片描述

按键控制:

空格: 暂停/开始
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  
  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
Pygame是一个Python模块,专门用于编写电子游戏和多媒体应用程序。Pygame基于SDL库(Simple DirectMedia Layer),是一套跨平台的多媒体库,可用于创建2D游戏、图像处理、音频和视频应用程序等。 关于乒乓球游戏,您可以使用Pygame来实现。您可以使用Pygame提供的图形和音频库来创建游戏场景、球和球拍的图形,以及处理声音效果。您可以使用键盘或鼠标来控制球拍的移动,以及检测球是否碰到了球拍或墙壁。 以下是一个简单的乒乓球游戏的示例代码: ``` import pygame # 初始化Pygame pygame.init() # 设置游戏窗口大小 size = (700, 500) screen = pygame.display.set_mode(size) pygame.display.set_caption("Ping Pong") # 设置颜色 black = (0, 0, 0) white = (255, 255, 255) # 设置球和球拍 ball_x = 350 ball_y = 250 ball_speed_x = 5 ball_speed_y = 5 paddle_a_x = 20 paddle_a_y = 200 paddle_b_x = 660 paddle_b_y = 200 paddle_speed = 5 # 游戏循环 done = False clock = pygame.time.Clock() while not done: for event in pygame.event.get(): if event.type == pygame.QUIT: done = True # 移动球拍 keys = pygame.key.get_pressed() if keys[pygame.K_w]: paddle_a_y -= paddle_speed if keys[pygame.K_s]: paddle_a_y += paddle_speed if keys[pygame.K_UP]: paddle_b_y -= paddle_speed if keys[pygame.K_DOWN]: paddle_b_y += paddle_speed # 移动球 ball_x += ball_speed_x ball_y += ball_speed_y # 碰撞检测 if ball_y <= 0 or ball_y >= 490: ball_speed_y *= -1 if ball_x <= 0 or ball_x >= 690: ball_speed_x *= -1 if ball_x <= 40 and ball_y >= paddle_a_y and ball_y <= paddle_a_y + 100: ball_speed_x *= -1 if ball_x >= 630 and ball_y >= paddle_b_y and ball_y <= paddle_b_y + 100: ball_speed_x *= -1 # 绘制场景 screen.fill(black) pygame.draw.rect(screen, white, [paddle_a_x, paddle_a_y, 20, 100]) pygame.draw.rect(screen, white, [paddle_b_x, paddle_b_y, 20, 100]) pygame.draw.circle(screen, white, [ball_x, ball_y], 10) # 更新屏幕 pygame.display.flip() # 设置帧率 clock.tick(60) # 关闭Pygame pygame.quit() ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BugMiaowu2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值