python桌球游戏

以下是一个简单的桌球游戏的示例代码:

import pygame

import random

# 初始化pygame

pygame.init()

# 设置屏幕大小和标题

screen_width = 800

screen_height = 500

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

pygame.display.set_caption('Desktop Billiards')

# 定义颜色常量

BLACK = (0, 0, 0)

WHITE = (255, 255, 255)

RED = (255, 0, 0)

# 定义球和杆的类

class Ball:

def __init__(self, x, y, radius, color, velocity=(0, 0)):

self.x = x

self.y = y

self.radius = radius

self.color = color

self.velocity = velocity

def move(self):

self.x += self.velocity[0]

self.y += self.velocity[1]

def draw(self, screen):

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

class CueStick:

def __init__(self, x, y, length, color):

self.x = x

self.y = y

self.length = length

self.color = color

self.angle = 0

def set_angle(self, event):

if event.type == pygame.MOUSEMOTION:

self.angle = pygame.math.Vector2(event.pos[0], event.pos[1]).angle_to((self.x, self.y))

def draw(self, screen):

pygame.draw.line(screen, self.color, (self.x, self.y), (self.x + self.length * math.cos(self.angle), self.y + self.length * math.sin(self.angle)), 5)

# 实例化球和杆

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

cue_stick = CueStick(screen_width / 2, screen_height - 20, 50, RED)

# 游戏循环

running = True

clock = pygame.time.Clock()

while running:

for event in pygame.event.get():

if event.type == pygame.QUIT:

running = False

cue_stick.set_angle(event)

# 移动球

ball.move()

# 检测球是否撞击墙壁

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

ball.velocity[0] = -ball.velocity[0]

if ball.y - ball.radius > screen_height or ball.y + ball.radius < 0:

ball.velocity[1] = -ball.velocity[1]

# 清除屏幕

screen.fill(BLACK)

# 绘制球和杆

ball.draw(screen)

cue_stick.draw(screen)

# 更新屏幕显示

pygame.display.flip()

# 控制游戏帧率

clock.tick(60)

# 退出pygame

pygame.quit()

这段代码创建了一个简单的桌球游戏,你可以通过鼠标移动杆来控制球的方向。球会以固定的速度移动,并在碰到屏幕边缘时反弹。这个例子提供了桌球游戏的基本元素,但没有包括分数追踪、玩家输胜判断或者玩家控制的更多复杂性。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 深入系统源码探讨 Activity、Window 和 View 的关系与实践

文章目录 1、概括2、Android Window 设计2.1、Window 类2.2、PhoneWindow2.3、WindowManager2.4、ViewRootImpl2.5、DecorView 3、Android Activity 设计3.1、Activity的基本概念3.2.、Activity的生命周期3.3、Activity的内部结构 4、Android View 设计4.1、View的基本概念4.2、…

LangChain 0.2 - 构建RAG应用

本文翻译整理自&#xff1a;Build a Retrieval Augmented Generation (RAG) App https://python.langchain.com/v0.2/docs/tutorials/rag/ 文章目录 一、项目说明什么是 RAG &#xff1f;概念索引检索和[生成 二、预览三、详细演练1.索引&#xff1a;加载2. 索引&#xff1a;拆…

C++中的类型查询:探索typeid和type_info

前言 在编程的世界里&#xff0c;了解和操作数据类型是至关重要的。Python 通过内置的 type() 函数提供了一种简单的方式来查询变量的类型。然而&#xff0c;在 C 这种静态类型语言中&#xff0c;类型信息通常是在编译时就已经确定的。尽管如此&#xff0c;C 标准库还是提供了…

陈丽:人工智能赋能教育创新发展

5月20日&#xff0c;在顾明远先生莅临科大讯飞考察指导高端咨询会暨“人工智能与未来教育”的主题研讨会上&#xff0c;北京师范大学原副校长、中国教育技术协会副会长陈丽教授作了题为《人工智能赋能教育创新发展》的主旨报告。 &#xff08;以下内容根据陈丽教授在研讨会上的…

期权课程之第三节【什么是ITM,ATM,OTM】

我们可以根据正股行权价和股价关系 对期权进行一个分类 ITM 全称为In-the-money&#xff1a;行权后可以获得收益的期权 根据call和put &#xff0c;又可以分为两类 ITM call &#xff1a; 行权价< 股价 &#xff0c;IMT Put &#xff1a;行权价>股价 比如这个时候&a…

React 中的响应时间详解

使用 React 可以在 JSX 中添加 事件处理函数。其中事件处理函数为自定义函数&#xff0c;它将在响应交互&#xff08;如点击、悬停、表单输入框获得焦点等&#xff09;时触发。 添加事件处理函数 如需添加一个事件处理函数&#xff0c;你需要先定义一个函数&#xff0c;然后…

如何使用性能监控工具分析JVM性能瓶颈

