基于 python 3.9.12:

import pygame, sys
from pygame.locals import *## 定义球类
class MyBallClass(pygame.sprite.Sprite):def __init__(self, image_file, speed, location):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(image_file)self.rect = self.image.get_rect()self.rect.left, self.rect.top = locationself.speed = speeddef move(self):global points, score_textself.rect = self.rect.move(self.speed)if (self.rect.left < 0 or self.rect.right > screen.get_width()):self.speed[0] = -self.speed[0]hit_wall.play()if (self.rect.top <= 0):self.speed[1] = -self.speed[1]points = points + 1score_text = font.render(str(points), 1, (0, 0, 0))get_point.play()## 定义挡板类
class MyPaddleClass(pygame.sprite.Sprite):def __init__(self, location):pygame.sprite.Sprite.__init__(self)image_surface = pygame.surface.Surface([100, 20])image_surface.fill([0, 0, 0])self.image = image_surface.convert()self.rect = self.image.get_rect()self.rect.left, self.rect.top = locationpygame.init()
pygame.mixer.init()screen = pygame.display.set_mode([640, 640])
clock = pygame.time.Clock()
ball_speed = [10, 5]# 滚动的球的显示效果
myBall = MyBallClass('../pygame/wackyball.bmp', ball_speed, [50, 50])
ballGroup = pygame.sprite.Group(myBall)
paddle = MyPaddleClass([270, 400])
## 分数
points = 0
## 剩余生命值
lives = 2##done = False
pygame.time.delay(1000)## 加载背景音乐
pygame.mixer.music.load('bg_music.mp3')
# 设置音量
pygame.mixer.music.set_volume(0.30)
## 负数表示连续播放
pygame.mixer.music.play(-1)## 挡板击打球的音效
hit = pygame.mixer.Sound('hit_paddle.wav')
hit.set_volume(0.4)## 球碰到两边的墙的音效
hit_wall = pygame.mixer.Sound('hit_wall.wav')
hit_wall.set_volume(0.4)## 玩家得分时的音效
get_point = pygame.mixer.Sound('get_point.wav')
get_point.set_volume(0.2)## 重新开始音效
new_life = pygame.mixer.Sound('new_life.wav')
new_life.set_volume(0.5)## 漏球音效
splat = pygame.mixer.Sound('splat.wav')
splat.set_volume(0.5)## 游戏终结音效
bye = pygame.mixer.Sound('game_over.wav')
bye.set_volume(0.6)def gameOver():## 游戏结束## pause() 中断背景音乐## pygame.mixer.music.pause()## fadeout() 背景音乐淡出效果pygame.mixer.music.fadeout(2000)pygame.time.delay(2000)## 显示最终得分tips_text = 'Game Over'score_text = 'Your final score is: ' + str(points)# 使用 pygame.font.Font()从一个字体文件中创建一个 Font 对象# None 表示加载 pygame 的默认字体, 这里 70 表示字号# 调用 render() 方法在一个新 Surface 对象上绘制文本# render('文本内容’, 是否抗锯齿, 字体颜色, backgroundcolor = None)tips_surface = pygame.font.Font(None, 70).render(tips_text, 1, (255, 0, 0))score_surface = pygame.font.Font(None, 50).render(score_text, 1, (0, 255, 255))screen.blit(tips_surface, [screen.get_width() / 2 - tips_surface.get_width() / 2, 100])screen.blit(score_surface, [screen.get_width() / 2 - score_surface.get_width() / 2, 200])pygame.display.flip()# 播放终止提示音,# play(times) 实际播放次数为 times + 1bye.play(2)pygame.time.delay(2000)def quitGame():pygame.quit()sys.exit()while (1):clock.tick(30)screen.fill([255, 255, 255])# 显示分数font = pygame.font.Font(None, 50)score_text = font.render(str(points), 1, (0, 0, 0))screen.blit(score_text, [10, 10])# 显示生命值for i in range(lives):width = screen.get_rect().widthscreen.blit(myBall.image, [width - 40 * i, 20])# 滚动myBall.move()for event in pygame.event.get():if (event.type == pygame.QUIT):# 点击左上角退出游戏quitGame()elif (event.type == pygame.MOUSEMOTION):# 移动鼠标时更新挡板位置paddle.rect.centerx = event.pos[0]# 挡板是否接住球if (pygame.sprite.spritecollide(paddle, ballGroup, False)):myBall.speed[1] = -myBall.speed[1]hit.play()# 没及时接住,掉下去了if (myBall.rect.top >= screen.get_rect().bottom):lives -= 1pygame.time.delay(500)splat.play()myBall.rect.topleft = [50, 50]if (lives <= 0):# 生命用完了,游戏结束pygame.time.delay(1000)gameOver()##quitGame()breakelse:pygame.time.delay(1000)myBall.rect.topleft = [(screen.get_rect().width) - 40 * lives, 20]new_life.play()screen.blit(myBall.image, myBall.rect)screen.blit(paddle.image, paddle.rect)pygame.display.flip()

