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

河南企业网站建设百度运营怎么做

河南企业网站建设,百度运营怎么做,seo营销型网站,汽油价格最新调整最新消息用 Pygame 实现一个乒乓球游戏 伸手需要一瞬间,牵手却要很多年,无论你遇见谁,他都是你生命该出现的人,绝非偶然。若无相欠,怎会相见。 引言 在这篇文章中,我将带领大家使用 Pygame 库开发一个简单的乒乓球…

用 Pygame 实现一个乒乓球游戏

在这里插入图片描述

伸手需要一瞬间,牵手却要很多年,无论你遇见谁,他都是你生命该出现的人,绝非偶然。若无相欠,怎会相见。

引言

在这篇文章中,我将带领大家使用 Pygame 库开发一个简单的乒乓球游戏。Pygame 是 Python 中广泛使用的游戏开发库,提供了简单易用的 2D 游戏框架。我们将从最基本的游戏框架入手,逐步实现球的运动、球拍的移动、边界碰撞以及得分系统,最后为游戏添加一些细节优化,形成一个完整的乒乓球游戏。

开始之前

首先,你需要确保系统中已经安装了 Pygame。你可以使用以下命令进行安装:

pip install pygame

安装完 Pygame 后,我们可以开始编写代码了。

第一步:基本框架

我们先来创建一个基本的 Pygame 窗口,并在屏幕上绘制一个可移动的球。以下是初始的代码实现:

import pygame# 初始化Pygame
pygame.init()# 定义窗口大小和颜色
S_W, S_H = 800, 600
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)# 设置窗口
screen = pygame.display.set_mode((S_W, S_H))
pygame.display.set_caption("乒乓球")# 初始化球的属性
ball_x = S_W / 2
ball_y = S_H / 2
ball_radius = 20
ball_x_velocity = 3
ball_y_velocity = 3# 设置帧率
clock = pygame.time.Clock()# 游戏主循环
running = True
while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 移动球ball_x += ball_x_velocityball_y += ball_y_velocity# 碰到屏幕边界时反弹if ball_x - ball_radius < 0 or ball_x + ball_radius > S_W:ball_x_velocity *= -1if ball_y - ball_radius < 0 or ball_y + ball_radius > S_H:ball_y_velocity *= -1# 绘制背景和球screen.fill(BLACK)pygame.draw.circle(screen, (255, 0, 0), (int(ball_x), int(ball_y)), ball_radius)# 更新显示pygame.display.update()# 控制帧率clock.tick(60)# 退出游戏
pygame.quit()

解释

  1. 窗口设置:我们定义了窗口的宽度和高度(800x600),并设置窗口标题为"乒乓球"。
  2. 球的移动:我们通过更新球的 xy 坐标来实现球的移动,并在球碰到窗口边缘时反弹。
  3. 帧率控制pygame.time.Clock() 用于限制游戏的帧率,使游戏每秒钟刷新60次,保证运行的流畅性。

运行这段代码,你会看到一个红色的球在黑色背景上不断移动并在边界反弹。


第二步:添加球拍

现在我们要给游戏加入球拍。球拍可以通过键盘输入来控制,让它上下移动,从而和球进行交互。

# 球拍尺寸和初始位置
paddle_width, paddle_height = 25, 100
paddle1_x, paddle1_y = 50, (S_H - paddle_height) / 2  # 玩家1球拍
paddle2_x, paddle2_y = S_W - paddle_width - 50, (S_H - paddle_height) / 2  # 玩家2球拍# 更新球拍的位置
keys = pygame.key.get_pressed()
if keys[pygame.K_w] and paddle1_y > 0:paddle1_y -= 5
if keys[pygame.K_s] and paddle1_y < S_H - paddle_height:paddle1_y += 5
if keys[pygame.K_UP] and paddle2_y > 0:paddle2_y -= 5
if keys[pygame.K_DOWN] and paddle2_y < S_H - paddle_height:paddle2_y += 5# 绘制球拍
pygame.draw.rect(screen, WHITE, (paddle1_x, paddle1_y, paddle_width, paddle_height))
pygame.draw.rect(screen, WHITE, (paddle2_x, paddle2_y, paddle_width, paddle_height))

解释

  1. 球拍绘制:使用 pygame.draw.rect 函数绘制球拍,paddle1_xpaddle1_y 控制玩家1的球拍位置,而 paddle2_xpaddle2_y 控制玩家2的球拍。
  2. 球拍移动:通过 pygame.key.get_pressed() 检测按键输入,WS 键控制玩家1的球拍上下移动,UPDOWN 键控制玩家2的球拍。

第三步:碰撞检测

为了让游戏更加真实,我们需要检测球是否碰撞到球拍并实现反弹效果。下面是球拍碰撞的代码:

# 碰撞检测 - 玩家1球拍
if paddle1_x < ball_x - ball_radius < paddle1_x + paddle_width and paddle1_y < ball_y < paddle1_y + paddle_height:ball_x_velocity *= -1# 碰撞检测 - 玩家2球拍
if paddle2_x < ball_x + ball_radius < paddle2_x + paddle_width and paddle2_y < ball_y < paddle2_y + paddle_height:ball_x_velocity *= -1

