当前位置: 首页 > news >正文

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()

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

相关文章:

  • 鸿蒙轻内核M核源码分析系列九 互斥锁Mutex
  • 如何查询公网IP?
  • 初级软件测试快速入门
  • 倩女幽魂游戏攻略:24小时辅助云手机选哪家好?
  • SpringBootWeb 篇-深入了解 AOP 面向切面编程与 AOP 记录操作日志案例
  • 2024年10大AI动画工具
  • 【乐吾乐2D可视化组态编辑器】实时数据,数据绑定
  • 自考搜题网?5个大学生必备的搜题 #其他#其他#媒体
  • 数据分析中的统计学基础及Python具体实现【数据分析】
  • 全栈工程师之路 — 从零到精通Spring Boot -1
  • 手机和WINDOWS电脑蓝牙连接后怎样放歌,无法选择媒体音频 蓝牙媒体音频勾选不上
  • linux系统使用达梦数据库
  • 小牛翻译API详解:功能、优势介绍及案例实战(附完整代码)
  • python怎么下载numpy
  • BGP基础实验
  • 2017 前端面试准备 - 收藏集 - 掘金
  • css系列之关于字体的事
  • EventListener原理
  • Java IO学习笔记一
  • Javascripit类型转换比较那点事儿,双等号(==)
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • 反思总结然后整装待发
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 你不可错过的前端面试题(一)
  • 漂亮刷新控件-iOS
  • 扑朔迷离的属性和特性【彻底弄清】
  • 七牛云假注销小指南
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 字符串匹配基础上
  • Mac 上flink的安装与启动
  • ​渐进式Web应用PWA的未来
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • ​虚拟化系列介绍(十)
  • ​业务双活的数据切换思路设计(下)
  • #考研#计算机文化知识1(局域网及网络互联)
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (ZT)薛涌:谈贫说富
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (四)Controller接口控制器详解(三)
  • (四)React组件、useState、组件样式
  • (转)http-server应用
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET 设计一套高性能的弱事件机制
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .net6 webapi log4net完整配置使用流程
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .pop ----remove 删除
  • @RequestBody与@ResponseBody的使用
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [4]CUDA中的向量计算与并行通信模式
  • [BT]BUUCTF刷题第4天(3.22)