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_velball_pos = [WIDTH // 2, HEIGHT // 2]vx = random.randrange(120, 240) / 60vy = -random.randrange(60, 180) / 60if direction == LEFT:vx = -vxball_vel = [vx, vy]# Function to handle events
def handle_events():global paddle1_vel, paddle2_velfor 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 -= 4elif event.key == pygame.K_s:paddle1_vel += 4elif event.key == pygame.K_UP:paddle2_vel -= 4elif event.key == pygame.K_DOWN:paddle2_vel += 4elif event.type == pygame.KEYUP:if event.key == pygame.K_w or event.key == pygame.K_s:paddle1_vel = 0elif 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_velball_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] / 10ball_vel[1] += ball_vel[1] / 10else:score2 += 1spawn_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] / 10ball_vel[1] += ball_vel[1] / 10else:score1 += 1spawn_ball(False)if not (0 <= paddle1_pos + paddle1_vel <= HEIGHT - PAD_HEIGHT):paddle1_vel = 0if not (0 <= paddle2_pos + paddle2_vel <= HEIGHT - PAD_HEIGHT):paddle2_vel = 0paddle1_pos += paddle1_velpaddle2_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 = 0paddle2_vel = 0spawn_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()

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

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

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

相关文章

策略模式的理解和运用

在之前的小游戏项目中&#xff0c;处理websocket长连接请求的时候&#xff0c;需要根据传递数据包的不同类型&#xff0c;进行不同的处理。为了实现这个场景&#xff0c;比较简单的方法就是使用if-else或者switch-case语句&#xff0c;根据条件进行判断。但是这导致了项目代码复…

AI驱动下,需要重新审视比亚迪在电子制造领域的“新神话”?

自4月22日创下新低后&#xff0c;比亚迪电子&#xff08;00285.HK&#xff09;之后趋势走强&#xff0c;截至6月5日收盘&#xff0c;比亚迪电子股价一度突破年内最高价位37.35港元/股&#xff0c;最终收盘36.75港元/股。 区间29个交易日涨超55&#xff05;&#xff0c;远远优于…

C++ 用数组模拟队列

在C中&#xff0c;使用数组模拟队列通常涉及到两个主要的操作&#xff1a;入队&#xff08;enqueue&#xff09;和出队&#xff08;dequeue&#xff09;。由于数组是一个固定大小的数据结构&#xff0c;当使用数组模拟队列时&#xff0c;需要手动管理队列的头部和尾部位置。以下…

OneDrive空间清理及文件历史版本查询

点击OneDrive图标 点击“在线查看” 点击“设置” 点击“OneDrive设置” 点击“其他设置” 点击“存储标准” 点击“文档” 选择需要操作的文件&#xff0c;点击“历史版本记录” 需要清理空间&#xff0c;可删除历史版本&#xff0c;需要使用历史版本&#xff0c;可还原历史版…

数据报表统计实现

目录 一&#xff1a;背景 二&#xff1a;实现过程 一&#xff1a;背景 最近需要开发一个数据统计的功能&#xff0c;主要是按照各种维度统计客户的数据&#xff0c;一般是按照日期来展示数量和变化情况。下面我们来梳理下实现的过程。 二&#xff1a;实现过程 1&#xff1a…

Postgresql中json和jsonb类型区别

在我们的业务开发中&#xff0c;可能会因为特殊【历史&#xff0c;偷懒&#xff0c;防止表连接】经常会有JSON或者JSONArray类的数据存储到某列中&#xff0c;这个时候再PG数据库中有两种数据格式可以直接一对多或者一对一的映射对象。所以我们也可能会经常用到这类格式数据&am…

港中文斯坦福提出SD加速模型PCM,一步即可生成图像和视频,可直接与SD1.5,SDXL,AnimateLCM结合!

又有新的SD加速模型可以用了&#xff0c;PCM解决了原来LCM模型的各种问题。并且对 AnimateLCM 也做了优化&#xff0c;用PCM直接生成动画也可以保证质量了。 PCM从这三个角度说明了LCM的设计空间是有限的并很好地解决了这些限制。 PCM主要改善了三个LCM原有的问题&#xff1a;…

前端面试题日常练-day56 【面试题】

题目 希望这些选择题能够帮助您进行前端面试的准备&#xff0c;答案在文末 1. PHP中的预定义变量$_SERVER用于存储什么类型的数据&#xff1f; a) 用户的输入数据 b) 浏览器发送的请求信息 c) 服务器的配置信息 d) PHP脚本中定义的变量 2. 在PHP中&#xff0c;以下哪个函数…

