Python小游戏29乒乓球

import pygame

import sys

初始化pygame

pygame.init()

屏幕大小

screen_width = 800

screen_height = 600

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

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.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.draw.rect(screen, self.color, (self.x, self.y, self.width, self.height))

def move(self):

keys = pygame.key.get_pressed()

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

self.y -= 10

if keys[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.time.Clock()

running = True

while running:

for event in pygame.event.get():

if event.type == 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.display.flip()

控制帧率

clock.tick(60)

pygame.quit()

sys.exit()

相关推荐
AI算法沐枫15 分钟前
深度学习python代码处理科研测序数据
数据结构·人工智能·python·深度学习·决策树·机器学习·线性回归
X1A0RAN1 小时前
解决Pycharm中部分文件或文件夹被隐藏不展示问题
ide·python·pycharm
MomentYY1 小时前
第 3 篇:让 Agent 学会分工,LangGraph 构建多 Agent系统
人工智能·python·agent
程序员Jelena2 小时前
Python 代码是什么?—— 从字节到执行的完整解析
python
测试员周周2 小时前
【Appium 系列】第13节-混合测试执行器 — API + UI 的协同执行
开发语言·人工智能·python·功能测试·ui·appium·pytest
用户8356290780512 小时前
Python 操作 PowerPoint OLE 对象
后端·python
小江的记录本2 小时前
【Java基础】Java 8-21新特性:JDK21 LTS:虚拟线程、模式匹配switch、结构化并发、序列集合(附《思维导图》+《面试高频考点清单》)
java·数据库·python·mysql·spring·面试·maven
张登杰踩3 小时前
DINOv2 with Registers 系列模型详解:Giant 版本规格、Register Token 机制与使用指南
python·numpy
隐于花海,等待花开3 小时前
9. Python 文件与输入输出 深度解析
python
2301_780789663 小时前
手游遇到攻击为什么要用SDK游戏盾手游遇到攻击为什么要用 SDK 游戏盾?
安全·web安全·游戏·架构·kubernetes·ddos