1、jConsole&#xff1a; jConsole是JDK自带的Java监控和管理控制台。它提供了一个图形用户界面&#xff08;GUI&#xff09;&#xff0c;用于监控和管理Java应用程序的性能和资源消耗。 使用方法&#xff1a;打开jdk\bin\jconsole.exe&#xff0c;连接到正在运行的Java进程&a…

第十一章:C# 判断

判断语句是控制程序执行流程的基础,用于根据条件执行不同的代码块。C#提供了多种判断语句,包括if语句、if-else语句、else-if语句和switch语句。掌握这些判断语句有助于编写具有逻辑判断能力的程序。 1. if 语句 if语句用于根据条件执行特定的代码块。如果条件为真(true)…

分享免费的手机清理软件app,一款国外开发的手机清理神器,让手机再战两年!

手机内存越来越大&#xff0c;软件却越来越占地方&#xff0c;就像微信这家伙&#xff0c;轻轻松松就吃了十几个G&#xff01; 害得阿星8128G的手机&#xff0c;本来想换新的&#xff0c;结果用了这款Avast Cleanup软件&#xff0c;瞬间感觉手机还能再战两年&#xff01; 注意…

云上聚智共创未来 | 移动云的项目实战,10分钟让你获得高度可玩的个人博客网站

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 随着互联网的发展各种以前看起来离我们比较遥远的词越来越近了&#xff0c;比如 云服务、大数据、区块链、容器这些听起来…

VMware ESXi 7.0U3q macOS Unlocker OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版)

VMware ESXi 7.0U3q macOS Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版) ESXi 7 U3 标准版集成 Intel 网卡、Realtek USB 网卡 和 NVMe 驱动 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-7-u3-sysin/&#xff0c;查看最新版。原创作品…

Android network — 进程指定网络发包

Android network — 进程指定网络发包 0. 前言1. 进程绑定网络1.1 App进程绑定网络1.2 Native进程绑定网络 2. 源码原理分析2.1 申请网络requestNetwork2.2 绑定网络 BindProcessToNetwork 3. 总结 0. 前言 在android 中&#xff0c;一个app使用网络&#xff0c;需要在manifest…

uniapp+vue3小程序版后台管理|uniapp小程序后台OA应用

基于uni-appvue3piniauni-ui等技术构建小程序版后台管理系统UniVue3Admin。实现了栅格化卡片布局引擎、多屏滑动管理、自定义桌面壁纸/小部件、内置常用表格/表单/编辑器及图表等功能。 uniappvite5pinia2跨端仿ios后台OA模板【小程序版】 uni-vue3-wechat基于vue3uniapp高仿微…

X-CSV-Reader:一个使用Rust实现CSV命令行读取器

&#x1f388;效果演示 ⚡️快速上手 依赖导入&#xff1a; cargo add csv读取实现&#xff1a; use std::error::Error; use std::fs::File; use std::path::Path;fn read_csv<P: AsRef<Path>>(filename: P) -> Result<(), Box<dyn Error>> {le…

【Java面试】二、Redis篇(中)

文章目录 1、Redis持久化1.1 RDB1.2 AOF1.3 RDB与AOF的对比 2、数据过期策略&#xff08;删除策略&#xff09;2.1 惰性删除2.2 定期删除 3、数据淘汰策略4、主从复制4.1 主从全量同步4.2 增量同步 5、哨兵模式5.1 服务状态监控5.2 哨兵选主规则5.3 哨兵模式下&#xff0c;Redi…

css初体验

简介 css用于定义网页样式,包括针对不同设备和屏幕尺寸的设计和布局。 语法:由选择器和声明组成。 选择器指向您需要设置样式的 HTML 元素。 声明块包含一条或多条用分号分隔的声明。 css使用方法 1.外部css, 使用最多,就是创建一个后缀为.css 的文件,在html文件中…

爬山算法介绍

目录 1.概述 2.产生 3.定义 4.优缺点 5.应用示例 6.未来展望 7.示例代码 1.概述 爬山算法是一种简单的启发式搜索算法&#xff0c;从起始点开始&#xff0c;每次选择当前位置邻域内的最优解作为下一个位置&#xff0c;直到达到目标点或无法继续前进。爬山算法的基本思想…

商标注册申请名称的概率,多想名称选通过率好的!

近日给深圳客户申请的商标初审下来了&#xff0c;两个类别都下的初审&#xff0c;和当初的判断基本一致&#xff0c;普推知产老杨当时沟通说需要做担保申请注册也可以&#xff0c;后面选择了管家注册&#xff0c;最近大量的帮客户检索商标名称&#xff0c;分享下经验。 两个字基…

【PB案例学习笔记】-09滚动条使用

写在前面 这是PB案例学习笔记系列文章的第8篇&#xff0c;该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上传到了gitee…

新书推荐:7.1 do while语句

本节必须掌握的知识点&#xff1a; 示例二十二 代码分析 汇编解析 ■do while语句其语法形式&#xff1a; do{ 语句块; }while(表达式) ■语法解析&#xff1a; ●执行do循环体内的语句块&#xff1b; ●判断while语句里的表达式&#xff0c;表达式为真继续下次循环&#…