pygame 实现 pong 小游戏相关推荐

  1. 基于pygame的射击小游戏制作(一)让飞船动起来

    基于pygame的射击小游戏制作(一)让飞船动起来 一.文件结构 alien_invasion.py 是整个系统的主文件,用来创建游戏中的一系列对象,ai_settings存储设置.screen存储显 ...

  2. pygame演示----黑猩猩小游戏

    pygame演示----黑猩猩小游戏 导入模块 这是将所有需要的模块导入到程序中的代码.它还检查一些可选的pygame模块的可用性. import os, sys import pygame from ...

  3. Python小游戏——Pygame制作2048小游戏

    pygame之2048小游戏 初学python,发现看网上的python理论太过枯燥. 哎嘿~~干脆直接弄个小游戏叭,一边学习,一边写代码. 备注: 1.很多地方我尽量注解,方便大家观看. 2.完整代 ...

  4. 使用pygame开发一个小游戏

    学习了pygame,身为一个IKUN所以,做了一个简单的小游戏.游戏规则是,使用键盘的方向键控制坤坤,当坤坤触碰到篮球,就会爆发出音乐"只因你太美".代码如下: import ra ...

  5. 基于pygame做的小游戏

    最近一边学习pygame模块一边做了个小游戏,完成功能如下: 鼠标右键控制移动 人物跟随鼠标方向转动 鼠标左键控制攻击 动画效果 血量计数效果 画面比较乱入,请自行过滤.直接上代码: # coding ...

  6. 使用Pygame制作2048小游戏

    好久没有写文章了,暑假一直没有怎么学习计算机方面的相关知识,不过倒是坚持背了一个多月的单词红宝书,看了汤神的基础课.真的没想到自己居然也能有毅力背了150多页的单词,还写完了一本正反面的字帖这些事以前 ...

  7. 用 pygame 开发象棋小游戏

    源码及资源请前往github获取 如果觉得还不错的话,请赏个 star 呗. 最近因为工作原因,需要学习一下python,学习了基础语法,打算做一个游戏,算做python 学习的一个阶段点. 前段时间 ...

  8. pygame飞机大战小游戏(python大作业)

    一.项目背景 python大作业,在查看了老师给的链接发现教学视频不完整,所以借用了同学的<Python编程 从入门到实践>中的一个项目,学习模仿. 二.游戏具体介绍 这是一款由辉辉亲自打 ...

  9. Pygame实现飞机小游戏

    用Pygame实现的飞机大战小游戏,三条命,二十发初始子弹,非精灵版 import pygame import random import sys import time pygame.init()# ...

  10. 基于Pygame的Python小游戏,《这是一场滑稽与阴险的较量》

    选用贴吧最火的表情包滑稽和阴险表情包,肯定都认得出吧,背景由胡大佬提供,添加了很多细节,一款射击闯关类小游戏,滑稽会不断逼近阴险,在这之前你必须把阴险全部击落,左上角是你的生命,被滑稽撞到则减少一生命 ...

最新文章

  1. CentOS7上编译多版本PHP并同时运行及systemd设置
  2. 高斯混合模型理解汇总
  3. Linux Kernel TCP/IP Stack — L2 Layer
  4. PowerShell学习笔记(1)-基础
  5. Codeforces Round #713 (Div. 3)
  6. 04-iOS蓝牙传输数据演示
  7. 游戏通讯技术:帧同步技术
  8. 主存和cache每一块相等_笔记:cpu中的cache(一)
  9. Win7系统桌面右下角托盘图标不显示原因和解决方法
  10. outlook+app+android,微软Outlook Web App抢占Android平台
  11. javascript实现的一个信息提示的小功能/
  12. 训练作用_感觉统合是什么意思,感觉统合训练有什么作用
  13. [转载] pandas入门:Series、DataFrame、Index基本操作都有了!
  14. javascript页面刷新的几种方法
  15. java1.8垃圾回收机制_JAVA垃圾回收机制
  16. ed是什么梗_美国大学EA,ED什么意思?
  17. ubuntu16.04下安装为知笔记
  18. 微信小程序自定义函数返回值
  19. 只有那些不断充实自己的人,才有机会在往后的日子里持续地被雇用
  20. html转换成pdf工具-wkhtmltopdf、Python生成PDF(pdfkit库)

热门文章

  1. Linux+bridge做透明网桥
  2. windows无法完成系统配置。若要尝试恢复配置,请重新启动计算机。出现此情况怎么处理,Win7封装Windows无法完成系统配置解决方案...
  3. 2022年备考[嵌入式系统设计师]你准备好了吗?
  4. 每一代内存的读写速度大概是多少?
  5. 两个技巧教你怎么裁剪视频尺寸,手残党也能掌握
  6. 深入浅出空间曲线的切线方程和法平面方程
  7. 报考软件资格考试过程详解--附学习分享
  8. 免费的XMind思维脑图在线编辑的网站, 可打开 .pos 文件
  9. 狮子座与摩羯座 ---转载
  10. 关于SCI、EI、CCF、DASFAA