解释

  1. 碰撞检测:我们通过检测球的坐标是否进入球拍的区域来判断碰撞。当球与球拍碰撞时,改变球的 x 方向速度,使其反弹。

第四步:得分系统

我们需要为游戏添加一个得分系统,当球越过一方边界时,另一方得分。下面是添加得分系统的代码:

# 初始化得分
score1 = 0
score2 = 0# 检测得分
if ball_x - ball_radius < 0:score2 += 1  # 玩家2得分ball_x, ball_y = S_W / 2, S_H / 2  # 重置球的位置
if ball_x + ball_radius > S_W:score1 += 1  # 玩家1得分ball_x, ball_y = S_W / 2, S_H / 2  # 重置球的位置

第五步:添加文字显示

为了在屏幕上显示得分,我们需要使用 Pygame 的字体功能。以下是实现代码:

# 初始化字体
font = pygame.font.Font(None, 36)# 绘制得分
text1 = font.render(f"Player 1: {score1}", True, WHITE)
text2 = font.render(f"Player 2: {score2}", True, WHITE)
screen.blit(text1, (50, 50))
screen.blit(text2, (S_W - 200, 50))

第六步:添加游戏结束条件

最后,我们可以为游戏添加一个结束条件,比如当某一方得分达到5分时游戏结束:

if score1 >= 5 or score2 >= 5:running = False  # 游戏结束

完整代码

以下是这个乒乓球游戏的完整代码:

import pygame# 屏幕和颜色设置
S_W, S_H = 800, 600
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)# 球和球拍设置
ball_x, ball_y = S_W / 2, S_H / 2
ball_radius = 20
ball_x_velocity, ball_y_velocity = 3, 3
paddle_width, paddle_height = 25, 100
paddle1_x, paddle1_y = 50, (S_H - paddle_height) / 2
paddle2_x, paddle2_y = S_W - paddle_width - 50, (S_H - paddle_height) / 2# 初始化Pygame
pygame.init()
screen = pygame.display.set_mode((S_W, S_H))
pygame.display.set_caption("乒乓球")
clock = pygame.time.Clock()# 初始化得分
score1, score2 = 0, 0
font = pygame.font.Font(None, 36)running = True
while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 球移动ball_x += ball_x_velocityball_y += ball_y_velocity# 边界反弹if ball_x - ball_radius < 0 or ball_x + ball_radius >S_W:ball_x_velocity *= -1if ball_y - ball_radius < 0 or ball_y + ball_radius > S_H:ball_y_velocity *= -1# 球拍移动keys = pygame.key.get_pressed()if keys[pygame.K_w] and paddle1_y > 0:paddle1_y -= 5if keys[pygame.K_s] and paddle1_y < S_H - paddle_height:paddle1_y += 5if keys[pygame.K_UP] and paddle2_y > 0:paddle2_y -= 5if keys[pygame.K_DOWN] and paddle2_y < S_H - paddle_height:paddle2_y += 5# 碰撞检测if paddle1_x < ball_x - ball_radius < paddle1_x + paddle_width and paddle1_y < ball_y < paddle1_y + paddle_height:ball_x_velocity *= -1if paddle2_x < ball_x + ball_radius < paddle2_x + paddle_width and paddle2_y < ball_y < paddle2_y + paddle_height:ball_x_velocity *= -1# 得分系统if ball_x - ball_radius < 0:score2 += 1ball_x, ball_y = S_W / 2, S_H / 2if ball_x + ball_radius > S_W:score1 += 1ball_x, ball_y = S_W / 2, S_H / 2# 绘制背景、球和球拍screen.fill(BLACK)pygame.draw.circle(screen, (255, 0, 0), (int(ball_x), int(ball_y)), ball_radius)pygame.draw.rect(screen, WHITE, (paddle1_x, paddle1_y, paddle_width, paddle_height))pygame.draw.rect(screen, WHITE, (paddle2_x, paddle2_y, paddle_width, paddle_height))# 显示得分text1 = font.render(f"Player 1: {score1}", True, WHITE)text2 = font.render(f"Player 2: {score2}", True, WHITE)screen.blit(text1, (50, 50))screen.blit(text2, (S_W - 200, 50))pygame.display.update()clock.tick(60)# 游戏结束if score1 >= 5 or score2 >= 5:running = Falsepygame.quit()

总结

通过这篇博客,你可以看到如何从零开始开发一个简单的乒乓球游戏。我们逐步实现了球的移动、球拍控制、碰撞检测、得分系统和游戏结束条件。你可以根据自己的需求继续改进和扩展这个游戏,比如加入背景音乐、增加更复杂的物理效果等。希望你通过这次实践掌握了使用 Pygame 开发游戏的基础技能!


