python项目之弹球小游戏 3
好的,我们继续来制作我们的弹球游戏!昨天我们已经完成了最基本的窗口和最基本的小球,那今天我们就来加入负责与玩家交互的球拍!
首先,我们先来构思一下球拍的基本功能及作用。球拍,顾名思义,就是负责反弹小球的平台,它也负责与玩家的交互功能。如何交互呢?下面有这几种方法:
1,方向键控制。
2,鼠标坐标控制。
以上方法各有利弊,但是我认为使用鼠标控制比较人性。所以我们首先面对初学者比较轻松的鼠标控制。
pygame中的获取坐标比较简单,我们只需要参考第1篇中的“退出键检测”即可。但是在此之前,我们需要绘制出一个球拍。
我们新建一个文件,输入这些代码便可以生成一个长方形:
import pygamepygame.init()
screen=pygame.display.set_mode([640,480])
screen.fill([0,0,0])
pygame.draw.rect(screen,[255,255,255],[250,150,300,200],0)
pygame.display.update()
running=True
while running:for event in pygame.event.get():if event.type==pygame.QUIT:running=Falsepygame.quit()
很眼熟,对吧?
没错,它就是在基本结构上加入了一个填充的矩形。我们可以通过更改第6行的坐标来让矩形出现在我们希望它出现的位置。
那这些坐标怎么看呢?其实很简单。它的格式是这样的:
pygame.draw.rect(窗口名, 颜色, (矩形的左上x坐标, 矩形的左上y坐标, 矩形沿左上x坐标的长度也就是矩形的长, 矩形沿左上x坐标的宽度也就是矩形的宽))
这样一来,我们只需要输入正确的四个角的坐标,便可以让矩形出现在相应的地方,代码如下:
import pygamepygame.init()
screen=pygame.display.set_mode([800,600])
screen.fill([0,0,0])
pygame.draw.rect(screen,[255,255,255],[300,550,200,25],0)
pygame.display.update()
running=True
while running:for event in pygame.event.get():if event.type==pygame.QUIT:running=Falsepygame.quit()
运行后,我们就可以发现一个静止的球拍啦!
但是这个球拍是静止不动的,无法与玩家进行交互,所以我们必须在循环内反复更新它的位置。
由于pygame不需要定义其他三个角的坐标,所以我们只需要让它不断更新左上角的坐标即可。代码如下:
鼠标操作:
首先我们需要获取到鼠标的x坐标,并将其映射在其中。代码如下:
screen.fill(BLACK)
screen.blit(pic, (picx, picy))
paddlex = pygame.mouse.get_pos()[0]
paddlex -= paddlew / 2
pygame.draw.rect(screen, WHITE, (paddlex, paddley, paddlew, paddleh))
当它嵌套在循环中则是:
import pygamepygame.init()
screen=pygame.display.set_mode([800,600])
pygame.display.set_caption("python弹球游戏")
keepGoing=True
pic=pygame.image.load("ball.png")
colorkey=pic.get_at((0,0))
pic.set_colorkey(colorkey)
picx = 0
picy = 0
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
timer = pygame.time.Clock()
speedx = 5
speedy = 5
paddlew = 200
paddleh = 25
paddlex = 300
paddley = 550
picw = 100
pich = 40
font=pygame.font.SysFont("None",24)
while keepGoing:for event in pygame.event.get():if event.type==pygame.QUIT:keepGoing=Falsepicx+=speedxpicy+=speedyif picx<=0 or picx+pic.get_width()>=800:speedx= -speedxif picy<=0:speedy= -speedyif picy>=550:speedy= -speedyscreen.fill(BLACK)screen.blit(pic, (picx, picy))paddlex = pygame.mouse.get_pos()[0]paddlex -= paddlew / 2pygame.draw.rect(screen, WHITE, (paddlex, paddley, paddlew, paddleh))pygame.display.update()timer.tick(60)
font_addr = pygame.font.get_default_font()
font = pygame.font.Font(font_addr, 36)
pygame.quit()
我们还可以继续提高代码利用率,代码如下:
import pygamepygame.init()
width=800
height=600
screen=pygame.display.set_mode([width,height])
pygame.display.set_caption("python弹球游戏")
keepGoing=True
pic=pygame.image.load("ball.png")
colorkey=pic.get_at((0,0))
pic.set_colorkey(colorkey)
picx = 0
picy = 0
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
timer = pygame.time.Clock()
speedx = 5
speedy = 5
paddlew = 200
paddleh = 25
paddlex = 300
paddley = 550
picw = 100
pich = 40
xend=width-50
yend=height-50#这两行的减50为判定提供时间
ticks=60#帧率
font=pygame.font.SysFont("None",24)
while keepGoing:for event in pygame.event.get():if event.type==pygame.QUIT:keepGoing=Falsepicx+=speedxpicy+=speedyif picx<=0 or picx+pic.get_width()>=xend:speedx= -speedxif picy<=0:speedy= -speedyif picy>=yend:speedy= -speedyscreen.fill(BLACK)screen.blit(pic, (picx, picy))paddlex = pygame.mouse.get_pos()[0]paddlex -= paddlew / 2pygame.draw.rect(screen, WHITE, (paddlex, paddley, paddlew, paddleh))pygame.display.update()timer.tick(ticks)
pygame.quit()
是不是简洁许多?但是我们发现了一个问题,那就是虽然我们已经制作出了球拍,但是却无法拍球。这是因为我们还没有加入球拍与球接触的判定。我们可以通过检测是否与球拍在同一平面与是否超出球拍的左上x坐标来省去复杂的触碰判定。代码如下:
if picy + pich >= paddley and picy + pich <= paddley + paddleh and speedy > 0:if picx + picw / 2 >= paddlex and picx + picw / 2 <= paddlex + paddlew:speedy = -speedy
这段代码可以以最直接的方法来判定是否超过以上两点坐标。同时可以在接触瞬间立马反弹,这样不仅游戏对玩家的反馈感极强,对新手也特别友好。
好了,弹球游戏完结。我们下次再见,拜拜!
彩蛋
嘻嘻,你们不会觉得我就会这么糊弄过去吧?我将会在下期彩蛋篇中一一解决我们的游戏bug!让我们一起期待吧!
python项目之弹球小游戏 3相关推荐
- python小游戏编程实例-Python实现的弹球小游戏示例
本文实例讲述了Python实现的弹球小游戏.分享给大家供大家参考,具体如下: 弹球 1. Ball 类 draw负责移动Ball 碰撞检测,反弹,Ball检测Paddle 2.Paddle类 draw ...
- 【Python项目】乒乓球小游戏
文章目录 零.序章 一.游戏主程序 二.球类 三.球拍类 四.计分板类 五.效果展示 零.序章 这是一个使用Python写的打乒乓游戏. 可以练习一些面向对象的知识. 实现的功能有: 球的发球.碰撞检 ...
- 60行python代码实现弹球小游戏(含源码)
弹球效果预览 解析代码 弹球 Ball 类 draw负责移动Ball 碰撞检测,反弹,Ball检测Paddle 2.Paddle类 draw负责移动Paddle 碰撞检测,确定能不能继续 监听键盘事件 ...
- python弹球小游戏程序设计_Python写的弹球小游戏
原标题:Python写的弹球小游戏 Python 的功能强大应用广泛,从爬虫到 Web 开发,从科学计算到人工智能,都能见到它的身影.当然,Python 还可以编写游戏代码,虽然不是主流,但却十分有趣 ...
- python弹球小游戏程序_Python实现弹球小游戏
本文主要给大家分享一个实战项目,通过python代码写一款我们儿时大多数人玩过的游戏---小弹球游戏.只不过当时,我们是在游戏机上玩,现在我们通过运行代码来玩,看看大家是否有不一样的体验,是否可以重温 ...
- python弹球小游戏程序_Python基于Tkinter模块实现的弹球小游戏
本文实例讲述了Python基于Tkinter模块实现的弹球小游戏.分享给大家供大家参考,具体如下: #!usr/bin/python #-*- coding:utf-8 -*- from Tkinte ...
- python两人一碰_python运用pygame库实现双人弹球小游戏
使用python pygame库实现一个双人弹球小游戏,两人分别控制一个左右移动的挡板用来拦截小球,小球会在两板间不停弹跳,拦截失败的一方输掉游戏,规则类似于简化版的乒乓球. 因为是第一次用pygam ...
- python画圆形螺旋线_Python写的弹球小游戏
Python 的功能强大应用广泛,从爬虫到 Web 开发,从科学计算到人工智能,都能见到它的身影.当然,Python 还可以编写游戏代码,虽然不是主流,但却十分有趣,既能提升代码能力,又能自娱自乐.敲 ...
- PYTHON pygame库实战——实现双人弹球小游戏
PYTHON pygame实战--运用pygame库实现双人弹球小游戏 使用python pygame库实现一个双人弹球小游戏,两人分别控制一个左右移动的挡板用来拦截小球,小球会在两板间不停弹跳,拦截 ...
最新文章
- list对象_list对象,容量自适应的数组式容器
- 如何避免在Excel VBA中使用选择
- eclipse中代码没错但项目名称有个小红X
- 广东省计算机大赛设计什么时候,2017年广东省大学生计算机设计大赛
- 世界五星级大厨经典菜品集
- 固态硬盘怎么看出厂日期_固态到底怎么选?雷克沙NM610和西部数据SN500固态硬盘实测对比...
- python多核cpu_Python中的多核CPU共享数据之协程详解
- 用fast rcnn绘制loss曲线遇到的问题
- ubuntu防火墙关闭命令-转
- 零基础学python图文版-给伸手党的福利:Python 新手入门引导
- scala if 语句缩写_Scala If-Else语句示例教程
- GRE Tunnel实现企业网中的***
- 淘宝生成器在线制作,淘宝全屏代码装修店招导航教程
- linux系统安装SAI吗,求救~~~把linux安装到C盘了
- matlab data数据类型,MATLAB - 数据类型
- php unpack 原理,unpack
- 2020-10-20 Ant Design Vue 关闭国际化设置默认语言为中文的
- 您知道Linux下C语言编程的一些注意事项吗_教育中国
- 使用docsify+markdown+vditor构建gitlab pages文档库
- 林业调查规划设计单位资质办理认定
热门文章
- 手把手教你申请到美国itunes免费账号,解决Please contact itunes support to complete this transaction的问题
- 【随笔】关于学习FML的缘由。
- 银河麒麟高级服务器操作系统V10SP1 - ISO镜像定制 + KickStart自动化安装
- java按空格分字符串,两种用空格分隔的java字符串的方式
- Linux中线程和进程的区别
- html中像素是什么,[html5]html5中的viewport和px是什么(腾讯)
- 建筑公司劳务费用,材料费用缺少票怎么解决
- 数据开发如何巧妙解决业务问题
- 我国农村人均收入增长将连续三年超GDP增长幅度
- 威纶通触摸屏和LEADFIX变频器485通讯