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;远远优于…

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;…

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…

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…

使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 数码管驱动…

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

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

LabVIEW液压伺服压力机控制系统与控制频率选择

液压伺服压力机的控制频率是一个重要的参数&#xff0c;它直接影响系统的响应速度、稳定性和控制精度。具体选择的控制频率取决于多种因素&#xff0c;包括系统的动态特性、控制目标、硬件性能以及应用场景。以下是一些常见的指导原则和考量因素&#xff1a; 常见的控制频率范…

【介绍下Spark MLlib机器学习】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Java实现经纬度坐标转换

一、坐标系统简介 坐标系统&#xff0c;是描述物质存在的空间位置&#xff08;坐标&#xff09;的参照系&#xff0c;通过定义特定基准及其参数形式来实现。 坐标是描述位置的一组数值&#xff0c;按坐标的维度一般分为一维坐标&#xff08;公路里程碑&#xff09;和二维坐标…

SpringFramework总结

一.SpringFramework介绍 (一)Spring 广义上的 Spring 泛指以 Spring Framework 为基础的 Spring 技术栈。 Spring 已经不再是一个单纯的应用框架&#xff0c;而是逐渐发展成为一个由多个不同子项目&#xff08;模块&#xff09;组成的成熟技术&#xff0c;例如 Spring Frame…

【机器学习系列】“购物篮分析入门:使用Apyori库进行关联规则挖掘”

目录 一、关联分析介绍 关键概念&#xff1a; 1. 支持度&#xff08;Support&#xff09; 2. 置信度&#xff08;Confidence&#xff09; 3. 提升度&#xff08;Lift&#xff09; 4. 频繁项集 5. 关联规则 应用场景&#xff1a; 实现方法 二、导入数据集 额外介绍一…

实用商务口语:“企业文化”用英语怎么说?柯桥学英语去银泰

企业文化是指企业员工共有的一套观念、信念、价值和价值行为准则&#xff0c;以及由此导致的行为模式。 英文可以说&#xff1a;enterprise / company / corporate culture。 情景对话练习01 A:Your company made a lot of achievements last year; how do you make it? 你们…