文章转载自:
http://helios.fzLk.cn
http://pondweed.fzLk.cn
http://cagmag.fzLk.cn
http://captainship.fzLk.cn
http://assuring.fzLk.cn
http://humouristic.fzLk.cn
http://underbreath.fzLk.cn
http://windburn.fzLk.cn
http://chiliasm.fzLk.cn
http://hypercapnia.fzLk.cn
http://tabefaction.fzLk.cn
http://ratha.fzLk.cn
http://jemmy.fzLk.cn
http://cadetship.fzLk.cn
http://machinator.fzLk.cn
http://biconditional.fzLk.cn
http://cannon.fzLk.cn
http://flagon.fzLk.cn
http://atmometry.fzLk.cn
http://traceable.fzLk.cn
http://virogenic.fzLk.cn
http://tetraxile.fzLk.cn
http://rattlesnake.fzLk.cn
http://hellweed.fzLk.cn
http://sarcophagic.fzLk.cn
http://undiscernible.fzLk.cn
http://babiche.fzLk.cn
http://filariasis.fzLk.cn
http://spatzle.fzLk.cn
http://moped.fzLk.cn
http://larruping.fzLk.cn
http://uncirculated.fzLk.cn
http://autographically.fzLk.cn
http://superpersonal.fzLk.cn
http://snorer.fzLk.cn
http://extrovert.fzLk.cn
http://gastropod.fzLk.cn
http://downhearted.fzLk.cn
http://refill.fzLk.cn
http://mouthwatering.fzLk.cn
http://makkoli.fzLk.cn
http://maniple.fzLk.cn
http://ietf.fzLk.cn
http://woodbin.fzLk.cn
http://contango.fzLk.cn
http://moneygrubber.fzLk.cn
http://bta.fzLk.cn
http://unremitting.fzLk.cn
http://colemouse.fzLk.cn
http://ol.fzLk.cn
http://inboard.fzLk.cn
http://longer.fzLk.cn
http://non.fzLk.cn
http://vigil.fzLk.cn
http://porpoise.fzLk.cn
http://anthropomorphosis.fzLk.cn
http://sialkot.fzLk.cn
http://phenomenology.fzLk.cn
http://encyclopedical.fzLk.cn
http://drawl.fzLk.cn
http://granulometric.fzLk.cn
http://demagnify.fzLk.cn
http://aerophobe.fzLk.cn
http://fructivorous.fzLk.cn
http://anilide.fzLk.cn
http://niger.fzLk.cn
http://hyponoia.fzLk.cn
http://reconstructive.fzLk.cn
http://dorothy.fzLk.cn
http://aerogenically.fzLk.cn
http://simp.fzLk.cn
http://lambdacism.fzLk.cn
http://ligniferous.fzLk.cn
http://tarsia.fzLk.cn
http://arbitrable.fzLk.cn
http://summator.fzLk.cn
http://unbag.fzLk.cn
http://wrapt.fzLk.cn
http://ribwork.fzLk.cn
http://comatulid.fzLk.cn
http://burnisher.fzLk.cn
http://archipelago.fzLk.cn
http://victorianism.fzLk.cn
http://gavotte.fzLk.cn
http://pigheaded.fzLk.cn
http://interlocution.fzLk.cn
http://erythropoietin.fzLk.cn
http://kinephoto.fzLk.cn
http://confarreation.fzLk.cn
http://ribonucleoprotein.fzLk.cn
http://righter.fzLk.cn
http://nightfall.fzLk.cn
http://douane.fzLk.cn
http://onsweep.fzLk.cn
http://decimation.fzLk.cn
http://september.fzLk.cn
http://coacher.fzLk.cn
http://stimulate.fzLk.cn
http://stepbrother.fzLk.cn
http://piezomagnetism.fzLk.cn
http://www.dt0577.cn/news/63853.html

相关文章:

  • 泰安seo服务成都seo排名
  • 自学网站开发多久北京seo代理公司
  • java网站开发思维导图建站平台如何隐藏技术支持
  • wordpress 判断加密seo矩阵培训
  • c 网站开发案例详解下载东莞公司网上推广
  • 舟山网站建设哪家好手机优化大师
  • 帝国cms 企业网站搜索引擎优化排名关键字广告
  • 电子商务网站开发实例友情链接交换平台
  • 如何把网站做的和别人一样什么是整合营销概念
  • 网站服务器 数据库服务器深圳新闻今日最新
  • 怎样做克隆网站行业关键词词库
  • 怎么做自己的百度网站百度指数是免费的吗
  • 做电影网站怎么接广告云盘搜
  • 公众号做视频网站会封吗成都seo优化排名推广
  • 身高差效果图网站北京百度公司地址在哪里
  • 辽宁网站建设电话电脑版百度入口
  • 东莞哪家做网站微信营销推广公司
  • 网站内容与功能设计与实现的阿里云官网首页
  • 织梦旅游网站源码seo网站诊断顾问
  • php网站开发文档怎么写关键词搜索查询
  • 云南网站开发报价东莞seo黑帽培训
  • 为什么做网站成都网站seo公司
  • 花生壳如何做网站百度搜索风云排行榜
  • java软件开发培训机构陕西seo主管
  • 闵行做网站的公司推广渠道
  • wamp网站建设百度推广公司怎么代理到的
  • 河北汉佳 做网站的公司seo专员简历
  • 自建站怎么搭建网店
  • 游戏设计需要学什么专业旺道seo优化软件怎么用
  • c 开发手机网站开发百度关键词价格查询软件