06-pygame弹球游戏(下)
AI悦创
共 4470字,需浏览 9分钟
· 2021-08-11
“阅读本文大概需要6分钟”
前面我们讲了一个小实战,接下来呢,我们来继续把这个弹球小实战写完。上一篇链接:05-pygame弹球游戏(上) 接下来,我们来完成接杆的代码。
可以加我微信,加入交流群哦。有时间的情况下,我都会在群里答疑。
接杆
创建接杆,同样是将接杆作为一个类来进行创建,规定它的大小颜色以及矩形选框,并且获取矩形的左侧与顶部位置。
class Mybraclass(pygame.sprite.Sprite):
def __init__(self, location):
pygame.sprite.Sprite.__init__(self)
# 控制接杆的大小
image_surface = pygame.Surface([100, 20])
# 接杆颜色
image_surface.fill([213, 213, 213])
self.image = image_surface.convert()
self.rect = self.image.get_rect()
self.rect.left, self.rect.top = location
实例化接杆对象,并显示到屏幕。
# 循环外面
mybar = Mybraclass([270, 600])
# 循环里面
screen.blit(mybar.image, mybar.rect)
让接杆移动起来,要跟随鼠标移动,这里用到了鼠标事件中的 MOUSEMOTION ,然后进行碰撞检测。在写碰撞检测之前,有时候需要将进行碰撞检测放到一个组里面,当某个元素与组内元素发生碰撞时,则进行速度取反。
# 将我的球类放入组中
ballgroup = pygame.sprite.Group(myball)
# 写在循环中
# 当鼠标滑过时将新建一个鼠标划过的事件并赋值给接杆的中心点
if event.type == pygame.MOUSEMOTION:
mybar.rect.centerx = event.pos[0]
# 小球与接杆的碰撞检测
if pygame.sprite.spritecollide(mybar, ballgroup, False):
myball.speed[1] = -myball.speed[1]
帧率、积分变量和分数显示。
帧率、积分变量和分数
clock = pygame.time.Clock()
ball_speed = [4, -4]
score = 0
# 小球与接杆的碰撞检测
if pygame.sprite.spritecollide(mybar, ballgroup, False):
myball.speed[1] = -myball.speed[1]
time = time + 1
score = score + 10
clock.tick(time)
screen.fill([255, 255, 255])
font = pygame.font.SysFont('', 20)
text_surface = font.render(u"score:" + str(score), True, (0, 0, 255))
screen.blit(text_surface, (32, 24))
上面的代码,多有碎片化,接下来我就把完整的代码放出来:
import sys
import pygame
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.image = pygame.transform.smoothscale(self.image, (80, 70))
self.rect = self.image.get_rect()
self.rect.left, self.rect.top = location
self.speed = speed
# 球的移动
def ball_move(self):
self.rect = self.rect.move(self.speed)
# 控制小球在游戏界面内
if self.rect.left < 0 or self.rect.right > screen.get_width():
self.speed[0] = -self.speed[0]
if self.rect.top <= 0:
self.speed[1] = -self.speed[1]
# 游戏结束
def over(self):
self.rect = self.rect.move(self.speed)
# 当小球底部大于界面高度时判定游戏结束
if self.rect.bottom > screen.get_height():
# SysFount 从系统字体中创建一个font对象(字体样式, 大小)
font = pygame.font.SysFont('宋体', 40)
# render 在新的surface上绘制文本(文本, 抗锯齿, 颜色, 背景)
text_surface = font.render(u"Game Over", True, (0, 0, 255))
screen.blit(text_surface, (screen.get_width() // 2, screen.get_height() // 2))
return 0
class Mybraclass(pygame.sprite.Sprite):
def __init__(self, location):
pygame.sprite.Sprite.__init__(self)
# 控制接杆的大小
image_surface = pygame.Surface([100, 20])
# 接杆颜色
image_surface.fill([213, 213, 213])
self.image = image_surface.convert()
self.rect = self.image.get_rect()
self.rect.left, self.rect.top = location
# 初始化pygame
pygame.init()
screen = pygame.display.set_mode([800, 700])
clock = pygame.time.Clock()
ball_speed = [4, -4]
score = 0
# 球类给定值
myball = Myballclass(r'football.png', ball_speed, [10, 20])
mybar = Mybraclass([270, 600])
# 将我的球类放入组中
ballgroup = pygame.sprite.Group(myball)
# # 刷新时间
time = 30
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
# 当鼠标滑过时将新建一个鼠标划过的事件并赋值给接杆的中心点
if event.type == pygame.MOUSEMOTION:
mybar.rect.centerx = event.pos[0]
# 小球与接杆的碰撞检测
if pygame.sprite.spritecollide(mybar, ballgroup, False):
myball.speed[1] = -myball.speed[1]
time = time + 1
score = score + 10
clock.tick(time)
screen.fill([255, 255, 255])
font = pygame.font.SysFont('', 20)
text_surface = font.render(u"score:" + str(score), True, (0, 0, 255))
screen.blit(text_surface, (32, 24))
myball.ball_move()
myball.over()
screen.blit(myball.image, myball.rect)
screen.blit(mybar.image, mybar.rect)
pygame.display.flip()
AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。QQ、微信在线,随时响应!V:Jiabcdefh
评论
热搜第一,腾讯又一游戏停运了!
腾讯又有一款游戏要停运了。最近,腾讯游戏宣布:由于游戏的代理协议即将到期,《食物语》将于2024年6月18日11:00停止在中国大陆地区的运营。并且这次的停运话题一度冲上热搜榜第一位,引发网友热议。据了解,《食物语》是一款中华美食拟人的国风女性向RPG养成手游,于2019年9月份公开测试,运营至今已
逆锋起笔
0
文末送书 | 大模型时代下如何学习云原生
《containerd 原理剖析与实战》新书内购中,点击阅读原文,限时 69.9 元购买。文末免费赠书大模型与云原生近年来,大语言模型的热度可谓是愈发高涨,尤其是今年年初 Sora 的出现,更是让全球再次看到了AIGC 的巨大威力。Sora 生成实例视频---几头巨大的长毛猛犸踏着积雪的草地而来在当
云原生实验室
10
2025年有望破万亿,AIoT助力下,物流行业正在迎来快速发展
作者:王飞鹏物联网智库 原创3月底,正在赶赴港股上市的菜鸟网络被阿里总部召回,上市进程按下了暂停键。在阿里去年定下“大拆分”战略后,菜鸟本是最有希望率先独立IPO的企业,但是在临门一脚之际,阿里却做出了不上市的决策。这一举动引发了外界热议。分析人士普遍认为,阿里之所以做出这一决策,很重要的一个原因是
物联网智库
0
使用 Python 和 OpenCV 制作反应游戏
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达在本文中,将向你展示如何使用 OpenCV 在 Python 中制作一个反应游戏,你可以动手来玩。你可能已经熟悉 OpenCV,OpenCV 基本上允许进行各种图像处理。你可以在下面的视频中看到最终结果,并且可以在此处获取文件:h
小白学视觉
10
大模型并行训练指南:通俗理解Megatron-DeepSpeed之模型并行与数据并行(下)
文末《大模型项目开发线上营》秒杀倒计时↓↓↓接前文:(上)篇>>>大模型并行训练指南:通俗理解Megatron-DeepSpeed之模型并行与数据并行(上)(中)篇>>>大模型并行训练指南:通俗理解Megatron-DeepSpeed之模型并行与数据并行(中)06
七月在线实验室
10
iOS 模拟器终于上架,手慢无,附300+游戏
AltStore开发者放大招!首款Delta游戏模拟器正式问世,就在今天凌晨,AltStore自签工具开发者,推出了Delta游戏模拟器,更是为我们带来了一个充满怀旧与乐趣的游戏世界! Delta 游戏模拟器支持的游戏主机如下方图片,我都进行了翻译方便大家查看,只需下载相应的游戏
宅哥技术
0
上个月有同事给我介绍了个私活,说她最近太忙做不过来,报酬总共是1万全都给我。前两天给甲方交活,没忍住私下问了下,甲方说报酬是3万
点击上方牲产力关注我后台收到一位网友留言柯基,跟你说个烦心事:上个月有同事给我介绍了个私活,说她最近太忙做不过来,报酬总共是1万块全给我。前两天我给甲方交活,没忍住就私下问了报酬,甲方告诉我报酬是3万。气死了!合着她啥也不干一倒手赚2万,我辛辛苦苦把活全弄完才拿她一半!做朋友怎么这样?还别说,我也遇
TTTEED
5
这都能卖了?曝光几款模拟经营游戏源码!可试玩体验
Cocos Store 经过不断积累与发展,已经成为开发者获取游戏开发资源,实现技术变现效率最高的平台。近年来,越来越多的独立开发者或企业纷纷入驻,而像模拟经营这类复杂系统的游戏,也纷纷出现在了 Cocos Store 资源商城中。今天就给大家介绍几款 2D\3D 模拟经营游戏源码,所有游戏可体验试
Creator星球游戏开发社区
10