LeetCode 热题 100 第56.合并区间

思路&#xff1a; class Solution {public int[][] merge(int[][] intervals) {if(intervals.length < 1) return intervals;List<int[]> res new ArrayList<>();Arrays.sort(intervals, (o1,o2) -> o1[0] - o2[0]);for(int[] interval : intervals){if(res…

C# —— List数组

int[] a new int[] { 1, 2, 3 };//array静态数组 ArrayList aa new ArrayList();// d动态数组 List 集合和ArrayList基本一样,只不过List是C#2.0版本新加入的泛型类型。List也可以通过索引操作里面的元素,也有对List记性增删改查操作 List构建List var list new List<i…

UML交互图-序列图

概述 序列图又称为时序图、活动序列图&#xff0c;它是一种详细表示对象之间及对象与参与者实例之间交互的图,它由一组协作的对象(或参与者实例)及它们之间可发送的消息组成&#xff0c;它强调消息之间的时间顺序。 序列图主要用于按照交互发生的一系列顺序&#xff0c;显示对…

【Java】static 修饰变量

static 一种java内置关键字&#xff0c;静态关键字&#xff0c;可以修饰成员变量、成员方法。 static 成员变量 1.static 成员变量2.类变量图解3.类变量的访问4.类变量的内存原理5.类变量的应用 1.static 成员变量 成员变量按照有无static修饰&#xff0c;可以分为 类变量…

体验SmartEDA:颠覆传统,设计流程更流畅,超越Multisim与Proteus!

在电子设计自动化&#xff08;EDA&#xff09;领域&#xff0c;传统软件如Multisim和Proteus一直是工程师们的得力助手。然而&#xff0c;随着科技的飞速发展和用户需求的不断升级&#xff0c;一个全新的EDA平台——SmartEDA正崭露头角&#xff0c;凭借其更为流畅的设计流程&am…

vue3 + vite px转rem

下载自动转换插件 $ npm install postcss postcss-pxtorem --save-dev 下载可伸缩布局方案 npm i -S amfe-flexible 在vite.config.js中添加代码 import postCssPxToRem from postcss-pxtorem;export default defineConfig({//...其他配置代码css: {postcss: {plugins: [postC…

使python技能飙升的5个实用F-String技巧

前言 python中存在着一些奇奇怪怪的语法&#xff0c;了解这些语法可以使我们在编写程序时事半功倍&#xff0c;不了解的则会使我们产生疑惑。今天&#xff0c;我们来了解一下python中关于f-string的5个实用的小技巧。 技巧一:数字分隔 num 1000000000 print(-*20)print(f{n…

性能测试中如何设计真实的负载呢?

引言&#xff1a; 性能测试是一项关键的软件开发活动&#xff0c;它可以帮助我们评估系统在不同负载下的响应能力&#xff0c;并找出系统的瓶颈。然而&#xff0c;要确保我们的性能测试结果真实可靠&#xff0c;我们需要设计一个真实的负载。本文将从零开始&#xff0c;详细介…

基于System-Verilog实现DE2-115开发板驱动HC_SR04超声波测距

目录 前言 一、SystemVerilog——下一代硬件设计语言 与Verilog关系 与SystemC关系 二、实验原理 2.1 传感器概述&#xff1a; 2.2 传感器引脚 2.3 传感器工作原理 2.4 整体测距原理及编写思路 三、System-Verilog文件 3.1 时钟分频 3.2 超声波测距 3.3 数码管驱动…

spring boot 之 整合 knife4j 在线接口文档

pom依赖 <!--knife4j--> <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version> </dependency>application.yml knife4j:# 开启增强功能…

zs6d配置-1

// 由于本人对zero-shot比较敏感&#xff0c;于是看见了这个字眼后就去找了篇文章打算试试这东西能不能行 https://github.com/PhilippAuss/ZS6DC14 error: Microsoft Visual C 14.0 or greater is required. Get it with “Microsoft C Build Tools“就按他说的&#xff0c;…

共享购模式:数据驱动的消费增值新体验

共享购模式是一种创新的消费增值系统&#xff0c;它通过整合商家资源&#xff0c;实现商家让利和消费者增值的双重目标。以下是该模式的详细收益分析&#xff1a; 商家让利机制&#xff1a;商家入驻平台需持有价值500元的共享积分作为保证金&#xff0c;确保交易的诚信与质量。…