Python小游戏29乒乓球

ops/2025/2/8 2:46:06/

import pygame>pygame

import sys

# 初始化pygame>pygame

pygame>pygame.init()

# 屏幕大小

screen_width = 800

screen_height = 600

screen = pygame>pygame.display.set_mode((screen_width, screen_height))

pygame>pygame.display.set_caption("打乒乓球")

 

# 颜色定义

WHITE = (255, 255, 255)

BLACK = (0, 0, 0)

 

# 球类

class Ball:

    def __init__(self, x, y, radius, color, x_vel, y_vel):

        self.x = x

        self.y = y

        self.radius = radius

        self.color = color

        self.x_vel = x_vel

        self.y_vel = y_vel

 

    def draw(self, screen):

        pygame>pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), self.radius)

 

    def move(self):

        self.x += self.x_vel

        self.y += self.y_vel

 

        # 碰到左右边界反弹

        if self.x - self.radius < 0 or self.x + self.radius > screen_width:

            self.x_vel = -self.x_vel

 

        # 碰到上边界增加速度,碰到下边界游戏结束(这里简单处理为碰到下边界也反弹,用于演示)

        if self.y - self.radius < 0:

            self.y_vel = -self.y_vel

            self.x_vel *= 1.1 # 增加水平速度,使游戏更有挑战性

        elif self.y + self.radius > screen_height:

            # 实际应用中可以在这里结束游戏

            self.y = screen_height - self.radius # 为了演示,让球从底部反弹

            self.y_vel = -self.y_vel

            self.x_vel *= 0.9 # 减速,增加游戏难度

 

# 玩家类(这里只实现一个玩家,即左侧玩家,使用键盘W和S键控制)

class Player:

    def __init__(self, x, y, width, height, color):

        self.x = x

        self.y = y

        self.width = width

        self.height = height

        self.color = color

        self.vel = 0

 

    def draw(self, screen):

        pygame>pygame.draw.rect(screen, self.color, (self.x, self.y, self.width, self.height))

 

    def move(self):

        keys = pygame>pygame.key.get_pressed()

        if keys[pygame>pygame.K_w] and self.y > 0:

            self.y -= 10

        if keys[pygame>pygame.K_s] and self.y < screen_height - self.height:

            self.y += 10

 

# 创建球和玩家对象

ball = Ball(screen_width // 2, screen_height // 2, 15, WHITE, 5, 5)

player = Player(10, screen_height // 2 - 20, 10, 40, WHITE)

 

# 游戏主循环

clock = pygame>pygame.time.Clock()

running = True

while running:

    for event in pygame>pygame.event.get():

        if event.type == pygame>pygame.QUIT:

            running = False

 

    # 移动球和玩家

    ball.move()

    player.move()

 

    # 检测球是否碰到玩家(这里只检测左侧玩家)

    if (ball.x - ball.radius < player.x + player.width and

        ball.x + ball.radius > player.x and

        ball.y - ball.radius < player.y + player.height and

        ball.y + ball.radius > player.y):

        ball.y_vel = -ball.y_vel

 

    # 填充背景色

    screen.fill(BLACK)

 

    # 绘制球和玩家

    ball.draw(screen)

    player.draw(screen)

 

    # 更新屏幕显示

    pygame>pygame.display.flip()

 

    # 控制帧率

    clock.tick(60)

 

pygame>pygame.quit()

sys.exit()


http://www.ppmy.cn/ops/156611.html

相关文章

【蓝桥杯嵌入式】2_LED

全部代码网盘自取 链接&#xff1a;https://pan.baidu.com/s/1PX2NCQxnADxYBQx5CsOgPA?pwd3ii2 提取码&#xff1a;3ii2 1、电路图 74HC573是八位锁存器&#xff0c;当控制端LE脚为高电平时&#xff0c;芯片“导通”&#xff0c;LE为低电平时芯片“截止”即将输出状态“锁存”…

Linux系统离线部署MySQL详细教程(带每步骤图文教程)

1、登录官网下载对应的安装包 MySQL :: Developer Zone 2、将压缩包上传到服务器上&#xff0c;这里直接上传到/usr/local路径上 使用sftp工具上传到/usr/local目录上 3、解压压缩包 tar -xf mysql-8.0.39-linux-glibc2.17-x86_64.tar.xz 4、将mysql-8.0.39-linux-glibc2.17…

通过 Docker 部署 S3 对象存储服务器的终极教程

在当今数据驱动的时代&#xff0c;拥有一个灵活且高效的对象存储解决方案至关重要。利用 Docker 部署 S3 对象存储服务器&#xff0c;不仅可以提升数据管理的灵活性&#xff0c;还能大幅降低运营成本。本文将为您提供详细步骤&#xff0c;助您轻松搭建 S3 存储解决方案。 如何…

【Mybatis Plus】JSqlParser解析sql语句

【Mybatis Plus】JSqlParser解析sql语句 【一】JSqlParser 是什么【二】JSqlParser 的安装步骤【三】使用场景【1】sql语句解析【2】SQL 语句转换【3】SQL 语句生成【4】SQL 语句验证 【四】在使用 JSqlParser 时&#xff0c;如何处理 SQL 注入攻击&#xff1f;【1】使用预编译…

Spark SQL读写Hive Table部署

个人博客地址&#xff1a;Spark SQL读写Hive Table部署 | 一张假钞的真实世界 官网参考文档&#xff1a;Hive Tables。 本文使用的组件版本如下&#xff1a; Spark 3.1.2Hive 3.1.2 第一步&#xff1a;Hive部署 在所有Worker节点上部署Hive。主要是使用Hive下面的libs。 …

docker和k8s实践

Docker 和 Kubernetes 是现代云原生应用开发和运维中的两个重要技术。Docker 提供容器化技术&#xff0c;可以将应用及其依赖打包在容器中&#xff0c;而 Kubernetes 则负责容器的编排、部署、伸缩和管理。以下是 Docker 和 Kubernetes 的实践指南&#xff0c;涵盖基础安装、配…

【华为OD机试】真题E卷-招聘(Java)

一、题目描述 题目描述: 某公司组织一场公开招聘活动,假设由于人数和场地的限制,每人每次面试的时长不等,并已经安排给定,用(S1,E1)、 (S2,E2)、 (Sj,Ej)…(Si < Ei,均为非负整数)表示每场面试的开始和结束时间。 面试采用一对一的方式,即一名面试官同时只能面试一名…

Windows图形界面(GUI)-QT-C/C++ - QT Dock Widget

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 一、概述 二、使用场景 1. 工具栏 2. 侧边栏 3. 调试窗口 三、常见样式 1. 停靠位置 2. 浮动窗口 3. 可关闭 4. 可移动 四、属性设置 1. 设置内容 2. 获取内容 3. 设置标题 …