python-小游戏-弹球对决

python-小游戏-弹球对决

需要安装pygame

代码—game-Pong.py

import pygame
import random

# Initialize pygame
pygame.init()

# Set up the screen
WIDTH = 600
HEIGHT = 400
BALL_RADIUS = 20
PAD_WIDTH = 10
PAD_HEIGHT = 80
WHITE = (255, 255, 255)
PURPLE = (128, 0, 128)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
LIME = (0, 128, 0)
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Pong")

# Set up the clock
clock = pygame.time.Clock()

# Initialize variables
LEFT = False
RIGHT = True
ball_pos = [0, 0]
ball_vel = [0, 0]
paddle1_pos = HEIGHT // 2 - PAD_HEIGHT // 2
paddle2_pos = HEIGHT // 2 - PAD_HEIGHT // 2
paddle1_vel = 0
paddle2_vel = 0
score1 = 0
score2 = 0

# Function to spawn the ball
def spawn_ball(direction):
    global ball_pos, ball_vel
    ball_pos = [WIDTH // 2, HEIGHT // 2]
    vx = random.randrange(120, 240) / 60
    vy = -random.randrange(60, 180) / 60
    if direction == LEFT:
        vx = -vx
    ball_vel = [vx, vy]

# Function to handle events
def handle_events():
    global paddle1_vel, paddle2_vel
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_w:
                paddle1_vel -= 4
            elif event.key == pygame.K_s:
                paddle1_vel += 4
            elif event.key == pygame.K_UP:
                paddle2_vel -= 4
            elif event.key == pygame.K_DOWN:
                paddle2_vel += 4
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_w or event.key == pygame.K_s:
                paddle1_vel = 0
            elif event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                paddle2_vel = 0

# Function to update game state
def update():
    global paddle1_pos, paddle2_pos, ball_pos, ball_vel, score1, score2, paddle1_vel, paddle2_vel
    ball_pos[0] += ball_vel[0]
    ball_pos[1] += ball_vel[1]
    if ball_pos[1] - BALL_RADIUS <= 0 or ball_pos[1] + BALL_RADIUS >= HEIGHT:
        ball_vel[1] = -ball_vel[1]
    if ball_pos[0] - BALL_RADIUS <= PAD_WIDTH:
        if paddle1_pos <= ball_pos[1] <= paddle1_pos + PAD_HEIGHT:
            ball_vel[0] = -ball_vel[0]
            ball_vel[0] += ball_vel[0] / 10
            ball_vel[1] += ball_vel[1] / 10
        else:
            score2 += 1
            spawn_ball(True)
    elif ball_pos[0] + BALL_RADIUS >= WIDTH - PAD_WIDTH:
        if paddle2_pos <= ball_pos[1] <= paddle2_pos + PAD_HEIGHT:
            ball_vel[0] = -ball_vel[0]
            ball_vel[0] += ball_vel[0] / 10
            ball_vel[1] += ball_vel[1] / 10
        else:
            score1 += 1
            spawn_ball(False)
    if not (0 <= paddle1_pos + paddle1_vel <= HEIGHT - PAD_HEIGHT):
        paddle1_vel = 0
    if not (0 <= paddle2_pos + paddle2_vel <= HEIGHT - PAD_HEIGHT):
        paddle2_vel = 0
    paddle1_pos += paddle1_vel
    paddle2_pos += paddle2_vel

# Function to draw everything
def draw():
    screen.fill((0, 0, 0))
    pygame.draw.line(screen, PURPLE, [WIDTH // 2, 0], [WIDTH // 2, HEIGHT], 3)
    pygame.draw.line(screen, RED, [PAD_WIDTH, 0], [PAD_WIDTH, HEIGHT], 1)
    pygame.draw.line(screen, GREEN, [WIDTH - PAD_WIDTH, 0], [WIDTH - PAD_WIDTH, HEIGHT], 1)
    pygame.draw.circle(screen, PURPLE, [WIDTH // 2, HEIGHT // 2], 85, 4)
    pygame.draw.circle(screen, WHITE, ball_pos, BALL_RADIUS, 13)
    pygame.draw.circle(screen, WHITE, ball_pos, BALL_RADIUS, 7)
    pygame.draw.rect(screen, WHITE, [0, paddle1_pos, PAD_WIDTH, PAD_HEIGHT])
    pygame.draw.rect(screen, WHITE, [WIDTH - PAD_WIDTH, paddle2_pos, PAD_WIDTH, PAD_HEIGHT])
    font = pygame.font.Font(None, 55)
    score1_text = font.render(str(score1), True, RED)
    score2_text = font.render(str(score2), True, LIME)
    screen.blit(score1_text, [180, 50])
    screen.blit(score2_text, [420, 50])


def main():
    global ball_pos, ball_vel, paddle1_pos, paddle2_pos, paddle1_vel, paddle2_vel, score1, score2

    # 初始化球和球拍的位置、速度等变量
    paddle1_vel = 0
    paddle2_vel = 0

    spawn_ball(bool(random.randrange(0, 2)))  # 生成球

    while True:
        handle_events()  # 处理事件
        update()  # 更新游戏状态
        draw()  # 绘制游戏画面
        pygame.display.update()  # 更新显示
        clock.tick(60)  # 控制帧率


# Run the game
if __name__ == "__main__":
    main()

运行代码
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/686933.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】C++提供类型转换的机制

目录 前言&#xff1a; 一&#xff0c;static_cast 二&#xff0c;reinterpret_cast 三&#xff0c;const_cast 四&#xff0c;dynamic_cast 前言&#xff1a; 传统的不同类型转换有隐式类型转换&#xff08;类型不匹配时编译器自动进行的转换&#xff0c;如&#xff1a;i…

【qt】MDI多文档界面开发

MDI多文档界面开发 一.应用场景二.界面设计三.界面类设计四.实现功能1.新建文档2.打开文件3.关闭所有4.编辑功能5.MDI页模式6.瀑布展开模式7.平铺模式 五.总结 一.应用场景 类似于vs的界面功能,工具栏的功能可以对每个文档使用! 二.界面设计 老规矩,边做项目边学! 目标图: 需…

2024年人力资源与社会治理国际会议(ICHRSG 2024)

2024年人力资源与社会治理国际会议 2024 International Conference on Human Resources and Social Governance 会议简介 2024年人力资源与社会治理国际会议是一个聚焦全球人力资源发展与社会治理创新的高端交流平台。本次会议汇集了全球顶尖的专家学者、企业高管和政策制定者&…

Transformer学习之SwinTransformer

1.算法简介 本文主要参考自以下链接&#xff0c;整理成线上的形式用于备忘&#xff0c;排版太麻烦了直接贴图&#xff0c;参考的朋友慎重&#xff0c;不如直接看参考链接&#xff0c;后期有了新的理解继续更正。 参考链接1&#xff1a;Swin-Transformer网络结构详解_swin tran…

智能售货机的商业潜力

智能售货机的商业潜力 1. 即时购物体验&#xff1a;在快节奏的生活中&#xff0c;人们往往缺乏闲暇去超市购物。智能售货机以其便捷性&#xff0c;提供了一种快速获取商品的方式&#xff0c;只需简单几步即可完成购买。 2. 全天候服务&#xff1a;智能售货机不受时间限制&…

鸿蒙轻内核M核源码分析系列九 互斥锁Mutex

多任务环境下会存在多个任务访问同一公共资源的场景&#xff0c;而有些公共资源是非共享的临界资源&#xff0c;只能被独占使用。鸿蒙轻内核使用互斥锁来避免这种冲突&#xff0c;互斥锁是一种特殊的二值性信号量&#xff0c;用于实现对临界资源的独占式处理。另外&#xff0c;…

使用JMeter软件压测接口配置说明

1、下载完该软件https://blog.csdn.net/wust_lh/article/details/86095924 2.点击bin文件中jmeter.bat脚本https://blog.csdn.net/wust_lh/article/details/86095924 3.官网地址https://jmeter.apache.org/download_jmeter.cgi 通过 【Options】->【Choose Language】变更为…

【调试笔记-20240606-Linux-为 OpenWrt 的 nginx 服务器添加Shell CGI 支持】

调试笔记-系列文章目录 调试笔记-20240606-Linux-为 OpenWrt 的 nginx 服务器添加Shell CGI 支持 文章目录 调试笔记-系列文章目录调试笔记-20240606-Linux-为 OpenWrt 的 nginx 服务器添加Shell CGI 支持 前言一、调试环境操作系统&#xff1a;Windows 10 专业版调试环境调试…

flutter日历范围选择器

1.传入日期跨度&#xff0c;选择上架日期时&#xff0c;自动显示下架日期 2.手动选择上架日期和下架日期(图中下架日期自动填了只需CalendarDateRangePicker在initState方法中使用_startDate widget.initialStartDate; _endDate widget.initialEndDate;&#xff0c;而不直接…

人工智能绘画的历史

人工智能绘画的起源可以追溯到20世纪50年代。当时&#xff0c;艺术家和科学家开始使用计算机生成图像和图形&#xff0c;将绘画艺术与技术领域相结合。计算机图像可以被视为人工智能绘画的一部分。下面&#xff0c;我们将按照时间顺序来了解人工智能绘画发展的一些关键时间节点…

26-LINUX--I/O复用-select

一.I/O复用概述 /O复用使得多个程序能够同时监听多个文件描述符&#xff0c;对提高程序的性能有很大帮助。以下情况适用于I/O复用技术&#xff1a; ◼ TCP 服务器同时要处理监听套接字和连接套接字。 ◼ 服务器要同时处理 TCP 请求和 UDP 请求。 ◼ 程序要同时处理多个套接…

如何使用SeaFile文件共享服务器结合内网穿透将家中电脑变成个人云盘

文章目录 1. 前言2. SeaFile云盘设置2.1 Owncould的安装环境设置2.2 SeaFile下载安装2.3 SeaFile的配置 3. cpolar内网穿透3.1 Cpolar下载安装3.2 Cpolar的注册3.3 Cpolar云端设置3.4 Cpolar本地设置 4.公网访问测试5.结语 1. 前言 本文主要为大家介绍&#xff0c;如何使用两个…

冯喜运:6.7今日外汇黄金原油走势分析及日内操作策略

【黄金消息面分析】&#xff1a;美国初请失业金人数超预期&#xff0c;市场对美联储9月降息预期升温&#xff0c;全球降息潮起&#xff0c;黄金市场受支撑。北京时间本周四&#xff0c;美国劳工部公布的数据显示&#xff0c;截至6月1日当周初请失业金人数增加至22.9万人&#x…

StableDiffusion Windows本地部署

检查电脑环境 启动CMD命令窗。 如上图&#xff0c;在CMD窗口输入python命令&#xff0c;可查看本地安装的python版本信息等。输入exit()退出python命令行 执行where命令&#xff0c;可查看python安装目录。 必须安装Python3.10.x&#xff0c;因为stable-diffusion-webui的一…

卫星通信频段有哪些

卫星通信使用到的频段涵盖L, S, C, Ku, Ka等&#xff0c;而最常用的频段是C(4~8GHz)和Ku(12~18GHz)频段&#xff0c;而Ka(27-40GHz)频段是后起之秀。目前地球赤道上空有限的地球同步卫星轨位几乎已被各国占满&#xff0c;C和Ku频段内的频率资源被大量使用&#xff0c;而Ka频段的…

Java学习中,如何理解注解的概念及常用注解的使用方法

一、简介 Java注解&#xff08;Annotation&#xff09;是一种元数据&#xff0c;提供了一种将数据与程序元素&#xff08;类、方法、字段等&#xff09;关联的方法。注解本身不改变程序的执行逻辑&#xff0c;但可以通过工具或框架进行处理&#xff0c;从而影响编译、运行时的…

新品发布 | 飞凌嵌入式RK3576核心板,为AIoT应用赋能

为了充分满足AIoT市场对高性能、高算力和低功耗主控日益增长的需求&#xff0c;飞凌嵌入式全新推出基于Rockchip RK3576处理器开发设计的FET3576-C核心板&#xff01; 集成4个ARM Cortex-A72和4个ARM Cortex-A53高性能核&#xff0c;内置6TOPS超强算力NPU&#xff0c;为您的AI…

ComfyUI 完全入门:必备插件

ComfyUI 是一个基于 Stable Diffusion 的AI绘画创作工具&#xff0c;最近发展势头特别迅猛&#xff0c;但是 ComfyUI 的上手门槛有点高&#xff0c;用户需要对 Stable Diffusion 以及各种数字技术的原理有一定的了解才行。这个系列将会介绍 ComfyUI 的一些基础概念和使用方法&a…

1+x(Java)中级题库易混淆理论题(三)

SQL 语句中进行 group by 分组时&#xff0c;可以不写 where 子句 分组时可以多层分组&#xff0c;比如&#xff1a;先按照省、再按照市来分组。 File 类不能获取文件的内容 在使用 select 语句进行查询分组时&#xff0c;如果希望去掉不满足条件的分组&#xff0c;使用 hav…

ES 8的向量检索性能调优实践

前言 ES的官方实验室曾发布过一篇博客,介绍了使ES向量检索性能获得显著提升的技术要点与展望: 多线程搜索能力的利用:Lucene 的分段架构允许实现多线程搜索能力。Elasticsearch 通过同时搜索多个段来提高性能,使用所有可用的 CPU 核心的计算能力显著减少了单个搜索的延迟。…